net: ena: Extract recurring driver reset code into a function
[ Upstream commit 9fe890cc5bb84d6859d9a2422830b7fd6fd20521 ] Create an inline function for resetting the driver to reduce code duplication. Signed-off-by: Nati Koler <nkoler@amazon.com> Signed-off-by: Arthur Kiyanovski <akiyano@amazon.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Stable-dep-of: 2dc8b1e7177d ("net: ena: Fix redundant device NUMA node override") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
4ad48d7f26
commit
cd549bd6cb
@ -103,7 +103,7 @@ static void ena_tx_timeout(struct net_device *dev, unsigned int txqueue)
|
||||
if (test_and_set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags))
|
||||
return;
|
||||
|
||||
adapter->reset_reason = ENA_REGS_RESET_OS_NETDEV_WD;
|
||||
ena_reset_device(adapter, ENA_REGS_RESET_OS_NETDEV_WD);
|
||||
ena_increase_stat(&adapter->dev_stats.tx_timeout, 1, &adapter->syncp);
|
||||
|
||||
netif_err(adapter, tx_err, dev, "Transmit time out\n");
|
||||
@ -166,11 +166,9 @@ static int ena_xmit_common(struct net_device *dev,
|
||||
"Failed to prepare tx bufs\n");
|
||||
ena_increase_stat(&ring->tx_stats.prepare_ctx_err, 1,
|
||||
&ring->syncp);
|
||||
if (rc != -ENOMEM) {
|
||||
adapter->reset_reason =
|
||||
ENA_REGS_RESET_DRIVER_INVALID_STATE;
|
||||
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
|
||||
}
|
||||
if (rc != -ENOMEM)
|
||||
ena_reset_device(adapter,
|
||||
ENA_REGS_RESET_DRIVER_INVALID_STATE);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -1297,10 +1295,8 @@ static int handle_invalid_req_id(struct ena_ring *ring, u16 req_id,
|
||||
req_id);
|
||||
|
||||
ena_increase_stat(&ring->tx_stats.bad_req_id, 1, &ring->syncp);
|
||||
ena_reset_device(ring->adapter, ENA_REGS_RESET_INV_TX_REQ_ID);
|
||||
|
||||
/* Trigger device reset */
|
||||
ring->adapter->reset_reason = ENA_REGS_RESET_INV_TX_REQ_ID;
|
||||
set_bit(ENA_FLAG_TRIGGER_RESET, &ring->adapter->flags);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
@ -1463,10 +1459,7 @@ static struct sk_buff *ena_rx_skb(struct ena_ring *rx_ring,
|
||||
netif_err(adapter, rx_err, rx_ring->netdev,
|
||||
"Page is NULL. qid %u req_id %u\n", rx_ring->qid, req_id);
|
||||
ena_increase_stat(&rx_ring->rx_stats.bad_req_id, 1, &rx_ring->syncp);
|
||||
adapter->reset_reason = ENA_REGS_RESET_INV_RX_REQ_ID;
|
||||
/* Make sure reset reason is set before triggering the reset */
|
||||
smp_mb__before_atomic();
|
||||
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
|
||||
ena_reset_device(adapter, ENA_REGS_RESET_INV_RX_REQ_ID);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1806,15 +1799,12 @@ error:
|
||||
if (rc == -ENOSPC) {
|
||||
ena_increase_stat(&rx_ring->rx_stats.bad_desc_num, 1,
|
||||
&rx_ring->syncp);
|
||||
adapter->reset_reason = ENA_REGS_RESET_TOO_MANY_RX_DESCS;
|
||||
ena_reset_device(adapter, ENA_REGS_RESET_TOO_MANY_RX_DESCS);
|
||||
} else {
|
||||
ena_increase_stat(&rx_ring->rx_stats.bad_req_id, 1,
|
||||
&rx_ring->syncp);
|
||||
adapter->reset_reason = ENA_REGS_RESET_INV_RX_REQ_ID;
|
||||
ena_reset_device(adapter, ENA_REGS_RESET_INV_RX_REQ_ID);
|
||||
}
|
||||
|
||||
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -3740,9 +3730,8 @@ static int check_for_rx_interrupt_queue(struct ena_adapter *adapter,
|
||||
netif_err(adapter, rx_err, adapter->netdev,
|
||||
"Potential MSIX issue on Rx side Queue = %d. Reset the device\n",
|
||||
rx_ring->qid);
|
||||
adapter->reset_reason = ENA_REGS_RESET_MISS_INTERRUPT;
|
||||
smp_mb__before_atomic();
|
||||
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
|
||||
|
||||
ena_reset_device(adapter, ENA_REGS_RESET_MISS_INTERRUPT);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
@ -3779,9 +3768,7 @@ static int check_missing_comp_in_tx_queue(struct ena_adapter *adapter,
|
||||
netif_err(adapter, tx_err, adapter->netdev,
|
||||
"Potential MSIX issue on Tx side Queue = %d. Reset the device\n",
|
||||
tx_ring->qid);
|
||||
adapter->reset_reason = ENA_REGS_RESET_MISS_INTERRUPT;
|
||||
smp_mb__before_atomic();
|
||||
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
|
||||
ena_reset_device(adapter, ENA_REGS_RESET_MISS_INTERRUPT);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
@ -3807,9 +3794,7 @@ static int check_missing_comp_in_tx_queue(struct ena_adapter *adapter,
|
||||
"The number of lost tx completions is above the threshold (%d > %d). Reset the device\n",
|
||||
missed_tx,
|
||||
adapter->missing_tx_completion_threshold);
|
||||
adapter->reset_reason =
|
||||
ENA_REGS_RESET_MISS_TX_CMPL;
|
||||
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
|
||||
ena_reset_device(adapter, ENA_REGS_RESET_MISS_TX_CMPL);
|
||||
rc = -EIO;
|
||||
}
|
||||
|
||||
@ -3933,8 +3918,7 @@ static void check_for_missing_keep_alive(struct ena_adapter *adapter)
|
||||
"Keep alive watchdog timeout.\n");
|
||||
ena_increase_stat(&adapter->dev_stats.wd_expired, 1,
|
||||
&adapter->syncp);
|
||||
adapter->reset_reason = ENA_REGS_RESET_KEEP_ALIVE_TO;
|
||||
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
|
||||
ena_reset_device(adapter, ENA_REGS_RESET_KEEP_ALIVE_TO);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3945,8 +3929,7 @@ static void check_for_admin_com_state(struct ena_adapter *adapter)
|
||||
"ENA admin queue is not in running state!\n");
|
||||
ena_increase_stat(&adapter->dev_stats.admin_q_pause, 1,
|
||||
&adapter->syncp);
|
||||
adapter->reset_reason = ENA_REGS_RESET_ADMIN_TO;
|
||||
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
|
||||
ena_reset_device(adapter, ENA_REGS_RESET_ADMIN_TO);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -410,6 +410,15 @@ int ena_set_rx_copybreak(struct ena_adapter *adapter, u32 rx_copybreak);
|
||||
|
||||
int ena_get_sset_count(struct net_device *netdev, int sset);
|
||||
|
||||
static inline void ena_reset_device(struct ena_adapter *adapter,
|
||||
enum ena_regs_reset_reason_types reset_reason)
|
||||
{
|
||||
adapter->reset_reason = reset_reason;
|
||||
/* Make sure reset reason is set before triggering the reset */
|
||||
smp_mb__before_atomic();
|
||||
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
|
||||
}
|
||||
|
||||
enum ena_xdp_errors_t {
|
||||
ENA_XDP_ALLOWED = 0,
|
||||
ENA_XDP_CURRENT_MTU_TOO_LARGE,
|
||||
|
Loading…
x
Reference in New Issue
Block a user