[Intel-wired-lan] ixgbevf: fix atomicity off IXGBEVF_FLAG_QUEUE_RESET_REQUESTED flag

John Greene jogreene at redhat.com
Wed Dec 2 20:25:39 UTC 2015

When doing a 'reboot' of a VM, the "ip link set ethX down" of an interface
using the ixgbevf.ko driver may hang indefinitely blocking the complete
boot down of the OS.    The "ip" command is executed from an rc6.d script.
The driver in performing the ioctl() was stuck in ixgbevf_down() looping
at this line forever:

while (adapter->flags & IXGBE_FLAG_IN_WATCHDOG_TASK)

While this issue has been fixed already by other upstream patches, it's noted
that IXGBEVF_FLAG_QUEUE_RESET_REQUESTED flag should likewise be changed.

Signed-off-by: Scott Otto <otts62 at yahoo.com>
Signed-off-by: John Greene <jogreene at redhat.com>
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index 592ff23..826b04f 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -1983,7 +1983,7 @@ static int ixgbevf_configure_dcb(struct ixgbevf_adapter *adapter)
 		hw->mbx.timeout = 0;
 		/* wait for watchdog to come around and bail us out */
+		set_bit(IXGBEVF_FLAG_QUEUE_RESET_REQUESTED, &adapter->flags);
 	return 0;
@@ -3230,10 +3230,10 @@ static void ixgbevf_queue_reset_subtask(struct ixgbevf_adapter *adapter)
 	struct net_device *dev = adapter->netdev;
-	if (!(adapter->flags & IXGBEVF_FLAG_QUEUE_RESET_REQUESTED))
+	if (!(test_bit(IXGBEVF_FLAG_QUEUE_RESET_REQUESTED, &adapter->flags)))
+	clear_bit(IXGBEVF_FLAG_QUEUE_RESET_REQUESTED, &adapter->flags);
 	/* if interface is down do nothing */
 	if (test_bit(__IXGBEVF_DOWN, &adapter->state) ||

More information about the Intel-wired-lan mailing list