> From: [email protected] [mailto:netdev- > [email protected]] On Behalf Of Vincenzo Maffione > Sent: Saturday, September 16, 2017 9:00 AM > To: Kirsher, Jeffrey T <[email protected]> > Cc: [email protected]; [email protected]; linux- > [email protected]; Vincenzo Maffione <[email protected]> > Subject: [PATCH net] driver: e1000: fix race condition between e1000_down() > and e1000_watchdog > > This patch fixes a race condition that can result into the interface being > up and carrier on, but with transmits disabled in the hardware. > The bug may show up by repeatedly IFF_DOWN+IFF_UP the interface, which > allows e1000_watchdog() interleave with e1000_down(). > > CPU x CPU y > -------------------------------------------------------------------- > e1000_down(): > netif_carrier_off() > e1000_watchdog(): > if (carrier == off) { > netif_carrier_on(); > enable_hw_transmit(); > } > disable_hw_transmit(); > e1000_watchdog(): > /* carrier on, do nothing */ > > Signed-off-by: Vincenzo Maffione <[email protected]> > --- > drivers/net/ethernet/intel/e1000/e1000_main.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-)
Tested-by: Aaron Brown <[email protected]>

