Michal Suchanek c7081c
From 41ed0a00ffcd903ece4304a4a65d95706115ffcb Mon Sep 17 00:00:00 2001
Michal Suchanek c7081c
From: "Dwip N. Banerjee" <dnbanerg@us.ibm.com>
Michal Suchanek c7081c
Date: Wed, 18 Nov 2020 19:12:25 -0600
Michal Suchanek c7081c
Subject: [PATCH] ibmvnic: Do not replenish RX buffers after every polling loop
Michal Suchanek c7081c
Michal Suchanek c7081c
References: bsc#1184114 ltc#192237 bsc#1179243 ltc#189290
Michal Suchanek c7081c
Patch-mainline: v5.11-rc1
Michal Suchanek c7081c
Git-commit: 41ed0a00ffcd903ece4304a4a65d95706115ffcb
Michal Suchanek c7081c
Michal Suchanek c7081c
Reduce the amount of time spent replenishing RX buffers by only doing
Michal Suchanek c7081c
so once available buffers has fallen under a certain threshold, in this
Michal Suchanek c7081c
case half of the total number of buffers, or if the polling loop exits
Michal Suchanek c7081c
before the packets processed is less than its budget. Non-exhaustion of
Michal Suchanek c7081c
NAPI budget implies lower incoming packet pressure, allowing the leeway
Michal Suchanek c7081c
to refill the buffers in preparation for any impending burst.
Michal Suchanek c7081c
Michal Suchanek c7081c
Signed-off-by: Dwip N. Banerjee <dnbanerg@us.ibm.com>
Michal Suchanek c7081c
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Michal Suchanek c7081c
Acked-by: Michal Suchanek <msuchanek@suse.de>
Michal Suchanek c7081c
---
Michal Suchanek c7081c
 drivers/net/ethernet/ibm/ibmvnic.c | 5 ++++-
Michal Suchanek c7081c
 1 file changed, 4 insertions(+), 1 deletion(-)
Michal Suchanek c7081c
Michal Suchanek c7081c
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
Michal Suchanek c7081c
index 96df6d8fa277..9fe43ab0496d 100644
Michal Suchanek c7081c
--- a/drivers/net/ethernet/ibm/ibmvnic.c
Michal Suchanek c7081c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
Michal Suchanek c7081c
@@ -2537,7 +2537,10 @@ static int ibmvnic_poll(struct napi_struct *napi, int budget)
Michal Suchanek c7081c
 		frames_processed++;
Michal Suchanek c7081c
 	}
Michal Suchanek c7081c
 
Michal Suchanek c7081c
-	if (adapter->state != VNIC_CLOSING)
Michal Suchanek c7081c
+	if (adapter->state != VNIC_CLOSING &&
Michal Suchanek c7081c
+	    ((atomic_read(&adapter->rx_pool[scrq_num].available) <
Michal Suchanek c7081c
+	      adapter->req_rx_add_entries_per_subcrq / 2) ||
Michal Suchanek c7081c
+	      frames_processed < budget))
Michal Suchanek c7081c
 		replenish_rx_pool(adapter, &adapter->rx_pool[scrq_num]);
Michal Suchanek c7081c
 	if (frames_processed < budget) {
Michal Suchanek c7081c
 		if (napi_complete_done(napi, frames_processed)) {
Michal Suchanek c7081c
-- 
Michal Suchanek c7081c
2.26.2
Michal Suchanek c7081c