New upstream version 18.08
[deb_dpdk.git] / drivers / net / sfc / base / siena_mcdi.c
index ef84459..d727c18 100644 (file)
@@ -124,17 +124,21 @@ siena_mcdi_read_response(
 {
        efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip);
        unsigned int pdur;
-       unsigned int pos;
+       unsigned int pos = 0;
        efx_dword_t data;
+       size_t remaining = length;
 
        EFSYS_ASSERT(emip->emi_port == 1 || emip->emi_port == 2);
        pdur = SIENA_MCDI_PDU(emip);
 
-       for (pos = 0; pos < length; pos += sizeof (efx_dword_t)) {
+       while (remaining > 0) {
+               size_t chunk = MIN(remaining, sizeof (data));
+
                EFX_BAR_TBL_READD(enp, FR_CZ_MC_TREG_SMEM,
                    pdur + ((offset + pos) >> 2), &data, B_FALSE);
-               memcpy((uint8_t *)bufferp + pos, &data,
-                   MIN(sizeof (data), length - pos));
+               memcpy((uint8_t *)bufferp + pos, &data, chunk);
+               pos += chunk;
+               remaining -= chunk;
        }
 }