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