sfc: remove tx and MCDI handling from NAPI budget consideration
authorBert Kenward <bkenward@solarflare.com>
Thu, 25 Jan 2018 17:24:20 +0000 (17:24 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 25 Jan 2018 21:05:13 +0000 (16:05 -0500)
The NAPI budget is only for RX processing work, not other work such as
 TX or MCDI completion handling.

Signed-off-by: Bert Kenward <bkenward@solarflare.com>
Signed-off-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/ef10.c
drivers/net/ethernet/sfc/farch.c

index 8ae467db91620bee8d8444e19790ff6db9221eb0..03ec2cc1eab4bf9cc0dc5cc85db3efbce1da863f 100644 (file)
@@ -3572,31 +3572,26 @@ static int efx_ef10_handle_rx_event(struct efx_channel *channel,
        return n_packets;
 }
 
-static int
+static void
 efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event)
 {
        struct efx_nic *efx = channel->efx;
        struct efx_tx_queue *tx_queue;
        unsigned int tx_ev_desc_ptr;
        unsigned int tx_ev_q_label;
-       int tx_descs = 0;
 
        if (unlikely(READ_ONCE(efx->reset_pending)))
-               return 0;
+               return;
 
        if (unlikely(EFX_QWORD_FIELD(*event, ESF_DZ_TX_DROP_EVENT)))
-               return 0;
+               return;
 
        /* Transmit completion */
        tx_ev_desc_ptr = EFX_QWORD_FIELD(*event, ESF_DZ_TX_DESCR_INDX);
        tx_ev_q_label = EFX_QWORD_FIELD(*event, ESF_DZ_TX_QLABEL);
        tx_queue = efx_channel_get_tx_queue(channel,
                                            tx_ev_q_label % EFX_TXQ_TYPES);
-       tx_descs = ((tx_ev_desc_ptr + 1 - tx_queue->read_count) &
-                   tx_queue->ptr_mask);
        efx_xmit_done(tx_queue, tx_ev_desc_ptr & tx_queue->ptr_mask);
-
-       return tx_descs;
 }
 
 static void
@@ -3658,7 +3653,6 @@ static int efx_ef10_ev_process(struct efx_channel *channel, int quota)
        efx_qword_t event, *p_event;
        unsigned int read_ptr;
        int ev_code;
-       int tx_descs = 0;
        int spent = 0;
 
        if (quota <= 0)
@@ -3698,13 +3692,7 @@ static int efx_ef10_ev_process(struct efx_channel *channel, int quota)
                        }
                        break;
                case ESE_DZ_EV_CODE_TX_EV:
-                       tx_descs += efx_ef10_handle_tx_event(channel, &event);
-                       if (tx_descs > efx->txq_entries) {
-                               spent = quota;
-                               goto out;
-                       } else if (++spent == quota) {
-                               goto out;
-                       }
+                       efx_ef10_handle_tx_event(channel, &event);
                        break;
                case ESE_DZ_EV_CODE_DRIVER_EV:
                        efx_ef10_handle_driver_event(channel, &event);
index 5334dc83d926024e854420f8075d1b9e0a5af04c..ca79ac6d0ac375fc5ae7acada5782de13e7fb9b0 100644 (file)
@@ -818,17 +818,16 @@ static void efx_farch_magic_event(struct efx_channel *channel, u32 magic)
  * The NIC batches TX completion events; the message we receive is of
  * the form "complete all TX events up to this index".
  */
-static int
+static void
 efx_farch_handle_tx_event(struct efx_channel *channel, efx_qword_t *event)
 {
        unsigned int tx_ev_desc_ptr;
        unsigned int tx_ev_q_label;
        struct efx_tx_queue *tx_queue;
        struct efx_nic *efx = channel->efx;
-       int tx_packets = 0;
 
        if (unlikely(READ_ONCE(efx->reset_pending)))
-               return 0;
+               return;
 
        if (likely(EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_COMP))) {
                /* Transmit completion */
@@ -836,8 +835,6 @@ efx_farch_handle_tx_event(struct efx_channel *channel, efx_qword_t *event)
                tx_ev_q_label = EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_Q_LABEL);
                tx_queue = efx_channel_get_tx_queue(
                        channel, tx_ev_q_label % EFX_TXQ_TYPES);
-               tx_packets = ((tx_ev_desc_ptr - tx_queue->read_count) &
-                             tx_queue->ptr_mask);
                efx_xmit_done(tx_queue, tx_ev_desc_ptr);
        } else if (EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_WQ_FF_FULL)) {
                /* Rewrite the FIFO write pointer */
@@ -856,8 +853,6 @@ efx_farch_handle_tx_event(struct efx_channel *channel, efx_qword_t *event)
                          EFX_QWORD_FMT"\n", channel->channel,
                          EFX_QWORD_VAL(*event));
        }
-
-       return tx_packets;
 }
 
 /* Detect errors included in the rx_evt_pkt_ok bit. */
@@ -1270,7 +1265,6 @@ int efx_farch_ev_process(struct efx_channel *channel, int budget)
        unsigned int read_ptr;
        efx_qword_t event, *p_event;
        int ev_code;
-       int tx_packets = 0;
        int spent = 0;
 
        if (budget <= 0)
@@ -1304,12 +1298,7 @@ int efx_farch_ev_process(struct efx_channel *channel, int budget)
                                goto out;
                        break;
                case FSE_AZ_EV_CODE_TX_EV:
-                       tx_packets += efx_farch_handle_tx_event(channel,
-                                                               &event);
-                       if (tx_packets > efx->txq_entries) {
-                               spent = budget;
-                               goto out;
-                       }
+                       efx_farch_handle_tx_event(channel, &event);
                        break;
                case FSE_AZ_EV_CODE_DRV_GEN_EV:
                        efx_farch_handle_generated_event(channel, &event);