ixgbevf: use bit operations for setting and checking resets
authorEmil Tantilov <emil.s.tantilov@intel.com>
Fri, 18 Dec 2015 01:32:55 +0000 (17:32 -0800)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Mon, 4 Apr 2016 19:51:26 +0000 (12:51 -0700)
Move the reset flags to adapter->state in order to make use of bit
operations.

This is an alternative patch to the one previously submitted by
John Greene.

Suggested-by: Alexander Duyck <aduyck@mirantis.com>
Reported-by: Scott Otto <otts62@yahoo.com>
Reported-by: John Greene <jogreene@redhat.com>
Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c

index 991eeae..5ac60ee 100644 (file)
@@ -403,13 +403,6 @@ struct ixgbevf_adapter {
        u32 alloc_rx_page_failed;
        u32 alloc_rx_buff_failed;
 
-       /* Some features need tri-state capability,
-        * thus the additional *_CAPABLE flags.
-        */
-       u32 flags;
-#define IXGBEVF_FLAG_RESET_REQUESTED           (u32)(1)
-#define IXGBEVF_FLAG_QUEUE_RESET_REQUESTED     (u32)(1 << 2)
-
        struct msix_entry *msix_entries;
 
        /* OS defined structs */
@@ -461,6 +454,8 @@ enum ixbgevf_state_t {
        __IXGBEVF_REMOVING,
        __IXGBEVF_SERVICE_SCHED,
        __IXGBEVF_SERVICE_INITED,
+       __IXGBEVF_RESET_REQUESTED,
+       __IXGBEVF_QUEUE_RESET_REQUESTED,
 };
 
 enum ixgbevf_boards {
index b0edae9..9a2eed0 100644 (file)
@@ -268,7 +268,7 @@ static void ixgbevf_tx_timeout_reset(struct ixgbevf_adapter *adapter)
 {
        /* Do the reset outside of interrupt context */
        if (!test_bit(__IXGBEVF_DOWN, &adapter->state)) {
-               adapter->flags |= IXGBEVF_FLAG_RESET_REQUESTED;
+               set_bit(__IXGBEVF_RESET_REQUESTED, &adapter->state);
                ixgbevf_service_event_schedule(adapter);
        }
 }
@@ -1984,7 +1984,7 @@ static int ixgbevf_configure_dcb(struct ixgbevf_adapter *adapter)
                hw->mbx.timeout = 0;
 
                /* wait for watchdog to come around and bail us out */
-               adapter->flags |= IXGBEVF_FLAG_QUEUE_RESET_REQUESTED;
+               set_bit(__IXGBEVF_QUEUE_RESET_REQUESTED, &adapter->state);
        }
 
        return 0;
@@ -2749,11 +2749,9 @@ static void ixgbevf_service_timer(unsigned long data)
 
 static void ixgbevf_reset_subtask(struct ixgbevf_adapter *adapter)
 {
-       if (!(adapter->flags & IXGBEVF_FLAG_RESET_REQUESTED))
+       if (!test_and_clear_bit(__IXGBEVF_RESET_REQUESTED, &adapter->state))
                return;
 
-       adapter->flags &= ~IXGBEVF_FLAG_RESET_REQUESTED;
-
        /* If we're already down or resetting, just bail */
        if (test_bit(__IXGBEVF_DOWN, &adapter->state) ||
            test_bit(__IXGBEVF_RESETTING, &adapter->state))
@@ -2821,7 +2819,7 @@ static void ixgbevf_watchdog_update_link(struct ixgbevf_adapter *adapter)
 
        /* if check for link returns error we will need to reset */
        if (err && time_after(jiffies, adapter->last_reset + (10 * HZ))) {
-               adapter->flags |= IXGBEVF_FLAG_RESET_REQUESTED;
+               set_bit(__IXGBEVF_RESET_REQUESTED, &adapter->state);
                link_up = false;
        }
 
@@ -3222,11 +3220,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_and_clear_bit(__IXGBEVF_QUEUE_RESET_REQUESTED,
+                               &adapter->state))
                return;
 
-       adapter->flags &= ~IXGBEVF_FLAG_QUEUE_RESET_REQUESTED;
-
        /* if interface is down do nothing */
        if (test_bit(__IXGBEVF_DOWN, &adapter->state) ||
            test_bit(__IXGBEVF_RESETTING, &adapter->state))