]> git.baikalelectronics.ru Git - kernel.git/commit
net: fec: use reinit_completion() in mdio accessor functions
authorRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 25 Aug 2015 08:49:53 +0000 (09:49 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 25 Aug 2015 23:33:16 +0000 (16:33 -0700)
commit6a9e2cc2f27631f9495346e57ba04b644d2bdcf4
tree59e47d089c52d3ab854823bd00a96e90510cb797
parent12c36f265e012647b04b8940c43deab10fc7d7a7
net: fec: use reinit_completion() in mdio accessor functions

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: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/fec_main.c