diff options
author | Vincenzo Maffione <v.maffione@gmail.com> | 2017-09-16 18:00:00 +0200 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2017-10-26 07:42:57 -0700 |
commit | 44c445c3d1b4eacff23141fa7977c3b2ec3a45c9 (patch) | |
tree | 27f2d4565203b13f07fb9bd69615c179fed88008 /drivers/ide/aec62xx.c | |
parent | 78e0ea6791d7baafb8a0ca82b1bd0c7b3453c919 (diff) | |
download | linux-44c445c3d1b4eacff23141fa7977c3b2ec3a45c9.tar.gz |
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 <v.maffione@gmail.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/ide/aec62xx.c')
0 files changed, 0 insertions, 0 deletions