svn commit: r361515 - head/sys/dev/ena
Marcin Wojtas
mw at FreeBSD.org
Tue May 26 15:37:56 UTC 2020
Author: mw
Date: Tue May 26 15:37:55 2020
New Revision: 361515
URL: https://svnweb.freebsd.org/changeset/base/361515
Log:
Add trigger reset function in the ENA driver
As the reset triggering is no longer a simple macro that was just
setting appropriate flag, the new function for triggering reset was
added. It improves code readability a lot, as we are avoiding additional
indentation.
Submitted by: Michal Krawczyk <mk at semihalf.com>
Obtained from: Semihalf
Sponsored by: Amazon, Inc.
Modified:
head/sys/dev/ena/ena.c
head/sys/dev/ena/ena.h
head/sys/dev/ena/ena_datapath.c
head/sys/dev/ena/ena_netmap.c
Modified: head/sys/dev/ena/ena.c
==============================================================================
--- head/sys/dev/ena/ena.c Tue May 26 15:35:22 2020 (r361514)
+++ head/sys/dev/ena/ena.c Tue May 26 15:37:55 2020 (r361515)
@@ -2742,10 +2742,7 @@ static void check_for_missing_keep_alive(struct ena_ad
device_printf(adapter->pdev,
"Keep alive watchdog timeout.\n");
counter_u64_add(adapter->dev_stats.wd_expired, 1);
- if (likely(!ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
- adapter->reset_reason = ENA_REGS_RESET_KEEP_ALIVE_TO;
- ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
- }
+ ena_trigger_reset(adapter, ENA_REGS_RESET_KEEP_ALIVE_TO);
}
}
@@ -2757,10 +2754,7 @@ static void check_for_admin_com_state(struct ena_adapt
device_printf(adapter->pdev,
"ENA admin queue is not in running state!\n");
counter_u64_add(adapter->dev_stats.admin_q_pause, 1);
- if (likely(!ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
- adapter->reset_reason = ENA_REGS_RESET_ADMIN_TO;
- ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
- }
+ ena_trigger_reset(adapter, ENA_REGS_RESET_ADMIN_TO);
}
}
@@ -2779,10 +2773,7 @@ check_for_rx_interrupt_queue(struct ena_adapter *adapt
if (rx_ring->no_interrupt_event_cnt == ENA_MAX_NO_INTERRUPT_ITERATIONS) {
device_printf(adapter->pdev, "Potential MSIX issue on Rx side "
"Queue = %d. Reset the device\n", rx_ring->qid);
- if (likely(!ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
- adapter->reset_reason = ENA_REGS_RESET_MISS_INTERRUPT;
- ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
- }
+ ena_trigger_reset(adapter, ENA_REGS_RESET_MISS_INTERRUPT);
return (EIO);
}
@@ -2820,13 +2811,8 @@ check_missing_comp_in_tx_queue(struct ena_adapter *ada
device_printf(adapter->pdev,
"Potential MSIX issue on Tx side Queue = %d. "
"Reset the device\n", tx_ring->qid);
- if (likely(!ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET,
- adapter))) {
- adapter->reset_reason =
- ENA_REGS_RESET_MISS_INTERRUPT;
- ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET,
- adapter);
- }
+ ena_trigger_reset(adapter,
+ ENA_REGS_RESET_MISS_INTERRUPT);
return (EIO);
}
@@ -2848,10 +2834,7 @@ check_missing_comp_in_tx_queue(struct ena_adapter *ada
"The number of lost tx completion is above the threshold "
"(%d > %d). Reset the device\n",
missed_tx, adapter->missing_tx_threshold);
- if (likely(!ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
- adapter->reset_reason = ENA_REGS_RESET_MISS_TX_CMPL;
- ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
- }
+ ena_trigger_reset(adapter, ENA_REGS_RESET_MISS_TX_CMPL);
rc = EIO;
}
Modified: head/sys/dev/ena/ena.h
==============================================================================
--- head/sys/dev/ena/ena.h Tue May 26 15:35:22 2020 (r361514)
+++ head/sys/dev/ena/ena.h Tue May 26 15:37:55 2020 (r361515)
@@ -484,6 +484,16 @@ int ena_restore_device(struct ena_adapter *);
void ena_destroy_device(struct ena_adapter *, bool);
int ena_refill_rx_bufs(struct ena_ring *, uint32_t);
+static inline void
+ena_trigger_reset(struct ena_adapter *adapter,
+ enum ena_regs_reset_reason_types reset_reason)
+{
+ if (likely(!ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
+ adapter->reset_reason = reset_reason;
+ ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
+ }
+}
+
static inline int
validate_rx_req_id(struct ena_ring *rx_ring, uint16_t req_id)
{
@@ -495,10 +505,7 @@ validate_rx_req_id(struct ena_ring *rx_ring, uint16_t
counter_u64_add(rx_ring->rx_stats.bad_req_id, 1);
/* Trigger device reset */
- if (likely(!ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, rx_ring->adapter))) {
- rx_ring->adapter->reset_reason = ENA_REGS_RESET_INV_RX_REQ_ID;
- ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, rx_ring->adapter);
- }
+ ena_trigger_reset(rx_ring->adapter, ENA_REGS_RESET_INV_RX_REQ_ID);
return (EFAULT);
}
Modified: head/sys/dev/ena/ena_datapath.c
==============================================================================
--- head/sys/dev/ena/ena_datapath.c Tue May 26 15:35:22 2020 (r361514)
+++ head/sys/dev/ena/ena_datapath.c Tue May 26 15:37:55 2020 (r361515)
@@ -201,8 +201,7 @@ validate_tx_req_id(struct ena_ring *tx_ring, uint16_t
counter_u64_add(tx_ring->tx_stats.bad_req_id, 1);
/* Trigger device reset */
- adapter->reset_reason = ENA_REGS_RESET_INV_TX_REQ_ID;
- ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
+ ena_trigger_reset(adapter, ENA_REGS_RESET_INV_TX_REQ_ID);
return (EFAULT);
}
@@ -670,10 +669,7 @@ error:
counter_u64_add(rx_ring->rx_stats.bad_desc_num, 1);
/* Too many desc from the device. Trigger reset */
- if (likely(!ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
- adapter->reset_reason = ENA_REGS_RESET_TOO_MANY_RX_DESCS;
- ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
- }
+ ena_trigger_reset(adapter, ENA_REGS_RESET_TOO_MANY_RX_DESCS);
return (0);
}
Modified: head/sys/dev/ena/ena_netmap.c
==============================================================================
--- head/sys/dev/ena/ena_netmap.c Tue May 26 15:35:22 2020 (r361514)
+++ head/sys/dev/ena/ena_netmap.c Tue May 26 15:37:55 2020 (r361515)
@@ -885,8 +885,7 @@ validate_tx_req_id(struct ena_ring *tx_ring, uint16_t
ena_trace(ENA_WARNING, "Invalid req_id: %hu\n", req_id);
counter_u64_add(tx_ring->tx_stats.bad_req_id, 1);
- adapter->reset_reason = ENA_REGS_RESET_INV_TX_REQ_ID;
- ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, adapter);
+ ena_trigger_reset(adapter, ENA_REGS_RESET_INV_TX_REQ_ID);
return (EFAULT);
}
@@ -962,8 +961,8 @@ ena_netmap_rx_frame(struct ena_netmap_ctx *ctx)
if (unlikely(rc != 0)) {
ena_trace(ENA_ALERT, "Too many desc from the device.\n");
counter_u64_add(ctx->ring->rx_stats.bad_desc_num, 1);
- ctx->adapter->reset_reason = ENA_REGS_RESET_TOO_MANY_RX_DESCS;
- ENA_FLAG_SET_ATOMIC(ENA_FLAG_TRIGGER_RESET, ctx->adapter);
+ ena_trigger_reset(ctx->adapter,
+ ENA_REGS_RESET_TOO_MANY_RX_DESCS);
return (rc);
}
if (unlikely(ena_rx_ctx.descs == 0))
More information about the svn-src-head
mailing list