]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
net: aquantia: Introduce rx refill threshold value
authorIgor Russkikh <Igor.Russkikh@aquantia.com>
Sat, 23 Mar 2019 15:23:34 +0000 (15:23 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 24 Mar 2019 02:16:53 +0000 (22:16 -0400)
Before that, we've refilled ring even on single descriptor move.
Under high packet load that caused page allocation logic to be triggered
too often. That made overall ring processing slower.

Moreover, with page buffer reuse implemented, we should give a chance
higher networking levels to process received packets faster, release
the pages they consumed and therefore give a higher chance for these
pages to be reused.

RX ring is now refilled only when AQ_CFG_RX_REFILL_THRES or more
descriptors were processed (32 by default). Under regular traffic this
gives quite enough time for packet to be consumed and page to be reused.

Signed-off-by: Igor Russkikh <igor.russkikh@aquantia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/aquantia/atlantic/aq_cfg.h
drivers/net/ethernet/aquantia/atlantic/aq_ring.c

index 80c16ab87771249efe4e23c92dcd4dd00eb88150..551c5cc1714bb4bdcc972fe96be1c2f272f65643 100644 (file)
@@ -38,6 +38,8 @@
 
 #define AQ_CFG_TX_CLEAN_BUDGET 256U
 
+#define AQ_CFG_RX_REFILL_THRES 32U
+
 #define AQ_CFG_RX_HDR_SIZE 256U
 
 #define AQ_CFG_RX_PAGEORDER 0U
index c48696123193f783bc30f6e3e0af6171b7e66f38..c64e2fb5a4f10d4b6a5468782a08ebcbf9f140e4 100644 (file)
@@ -419,6 +419,10 @@ int aq_ring_rx_fill(struct aq_ring_s *self)
        int err = 0;
        int i = 0;
 
+       if (aq_ring_avail_dx(self) < min_t(unsigned int, AQ_CFG_RX_REFILL_THRES,
+                                          self->size / 2))
+               return err;
+
        for (i = aq_ring_avail_dx(self); i--;
                self->sw_tail = aq_ring_next_dx(self, self->sw_tail)) {
                buff = &self->buff_ring[self->sw_tail];