Skip to content

Commit 9fe890c

Browse files
akiyanokuba-moo
authored andcommitted
net: ena: Extract recurring driver reset code into a function
Create an inline function for resetting the driver to reduce code duplication. Signed-off-by: Nati Koler <[email protected]> Signed-off-by: Arthur Kiyanovski <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent d0e8831 commit 9fe890c

File tree

2 files changed

+23
-31
lines changed

2 files changed

+23
-31
lines changed

drivers/net/ethernet/amazon/ena/ena_netdev.c

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ static void ena_tx_timeout(struct net_device *dev, unsigned int txqueue)
103103
if (test_and_set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags))
104104
return;
105105

106-
adapter->reset_reason = ENA_REGS_RESET_OS_NETDEV_WD;
106+
ena_reset_device(adapter, ENA_REGS_RESET_OS_NETDEV_WD);
107107
ena_increase_stat(&adapter->dev_stats.tx_timeout, 1, &adapter->syncp);
108108

109109
netif_err(adapter, tx_err, dev, "Transmit time out\n");
@@ -166,11 +166,9 @@ static int ena_xmit_common(struct net_device *dev,
166166
"Failed to prepare tx bufs\n");
167167
ena_increase_stat(&ring->tx_stats.prepare_ctx_err, 1,
168168
&ring->syncp);
169-
if (rc != -ENOMEM) {
170-
adapter->reset_reason =
171-
ENA_REGS_RESET_DRIVER_INVALID_STATE;
172-
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
173-
}
169+
if (rc != -ENOMEM)
170+
ena_reset_device(adapter,
171+
ENA_REGS_RESET_DRIVER_INVALID_STATE);
174172
return rc;
175173
}
176174

@@ -1279,10 +1277,8 @@ static int handle_invalid_req_id(struct ena_ring *ring, u16 req_id,
12791277
req_id, ring->qid);
12801278

12811279
ena_increase_stat(&ring->tx_stats.bad_req_id, 1, &ring->syncp);
1280+
ena_reset_device(ring->adapter, ENA_REGS_RESET_INV_TX_REQ_ID);
12821281

1283-
/* Trigger device reset */
1284-
ring->adapter->reset_reason = ENA_REGS_RESET_INV_TX_REQ_ID;
1285-
set_bit(ENA_FLAG_TRIGGER_RESET, &ring->adapter->flags);
12861282
return -EFAULT;
12871283
}
12881284

@@ -1445,10 +1441,7 @@ static struct sk_buff *ena_rx_skb(struct ena_ring *rx_ring,
14451441
netif_err(adapter, rx_err, rx_ring->netdev,
14461442
"Page is NULL. qid %u req_id %u\n", rx_ring->qid, req_id);
14471443
ena_increase_stat(&rx_ring->rx_stats.bad_req_id, 1, &rx_ring->syncp);
1448-
adapter->reset_reason = ENA_REGS_RESET_INV_RX_REQ_ID;
1449-
/* Make sure reset reason is set before triggering the reset */
1450-
smp_mb__before_atomic();
1451-
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
1444+
ena_reset_device(adapter, ENA_REGS_RESET_INV_RX_REQ_ID);
14521445
return NULL;
14531446
}
14541447

@@ -1781,15 +1774,12 @@ static int ena_clean_rx_irq(struct ena_ring *rx_ring, struct napi_struct *napi,
17811774
if (rc == -ENOSPC) {
17821775
ena_increase_stat(&rx_ring->rx_stats.bad_desc_num, 1,
17831776
&rx_ring->syncp);
1784-
adapter->reset_reason = ENA_REGS_RESET_TOO_MANY_RX_DESCS;
1777+
ena_reset_device(adapter, ENA_REGS_RESET_TOO_MANY_RX_DESCS);
17851778
} else {
17861779
ena_increase_stat(&rx_ring->rx_stats.bad_req_id, 1,
17871780
&rx_ring->syncp);
1788-
adapter->reset_reason = ENA_REGS_RESET_INV_RX_REQ_ID;
1781+
ena_reset_device(adapter, ENA_REGS_RESET_INV_RX_REQ_ID);
17891782
}
1790-
1791-
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
1792-
17931783
return 0;
17941784
}
17951785

