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 <m...@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))
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to