]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 18 Jul 2017 07:38:45 +0000 (09:38 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 18 Jul 2017 07:38:45 +0000 (09:38 +0200)
added patches:
series
xen-netfront-rework-the-fix-for-rx-stall-during-oom-and-network-stress.patch

queue-4.9/series [new file with mode: 0644]
queue-4.9/xen-netfront-rework-the-fix-for-rx-stall-during-oom-and-network-stress.patch [new file with mode: 0644]

diff --git a/queue-4.9/series b/queue-4.9/series
new file mode 100644 (file)
index 0000000..66b4155
--- /dev/null
@@ -0,0 +1 @@
+xen-netfront-rework-the-fix-for-rx-stall-during-oom-and-network-stress.patch
diff --git a/queue-4.9/xen-netfront-rework-the-fix-for-rx-stall-during-oom-and-network-stress.patch b/queue-4.9/xen-netfront-rework-the-fix-for-rx-stall-during-oom-and-network-stress.patch
new file mode 100644 (file)
index 0000000..ab2d5be
--- /dev/null
@@ -0,0 +1,66 @@
+From 538d92912d3190a1dd809233a0d57277459f37b2 Mon Sep 17 00:00:00 2001
+From: Vineeth Remanan Pillai <vineethp@amazon.com>
+Date: Tue, 7 Feb 2017 18:59:01 +0000
+Subject: xen-netfront: Rework the fix for Rx stall during OOM and network stress
+
+From: Vineeth Remanan Pillai <vineethp@amazon.com>
+
+commit 538d92912d3190a1dd809233a0d57277459f37b2 upstream.
+
+The commit 90c311b0eeea ("xen-netfront: Fix Rx stall during network
+stress and OOM") caused the refill timer to be triggerred almost on
+all invocations of xennet_alloc_rx_buffers for certain workloads.
+This reworks the fix by reverting to the old behaviour and taking into
+consideration the skb allocation failure. Refill timer is now triggered
+on insufficient requests or skb allocation failure.
+
+Signed-off-by: Vineeth Remanan Pillai <vineethp@amazon.com>
+Fixes: 90c311b0eeea (xen-netfront: Fix Rx stall during network stress and OOM)
+Reported-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Cc: Eduardo Valentin <eduval@amazon.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/xen-netfront.c |   14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/xen-netfront.c
++++ b/drivers/net/xen-netfront.c
+@@ -281,6 +281,7 @@ static void xennet_alloc_rx_buffers(stru
+ {
+       RING_IDX req_prod = queue->rx.req_prod_pvt;
+       int notify;
++      int err = 0;
+       if (unlikely(!netif_carrier_ok(queue->info->netdev)))
+               return;
+@@ -295,8 +296,10 @@ static void xennet_alloc_rx_buffers(stru
+               struct xen_netif_rx_request *req;
+               skb = xennet_alloc_one_rx_buffer(queue);
+-              if (!skb)
++              if (!skb) {
++                      err = -ENOMEM;
+                       break;
++              }
+               id = xennet_rxidx(req_prod);
+@@ -320,8 +323,13 @@ static void xennet_alloc_rx_buffers(stru
+       queue->rx.req_prod_pvt = req_prod;
+-      /* Not enough requests? Try again later. */
+-      if (req_prod - queue->rx.sring->req_prod < NET_RX_SLOTS_MIN) {
++      /* Try again later if there are not enough requests or skb allocation
++       * failed.
++       * Enough requests is quantified as the sum of newly created slots and
++       * the unconsumed slots at the backend.
++       */
++      if (req_prod - queue->rx.rsp_cons < NET_RX_SLOTS_MIN ||
++          unlikely(err)) {
+               mod_timer(&queue->rx_refill_timer, jiffies + (HZ/10));
+               return;
+       }