lkml.org 
[lkml]   [2018]   [Oct]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH 1/2] net: axienet: recheck condition after timeout in mdio_wait()
From
From: Kurt Kanzenbach <kurt@linutronix.de>
Date: Tue, 30 Oct 2018 10:31:38 +0100

> The function could report a false positive if it gets preempted between reading
> the XAE_MDIO_MCR_OFFSET register and checking for the timeout. In such a case,
> the condition has to be rechecked to avoid false positives.
>
> Therefore, check for expected condition even after the timeout occurred.
>
> Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
...
> if (time_before_eq(end, jiffies)) {
> - WARN_ON(1);
> - return -ETIMEDOUT;
> + val = axienet_ior(lp, XAE_MDIO_MCR_OFFSET);
> + break;
> }
> +
> udelay(1);
> }
> - return 0;
> + if (val & XAE_MDIO_MCR_READY_MASK)
> + return 0;
> +
> + WARN_ON(1);
> + return -ETIMEDOUT;

You are not fundamentally changing the situation at all.

The condtion could change right after your last read of
XAR_MDIO_MCR_OFFSET, which is the same thing that happens before your
modifications to this code.

It sounds more like the timeout is slightly too short, and that's the
real problem that causes whatever behavior you think you are fixing
here.

I'm not applying this.

\
 
 \ /
  Last update: 2018-10-30 19:26    [W:0.214 / U:0.452 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site