ionic: use fewer firmware doorbells on rx fill
authorShannon Nelson <snelson@pensando.io>
Fri, 31 Jul 2020 20:15:34 +0000 (13:15 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 3 Aug 2020 22:32:02 +0000 (15:32 -0700)
We really don't need to hit the Rx queue doorbell so many times,
we can wait to the end and cause a little less thrash.

Signed-off-by: Shannon Nelson <snelson@pensando.io>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/pensando/ionic/ionic_txrx.c

index 85eb8f2..e660cd6 100644 (file)
@@ -331,9 +331,6 @@ static void ionic_rx_page_free(struct ionic_queue *q, struct page *page,
        __free_page(page);
 }
 
-#define IONIC_RX_RING_DOORBELL_STRIDE          ((1 << 5) - 1)
-#define IONIC_RX_RING_HEAD_BUF_SZ              2048
-
 void ionic_rx_fill(struct ionic_queue *q)
 {
        struct net_device *netdev = q->lif->netdev;
@@ -345,7 +342,6 @@ void ionic_rx_fill(struct ionic_queue *q)
        unsigned int remain_len;
        unsigned int seg_len;
        unsigned int nfrags;
-       bool ring_doorbell;
        unsigned int i, j;
        unsigned int len;
 
@@ -360,9 +356,7 @@ void ionic_rx_fill(struct ionic_queue *q)
                page_info = &desc_info->pages[0];
 
                if (page_info->page) { /* recycle the buffer */
-                       ring_doorbell = ((q->head->index + 1) &
-                                       IONIC_RX_RING_DOORBELL_STRIDE) == 0;
-                       ionic_rxq_post(q, ring_doorbell, ionic_rx_clean, NULL);
+                       ionic_rxq_post(q, false, ionic_rx_clean, NULL);
                        continue;
                }
 
@@ -401,10 +395,11 @@ void ionic_rx_fill(struct ionic_queue *q)
                        page_info++;
                }
 
-               ring_doorbell = ((q->head->index + 1) &
-                               IONIC_RX_RING_DOORBELL_STRIDE) == 0;
-               ionic_rxq_post(q, ring_doorbell, ionic_rx_clean, NULL);
+               ionic_rxq_post(q, false, ionic_rx_clean, NULL);
        }
+
+       ionic_dbell_ring(q->lif->kern_dbpage, q->hw_type,
+                        q->dbval | q->head->index);
 }
 
 static void ionic_rx_fill_cb(void *arg)