lkml.org 
[lkml]   [2013]   [Dec]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: Spurious timeouts in mvmdio
On 12/04/2013 12:42 AM, Russell King - ARM Linux wrote:
>> This will make it correct when using interrupts but it will make the
>> loop wait one jiffie longer than it should when polling.
>
> Alternatively, code it like this instead.
>
> drivers/net/ethernet/marvell/mvmdio.c | 32 +++++++++++++++-----------------
> 1 files changed, 15 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
> index 7354960b583b..a6f59831fc5b 100644
> --- a/drivers/net/ethernet/marvell/mvmdio.c
> +++ b/drivers/net/ethernet/marvell/mvmdio.c
> @@ -76,31 +76,29 @@ static int orion_mdio_wait_ready(struct mii_bus *bus)
> {
> struct orion_mdio_dev *dev = bus->priv;
> unsigned long timeout = usecs_to_jiffies(MVMDIO_SMI_TIMEOUT);
> - unsigned long end = jiffies + timeout;
> - int timedout = 0;
>
> - while (1) {
> - if (orion_mdio_smi_is_done(dev))
> + if (dev->err_interrupt > 0) {
> + if (wait_event_timeout(dev->smi_busy_wait,
> + orion_mdio_smi_is_done(dev),
> + 1 + timeout))
> return 0;
> - else if (timedout)
> - break;
> + } else {
> + unsigned long end = jiffies + timeout;
>
> - if (dev->err_interrupt <= 0) {
> - usleep_range(MVMDIO_SMI_POLL_INTERVAL_MIN,
> - MVMDIO_SMI_POLL_INTERVAL_MAX);
> + while (1) {
> + if (orion_mdio_smi_is_done(dev))
> + return 0;
>
> if (time_is_before_jiffies(end))
> - ++timedout;
> - } else {
> - wait_event_timeout(dev->smi_busy_wait,
> - orion_mdio_smi_is_done(dev),
> - timeout);
> -
> - ++timedout;
> - }
> + break;
> +
> + usleep_range(MVMDIO_SMI_POLL_INTERVAL_MIN,
> + MVMDIO_SMI_POLL_INTERVAL_MAX);
> + }
> }
>
> dev_err(bus->parent, "Timeout: SMI busy for too long\n");
> +
> return -ETIMEDOUT;
> }

Hi Russell,

I have just tested your patch on MV88F6281 and MV88F6282 both in polling and
irq mode and it works just fine.

I had a similar patch almost ready to submit but you were faster than me.

Feel free to add my:

Tested-by: Nicolas Schichan <nschichan@freebox.fr>

Thanks,

--
Nicolas Schichan
Freebox SAS


\
 
 \ /
  Last update: 2013-12-04 13:01    [W:0.109 / U:0.232 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site