• Russell King's avatar
    net: fec: use reinit_completion() in mdio accessor functions · aac27c7a
    Russell King authored
    Rather than re-initialising the entire completion on every mdio access,
    use reinit_completion() which only resets the completion count.  This
    avoids possible reinitialisation of the contained spinlock and waitqueue
    while they may be in use (eg, mid-completion.)
    
    Such an event could occur if there's a long delay in interrupt handling
    causing the mdio accessor to time out, then a second access comes in
    while the interrupt handler on a different CPU has called complete().
    Another scenario where this has been observed is while locking has
    been missing at the phy layer, allowing concurrent attempts to access
    the MDIO bus.
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    aac27c7a
fec_main.c 92.9 KB