Commit d5dd7c3f authored by Emil Tantilov's avatar Emil Tantilov Committed by Jeff Kirsher

ixgbevf: use bit operations for setting and checking resets

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: default avatarAlexander Duyck <aduyck@mirantis.com>
Reported-by: default avatarScott Otto <otts62@yahoo.com>
Reported-by: default avatarJohn Greene <jogreene@redhat.com>
Signed-off-by: default avatarEmil Tantilov <emil.s.tantilov@intel.com>
Tested-by: default avatarPhil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 75b6462e
...@@ -403,13 +403,6 @@ struct ixgbevf_adapter { ...@@ -403,13 +403,6 @@ struct ixgbevf_adapter {
u32 alloc_rx_page_failed; u32 alloc_rx_page_failed;
u32 alloc_rx_buff_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; struct msix_entry *msix_entries;
/* OS defined structs */ /* OS defined structs */
...@@ -461,6 +454,8 @@ enum ixbgevf_state_t { ...@@ -461,6 +454,8 @@ enum ixbgevf_state_t {
__IXGBEVF_REMOVING, __IXGBEVF_REMOVING,
__IXGBEVF_SERVICE_SCHED, __IXGBEVF_SERVICE_SCHED,
__IXGBEVF_SERVICE_INITED, __IXGBEVF_SERVICE_INITED,
__IXGBEVF_RESET_REQUESTED,
__IXGBEVF_QUEUE_RESET_REQUESTED,
}; };
enum ixgbevf_boards { enum ixgbevf_boards {
......
...@@ -268,7 +268,7 @@ static void ixgbevf_tx_timeout_reset(struct ixgbevf_adapter *adapter) ...@@ -268,7 +268,7 @@ static void ixgbevf_tx_timeout_reset(struct ixgbevf_adapter *adapter)
{ {
/* Do the reset outside of interrupt context */ /* Do the reset outside of interrupt context */
if (!test_bit(__IXGBEVF_DOWN, &adapter->state)) { 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); ixgbevf_service_event_schedule(adapter);
} }
} }
...@@ -1984,7 +1984,7 @@ static int ixgbevf_configure_dcb(struct ixgbevf_adapter *adapter) ...@@ -1984,7 +1984,7 @@ static int ixgbevf_configure_dcb(struct ixgbevf_adapter *adapter)
hw->mbx.timeout = 0; hw->mbx.timeout = 0;
/* wait for watchdog to come around and bail us out */ /* 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; return 0;
...@@ -2749,11 +2749,9 @@ static void ixgbevf_service_timer(unsigned long data) ...@@ -2749,11 +2749,9 @@ static void ixgbevf_service_timer(unsigned long data)
static void ixgbevf_reset_subtask(struct ixgbevf_adapter *adapter) 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; return;
adapter->flags &= ~IXGBEVF_FLAG_RESET_REQUESTED;
/* If we're already down or resetting, just bail */ /* If we're already down or resetting, just bail */
if (test_bit(__IXGBEVF_DOWN, &adapter->state) || if (test_bit(__IXGBEVF_DOWN, &adapter->state) ||
test_bit(__IXGBEVF_RESETTING, &adapter->state)) test_bit(__IXGBEVF_RESETTING, &adapter->state))
...@@ -2821,7 +2819,7 @@ static void ixgbevf_watchdog_update_link(struct ixgbevf_adapter *adapter) ...@@ -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 check for link returns error we will need to reset */
if (err && time_after(jiffies, adapter->last_reset + (10 * HZ))) { 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; link_up = false;
} }
...@@ -3222,11 +3220,10 @@ static void ixgbevf_queue_reset_subtask(struct ixgbevf_adapter *adapter) ...@@ -3222,11 +3220,10 @@ static void ixgbevf_queue_reset_subtask(struct ixgbevf_adapter *adapter)
{ {
struct net_device *dev = adapter->netdev; 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; return;
adapter->flags &= ~IXGBEVF_FLAG_QUEUE_RESET_REQUESTED;
/* if interface is down do nothing */ /* if interface is down do nothing */
if (test_bit(__IXGBEVF_DOWN, &adapter->state) || if (test_bit(__IXGBEVF_DOWN, &adapter->state) ||
test_bit(__IXGBEVF_RESETTING, &adapter->state)) test_bit(__IXGBEVF_RESETTING, &adapter->state))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment