Commit d67f9234 authored by Roel Kluin's avatar Roel Kluin Committed by James Toy

If we reach the test just below the loop with a `timeout' value of 0, this

does not mean that the timeout caused the loop to end, but rather the
`smi_rd.s.pending', in the last iteration.  If timeout caused the loop to
end, then `timeout' is -1, not 0.

Since this can occur only in the last iteration, it is not very likely to
be a problem.  By changing the post- to prefix decrement we ensure that a
timeout of 0 does mean it timed out.
Signed-off-by: default avatarRoel Kluin <roel.kluin@gmail.com>
Acked-by: default avatarDavid Daney <ddaney@caviumnetworks.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent dda14687
......@@ -421,7 +421,7 @@ static inline int cvmx_mdio_45_read(int bus_id, int phy_id, int device,
do {
cvmx_wait(1000);
smi_rd.u64 = cvmx_read_csr(CVMX_SMIX_RD_DAT(bus_id));
} while (smi_rd.s.pending && timeout--);
} while (smi_rd.s.pending && --timeout);
if (timeout <= 0) {
cvmx_dprintf("cvmx_mdio_45_read: bus_id %d phy_id %2d "
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment