]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.14.60/xen-netfront-raise-max-number-of-slots-in-xennet_get_responses.patch
Fixes for 5.10
[thirdparty/kernel/stable-queue.git] / releases / 4.14.60 / xen-netfront-raise-max-number-of-slots-in-xennet_get_responses.patch
CommitLineData
a65d4bac
GKH
1From foo@baz Sat Jul 28 10:25:26 CEST 2018
2From: Juergen Gross <jgross@suse.com>
3Date: Tue, 12 Jun 2018 08:57:53 +0200
4Subject: xen/netfront: raise max number of slots in xennet_get_responses()
5
6From: Juergen Gross <jgross@suse.com>
7
8[ Upstream commit 57f230ab04d2910a06d17d988f1c4d7586a59113 ]
9
10The max number of slots used in xennet_get_responses() is set to
11MAX_SKB_FRAGS + (rx->status <= RX_COPY_THRESHOLD).
12
13In old kernel-xen MAX_SKB_FRAGS was 18, while nowadays it is 17. This
14difference is resulting in frequent messages "too many slots" and a
15reduced network throughput for some workloads (factor 10 below that of
16a kernel-xen based guest).
17
18Replacing MAX_SKB_FRAGS by XEN_NETIF_NR_SLOTS_MIN for calculation of
19the max number of slots to use solves that problem (tests showed no
20more messages "too many slots" and throughput was as high as with the
21kernel-xen based guest system).
22
23Replace MAX_SKB_FRAGS-2 by XEN_NETIF_NR_SLOTS_MIN-1 in
24netfront_tx_slot_available() for making it clearer what is really being
25tested without actually modifying the tested value.
26
27Signed-off-by: Juergen Gross <jgross@suse.com>
28Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
29Signed-off-by: David S. Miller <davem@davemloft.net>
30Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
31Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
32---
33 drivers/net/xen-netfront.c | 4 ++--
34 1 file changed, 2 insertions(+), 2 deletions(-)
35
36--- a/drivers/net/xen-netfront.c
37+++ b/drivers/net/xen-netfront.c
38@@ -239,7 +239,7 @@ static void rx_refill_timeout(unsigned l
39 static int netfront_tx_slot_available(struct netfront_queue *queue)
40 {
41 return (queue->tx.req_prod_pvt - queue->tx.rsp_cons) <
42- (NET_TX_RING_SIZE - MAX_SKB_FRAGS - 2);
43+ (NET_TX_RING_SIZE - XEN_NETIF_NR_SLOTS_MIN - 1);
44 }
45
46 static void xennet_maybe_wake_tx(struct netfront_queue *queue)
47@@ -790,7 +790,7 @@ static int xennet_get_responses(struct n
48 RING_IDX cons = queue->rx.rsp_cons;
49 struct sk_buff *skb = xennet_get_rx_skb(queue, cons);
50 grant_ref_t ref = xennet_get_rx_ref(queue, cons);
51- int max = MAX_SKB_FRAGS + (rx->status <= RX_COPY_THRESHOLD);
52+ int max = XEN_NETIF_NR_SLOTS_MIN + (rx->status <= RX_COPY_THRESHOLD);
53 int slots = 1;
54 int err = 0;
55 unsigned long ret;