Commit 75d67207 authored by David S. Miller's avatar David S. Miller

Merge branch '10GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue

Jeff Kirsher says:

====================
10GbE Intel Wired LAN Driver Updates 2016-08-18

This series contains updates to ixgbe and ixgbevf.

Emil cleans up confusing amongst the users by making an error message
into a debug message, since the TXDCTL.ENABLE (and comparable
VFTXDCTL.ENABLE for ixgbevf) bit is set only when the
transmit queue is actually enabled, which may not happen during the
configure phase eve if we waited for it.  Converts to using netdev_dbg()
macro instead of our home brewed macro for ixgbevf.  Converted the
service task to use atomic bitwise operations when setting and checking
reset requests to reduce the possibility of race conditions.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 484387c9 57ca2a4f
...@@ -653,7 +653,6 @@ struct ixgbe_adapter { ...@@ -653,7 +653,6 @@ struct ixgbe_adapter {
#define IXGBE_FLAG2_TEMP_SENSOR_EVENT BIT(3) #define IXGBE_FLAG2_TEMP_SENSOR_EVENT BIT(3)
#define IXGBE_FLAG2_SEARCH_FOR_SFP BIT(4) #define IXGBE_FLAG2_SEARCH_FOR_SFP BIT(4)
#define IXGBE_FLAG2_SFP_NEEDS_RESET BIT(5) #define IXGBE_FLAG2_SFP_NEEDS_RESET BIT(5)
#define IXGBE_FLAG2_RESET_REQUESTED BIT(6)
#define IXGBE_FLAG2_FDIR_REQUIRES_REINIT BIT(7) #define IXGBE_FLAG2_FDIR_REQUIRES_REINIT BIT(7)
#define IXGBE_FLAG2_RSS_FIELD_IPV4_UDP BIT(8) #define IXGBE_FLAG2_RSS_FIELD_IPV4_UDP BIT(8)
#define IXGBE_FLAG2_RSS_FIELD_IPV6_UDP BIT(9) #define IXGBE_FLAG2_RSS_FIELD_IPV6_UDP BIT(9)
...@@ -840,6 +839,7 @@ enum ixgbe_state_t { ...@@ -840,6 +839,7 @@ enum ixgbe_state_t {
__IXGBE_IN_SFP_INIT, __IXGBE_IN_SFP_INIT,
__IXGBE_PTP_RUNNING, __IXGBE_PTP_RUNNING,
__IXGBE_PTP_TX_IN_PROGRESS, __IXGBE_PTP_TX_IN_PROGRESS,
__IXGBE_RESET_REQUESTED,
}; };
struct ixgbe_cb { struct ixgbe_cb {
......
...@@ -1103,7 +1103,7 @@ static void ixgbe_tx_timeout_reset(struct ixgbe_adapter *adapter) ...@@ -1103,7 +1103,7 @@ static void ixgbe_tx_timeout_reset(struct ixgbe_adapter *adapter)
/* Do the reset outside of interrupt context */ /* Do the reset outside of interrupt context */
if (!test_bit(__IXGBE_DOWN, &adapter->state)) { if (!test_bit(__IXGBE_DOWN, &adapter->state)) {
adapter->flags2 |= IXGBE_FLAG2_RESET_REQUESTED; set_bit(__IXGBE_RESET_REQUESTED, &adapter->state);
e_warn(drv, "initiating reset due to tx timeout\n"); e_warn(drv, "initiating reset due to tx timeout\n");
ixgbe_service_event_schedule(adapter); ixgbe_service_event_schedule(adapter);
} }
...@@ -2777,7 +2777,7 @@ static irqreturn_t ixgbe_msix_other(int irq, void *data) ...@@ -2777,7 +2777,7 @@ static irqreturn_t ixgbe_msix_other(int irq, void *data)
} }
if (eicr & IXGBE_EICR_ECC) { if (eicr & IXGBE_EICR_ECC) {
e_info(link, "Received ECC Err, initiating reset\n"); e_info(link, "Received ECC Err, initiating reset\n");
adapter->flags2 |= IXGBE_FLAG2_RESET_REQUESTED; set_bit(__IXGBE_RESET_REQUESTED, &adapter->state);
ixgbe_service_event_schedule(adapter); ixgbe_service_event_schedule(adapter);
IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_ECC); IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_ECC);
} }
...@@ -3007,7 +3007,7 @@ static irqreturn_t ixgbe_intr(int irq, void *data) ...@@ -3007,7 +3007,7 @@ static irqreturn_t ixgbe_intr(int irq, void *data)
case ixgbe_mac_x550em_a: case ixgbe_mac_x550em_a:
if (eicr & IXGBE_EICR_ECC) { if (eicr & IXGBE_EICR_ECC) {
e_info(link, "Received ECC Err, initiating reset\n"); e_info(link, "Received ECC Err, initiating reset\n");
adapter->flags2 |= IXGBE_FLAG2_RESET_REQUESTED; set_bit(__IXGBE_RESET_REQUESTED, &adapter->state);
ixgbe_service_event_schedule(adapter); ixgbe_service_event_schedule(adapter);
IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_ECC); IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_ECC);
} }
...@@ -3224,7 +3224,7 @@ void ixgbe_configure_tx_ring(struct ixgbe_adapter *adapter, ...@@ -3224,7 +3224,7 @@ void ixgbe_configure_tx_ring(struct ixgbe_adapter *adapter,
txdctl = IXGBE_READ_REG(hw, IXGBE_TXDCTL(reg_idx)); txdctl = IXGBE_READ_REG(hw, IXGBE_TXDCTL(reg_idx));
} while (--wait_loop && !(txdctl & IXGBE_TXDCTL_ENABLE)); } while (--wait_loop && !(txdctl & IXGBE_TXDCTL_ENABLE));
if (!wait_loop) if (!wait_loop)
e_err(drv, "Could not enable Tx Queue %d\n", reg_idx); hw_dbg(hw, "Could not enable Tx Queue %d\n", reg_idx);
} }
static void ixgbe_setup_mtqc(struct ixgbe_adapter *adapter) static void ixgbe_setup_mtqc(struct ixgbe_adapter *adapter)
...@@ -5500,8 +5500,8 @@ void ixgbe_down(struct ixgbe_adapter *adapter) ...@@ -5500,8 +5500,8 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
ixgbe_napi_disable_all(adapter); ixgbe_napi_disable_all(adapter);
adapter->flags2 &= ~(IXGBE_FLAG2_FDIR_REQUIRES_REINIT | clear_bit(__IXGBE_RESET_REQUESTED, &adapter->state);
IXGBE_FLAG2_RESET_REQUESTED); adapter->flags2 &= ~IXGBE_FLAG2_FDIR_REQUIRES_REINIT;
adapter->flags &= ~IXGBE_FLAG_NEED_LINK_UPDATE; adapter->flags &= ~IXGBE_FLAG_NEED_LINK_UPDATE;
del_timer_sync(&adapter->service_timer); del_timer_sync(&adapter->service_timer);
...@@ -6921,7 +6921,7 @@ static void ixgbe_watchdog_flush_tx(struct ixgbe_adapter *adapter) ...@@ -6921,7 +6921,7 @@ static void ixgbe_watchdog_flush_tx(struct ixgbe_adapter *adapter)
* (Do the reset outside of interrupt context). * (Do the reset outside of interrupt context).
*/ */
e_warn(drv, "initiating reset to clear Tx work after link loss\n"); e_warn(drv, "initiating reset to clear Tx work after link loss\n");
adapter->flags2 |= IXGBE_FLAG2_RESET_REQUESTED; set_bit(__IXGBE_RESET_REQUESTED, &adapter->state);
} }
} }
} }
...@@ -7187,11 +7187,9 @@ static void ixgbe_phy_interrupt_subtask(struct ixgbe_adapter *adapter) ...@@ -7187,11 +7187,9 @@ static void ixgbe_phy_interrupt_subtask(struct ixgbe_adapter *adapter)
static void ixgbe_reset_subtask(struct ixgbe_adapter *adapter) static void ixgbe_reset_subtask(struct ixgbe_adapter *adapter)
{ {
if (!(adapter->flags2 & IXGBE_FLAG2_RESET_REQUESTED)) if (!test_and_clear_bit(__IXGBE_RESET_REQUESTED, &adapter->state))
return; return;
adapter->flags2 &= ~IXGBE_FLAG2_RESET_REQUESTED;
/* If we're already down, removing or resetting, just bail */ /* If we're already down, removing or resetting, just bail */
if (test_bit(__IXGBE_DOWN, &adapter->state) || if (test_bit(__IXGBE_DOWN, &adapter->state) ||
test_bit(__IXGBE_REMOVING, &adapter->state) || test_bit(__IXGBE_REMOVING, &adapter->state) ||
......
...@@ -502,12 +502,9 @@ extern void ixgbevf_write_eitr(struct ixgbevf_q_vector *q_vector); ...@@ -502,12 +502,9 @@ extern void ixgbevf_write_eitr(struct ixgbevf_q_vector *q_vector);
void ixgbe_napi_add_all(struct ixgbevf_adapter *adapter); void ixgbe_napi_add_all(struct ixgbevf_adapter *adapter);
void ixgbe_napi_del_all(struct ixgbevf_adapter *adapter); void ixgbe_napi_del_all(struct ixgbevf_adapter *adapter);
#ifdef DEBUG #define ixgbevf_hw_to_netdev(hw) \
char *ixgbevf_get_hw_dev_name(struct ixgbe_hw *hw); (((struct ixgbevf_adapter *)(hw)->back)->netdev)
#define hw_dbg(hw, format, arg...) \
printk(KERN_DEBUG "%s: " format, ixgbevf_get_hw_dev_name(hw), ##arg)
#else
#define hw_dbg(hw, format, arg...) do {} while (0)
#endif
#define hw_dbg(hw, format, arg...) \
netdev_dbg(ixgbevf_hw_to_netdev(hw), format, ## arg)
#endif /* _IXGBEVF_H_ */ #endif /* _IXGBEVF_H_ */
...@@ -1612,7 +1612,7 @@ static void ixgbevf_configure_tx_ring(struct ixgbevf_adapter *adapter, ...@@ -1612,7 +1612,7 @@ static void ixgbevf_configure_tx_ring(struct ixgbevf_adapter *adapter,
txdctl = IXGBE_READ_REG(hw, IXGBE_VFTXDCTL(reg_idx)); txdctl = IXGBE_READ_REG(hw, IXGBE_VFTXDCTL(reg_idx));
} while (--wait_loop && !(txdctl & IXGBE_TXDCTL_ENABLE)); } while (--wait_loop && !(txdctl & IXGBE_TXDCTL_ENABLE));
if (!wait_loop) if (!wait_loop)
pr_err("Could not enable Tx Queue %d\n", reg_idx); hw_dbg(hw, "Could not enable Tx Queue %d\n", reg_idx);
} }
/** /**
...@@ -2993,6 +2993,7 @@ static void ixgbevf_free_all_tx_resources(struct ixgbevf_adapter *adapter) ...@@ -2993,6 +2993,7 @@ static void ixgbevf_free_all_tx_resources(struct ixgbevf_adapter *adapter)
**/ **/
int ixgbevf_setup_tx_resources(struct ixgbevf_ring *tx_ring) int ixgbevf_setup_tx_resources(struct ixgbevf_ring *tx_ring)
{ {
struct ixgbevf_adapter *adapter = netdev_priv(tx_ring->netdev);
int size; int size;
size = sizeof(struct ixgbevf_tx_buffer) * tx_ring->count; size = sizeof(struct ixgbevf_tx_buffer) * tx_ring->count;
......
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