Message ID | 1387458588-17231-1-git-send-email-leigh@solinno.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Dec 19, 2013 at 01:09:48PM +0000, Leigh Brown wrote: > This version corrects the whitespace issue. > > orion_mdio_wait_ready uses wait_event_timeout to wait for the > SMI interrupt to fire. wait_event_timeout waits for between > "timeout - 1" and "timeout" jiffies. In this case a 1ms timeout > when HZ is 1000 results in a wait of 0 to 1 jiffies, causing > premature timeouts. > > This fix ensures a minimum timeout of 2 jiffies, ensuring > wait_event_timeout will always wait at least 1 jiffie. > > Issue reported by Nicolas Schichan. > > Tested-by: Nicolas Schichan <nschichan@freebox.fr> > Signed-off-by: Leigh Brown <leigh@solinno.co.uk> > drivers/net/ethernet/marvell/mvmdio.c | 6 ++++++ > 1 file changed, 6 insertions(+) Leigh, I have just noticed a regression in 3.13-rc3 vs 3.10, on kirkwood where 3.13 occasionally prints: 3 12/11 13:59:02 kernel: orion-mdio f1072004.mdio: Timeout: SMI busy for too long Is that the same issue that this patch is addressing? Regards, Jason
On 2013-12-19 17:43, Jason Gunthorpe wrote: > On Thu, Dec 19, 2013 at 01:09:48PM +0000, Leigh Brown wrote: >> This version corrects the whitespace issue. >> >> orion_mdio_wait_ready uses wait_event_timeout to wait for the >> SMI interrupt to fire. wait_event_timeout waits for between >> "timeout - 1" and "timeout" jiffies. In this case a 1ms timeout >> when HZ is 1000 results in a wait of 0 to 1 jiffies, causing >> premature timeouts. >> >> This fix ensures a minimum timeout of 2 jiffies, ensuring >> wait_event_timeout will always wait at least 1 jiffie. >> >> Issue reported by Nicolas Schichan. >> >> Tested-by: Nicolas Schichan <nschichan@freebox.fr> >> Signed-off-by: Leigh Brown <leigh@solinno.co.uk> >> drivers/net/ethernet/marvell/mvmdio.c | 6 ++++++ >> 1 file changed, 6 insertions(+) > > Leigh, I have just noticed a regression in 3.13-rc3 vs 3.10, on > kirkwood where 3.13 occasionally prints: > > 3 12/11 13:59:02 kernel: orion-mdio f1072004.mdio: Timeout: SMI busy > for too long > > Is that the same issue that this patch is addressing? Yes, absolutely. Regards, Leigh.
From: Leigh Brown <leigh@solinno.co.uk> Date: Thu, 19 Dec 2013 13:09:48 +0000 > This version corrects the whitespace issue. > > orion_mdio_wait_ready uses wait_event_timeout to wait for the > SMI interrupt to fire. wait_event_timeout waits for between > "timeout - 1" and "timeout" jiffies. In this case a 1ms timeout > when HZ is 1000 results in a wait of 0 to 1 jiffies, causing > premature timeouts. > > This fix ensures a minimum timeout of 2 jiffies, ensuring > wait_event_timeout will always wait at least 1 jiffie. > > Issue reported by Nicolas Schichan. > > Tested-by: Nicolas Schichan <nschichan@freebox.fr> > Signed-off-by: Leigh Brown <leigh@solinno.co.uk> Applied, and queued up for -stable. I wonder how many other wait_event_timeout() users potentially have this problem.
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c index 7354960..c4eeb69 100644 --- a/drivers/net/ethernet/marvell/mvmdio.c +++ b/drivers/net/ethernet/marvell/mvmdio.c @@ -92,6 +92,12 @@ static int orion_mdio_wait_ready(struct mii_bus *bus) if (time_is_before_jiffies(end)) ++timedout; } else { + /* wait_event_timeout does not guarantee a delay of at + * least one whole jiffie, so timeout must be no less + * than two. + */ + if (timeout < 2) + timeout = 2; wait_event_timeout(dev->smi_busy_wait, orion_mdio_smi_is_done(dev), timeout);