mirror of https://gitee.com/openkylin/linux.git
ixgbe: cleanup some minor issues in ixgbe_down()
This patch cleans up two minor issues in ixgbe_down. Specifically it addresses the fact that the VFs should not be pinged until after interrupts are disabled otherwise they might still get a response. It also drops the use of the txdctl temporary variable since the only bit we should be writing to the TXDCTL registers during a shutdown is the flush bit. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
f0f9778d04
commit
34cecbbfad
|
@ -4182,26 +4182,12 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
|
||||||
struct net_device *netdev = adapter->netdev;
|
struct net_device *netdev = adapter->netdev;
|
||||||
struct ixgbe_hw *hw = &adapter->hw;
|
struct ixgbe_hw *hw = &adapter->hw;
|
||||||
u32 rxctrl;
|
u32 rxctrl;
|
||||||
u32 txdctl;
|
|
||||||
int i;
|
int i;
|
||||||
int num_q_vectors = adapter->num_msix_vectors - NON_Q_VECTORS;
|
int num_q_vectors = adapter->num_msix_vectors - NON_Q_VECTORS;
|
||||||
|
|
||||||
/* signal that we are down to the interrupt handler */
|
/* signal that we are down to the interrupt handler */
|
||||||
set_bit(__IXGBE_DOWN, &adapter->state);
|
set_bit(__IXGBE_DOWN, &adapter->state);
|
||||||
|
|
||||||
/* disable receive for all VFs and wait one second */
|
|
||||||
if (adapter->num_vfs) {
|
|
||||||
/* ping all the active vfs to let them know we are going down */
|
|
||||||
ixgbe_ping_all_vfs(adapter);
|
|
||||||
|
|
||||||
/* Disable all VFTE/VFRE TX/RX */
|
|
||||||
ixgbe_disable_tx_rx(adapter);
|
|
||||||
|
|
||||||
/* Mark all the VFs as inactive */
|
|
||||||
for (i = 0 ; i < adapter->num_vfs; i++)
|
|
||||||
adapter->vfinfo[i].clear_to_send = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* disable receives */
|
/* disable receives */
|
||||||
rxctrl = IXGBE_READ_REG(hw, IXGBE_RXCTRL);
|
rxctrl = IXGBE_READ_REG(hw, IXGBE_RXCTRL);
|
||||||
IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, rxctrl & ~IXGBE_RXCTRL_RXEN);
|
IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, rxctrl & ~IXGBE_RXCTRL_RXEN);
|
||||||
|
@ -4229,6 +4215,19 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
|
||||||
|
|
||||||
del_timer_sync(&adapter->service_timer);
|
del_timer_sync(&adapter->service_timer);
|
||||||
|
|
||||||
|
/* disable receive for all VFs and wait one second */
|
||||||
|
if (adapter->num_vfs) {
|
||||||
|
/* ping all the active vfs to let them know we are going down */
|
||||||
|
ixgbe_ping_all_vfs(adapter);
|
||||||
|
|
||||||
|
/* Disable all VFTE/VFRE TX/RX */
|
||||||
|
ixgbe_disable_tx_rx(adapter);
|
||||||
|
|
||||||
|
/* Mark all the VFs as inactive */
|
||||||
|
for (i = 0 ; i < adapter->num_vfs; i++)
|
||||||
|
adapter->vfinfo[i].clear_to_send = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Cleanup the affinity_hint CPU mask memory and callback */
|
/* Cleanup the affinity_hint CPU mask memory and callback */
|
||||||
for (i = 0; i < num_q_vectors; i++) {
|
for (i = 0; i < num_q_vectors; i++) {
|
||||||
struct ixgbe_q_vector *q_vector = adapter->q_vector[i];
|
struct ixgbe_q_vector *q_vector = adapter->q_vector[i];
|
||||||
|
@ -4241,11 +4240,10 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
|
||||||
/* disable transmits in the hardware now that interrupts are off */
|
/* disable transmits in the hardware now that interrupts are off */
|
||||||
for (i = 0; i < adapter->num_tx_queues; i++) {
|
for (i = 0; i < adapter->num_tx_queues; i++) {
|
||||||
u8 reg_idx = adapter->tx_ring[i]->reg_idx;
|
u8 reg_idx = adapter->tx_ring[i]->reg_idx;
|
||||||
txdctl = IXGBE_READ_REG(hw, IXGBE_TXDCTL(reg_idx));
|
IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(reg_idx), IXGBE_TXDCTL_SWFLSH);
|
||||||
IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(reg_idx),
|
|
||||||
(txdctl & ~IXGBE_TXDCTL_ENABLE));
|
|
||||||
}
|
}
|
||||||
/* Disable the Tx DMA engine on 82599 */
|
|
||||||
|
/* Disable the Tx DMA engine on 82599 and X540 */
|
||||||
switch (hw->mac.type) {
|
switch (hw->mac.type) {
|
||||||
case ixgbe_mac_82599EB:
|
case ixgbe_mac_82599EB:
|
||||||
case ixgbe_mac_X540:
|
case ixgbe_mac_X540:
|
||||||
|
|
Loading…
Reference in New Issue