@@ -3707,9 +3697,8 @@ static int check_for_rx_interrupt_queue(struct ena_adapter *adapter,
37073697
netif_err(adapter, rx_err, adapter->netdev,
37083698
"Potential MSIX issue on Rx side Queue = %d. Reset the device\n",
37093699
rx_ring->qid);
3710-
adapter->reset_reason = ENA_REGS_RESET_MISS_INTERRUPT;
3711-
smp_mb__before_atomic();
3712-
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
3700+
3701+
ena_reset_device(adapter, ENA_REGS_RESET_MISS_INTERRUPT);
37133702
return -EIO;
37143703
}
37153704

@@ -3746,9 +3735,7 @@ static int check_missing_comp_in_tx_queue(struct ena_adapter *adapter,
37463735
netif_err(adapter, tx_err, adapter->netdev,
37473736
"Potential MSIX issue on Tx side Queue = %d. Reset the device\n",
37483737
tx_ring->qid);
3749-
adapter->reset_reason = ENA_REGS_RESET_MISS_INTERRUPT;
3750-
smp_mb__before_atomic();
3751-
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
3738+
ena_reset_device(adapter, ENA_REGS_RESET_MISS_INTERRUPT);
37523739
return -EIO;
37533740
}
37543741

@@ -3774,9 +3761,7 @@ static int check_missing_comp_in_tx_queue(struct ena_adapter *adapter,
37743761
"The number of lost tx completions is above the threshold (%d > %d). Reset the device\n",
37753762
missed_tx,
37763763
adapter->missing_tx_completion_threshold);
3777-
adapter->reset_reason =
3778-
ENA_REGS_RESET_MISS_TX_CMPL;
3779-
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
3764+
ena_reset_device(adapter, ENA_REGS_RESET_MISS_TX_CMPL);
37803765
rc = -EIO;
37813766
}
37823767

@@ -3897,8 +3882,7 @@ static void check_for_missing_keep_alive(struct ena_adapter *adapter)
38973882
"Keep alive watchdog timeout.\n");
38983883
ena_increase_stat(&adapter->dev_stats.wd_expired, 1,
38993884
&adapter->syncp);
3900-
adapter->reset_reason = ENA_REGS_RESET_KEEP_ALIVE_TO;
3901-
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
3885+
ena_reset_device(adapter, ENA_REGS_RESET_KEEP_ALIVE_TO);
39023886
}
39033887
}
39043888

@@ -3909,8 +3893,7 @@ static void check_for_admin_com_state(struct ena_adapter *adapter)
39093893
"ENA admin queue is not in running state!\n");
39103894
ena_increase_stat(&adapter->dev_stats.admin_q_pause, 1,
39113895
&adapter->syncp);
3912-
adapter->reset_reason = ENA_REGS_RESET_ADMIN_TO;
3913-
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
3896+
ena_reset_device(adapter, ENA_REGS_RESET_ADMIN_TO);
39143897
}
39153898
}
39163899

drivers/net/ethernet/amazon/ena/ena_netdev.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,15 @@ int ena_update_queue_count(struct ena_adapter *adapter, u32 new_channel_count);
394394

395395
int ena_get_sset_count(struct net_device *netdev, int sset);
396396

397+
static inline void ena_reset_device(struct ena_adapter *adapter,
398+
enum ena_regs_reset_reason_types reset_reason)
399+
{
400+
adapter->reset_reason = reset_reason;
401+
/* Make sure reset reason is set before triggering the reset */
402+
smp_mb__before_atomic();
403+
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
404+
}
405+
397406
enum ena_xdp_errors_t {
398407
ENA_XDP_ALLOWED = 0,
399408
ENA_XDP_CURRENT_MTU_TOO_LARGE,

0 commit comments

Comments
 (0)