From patchwork Wed Dec 12 05:12:17 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [3.5.y.z, extended, stable] Patch "net-rps: Fix brokeness causing OOO packets" has been added to staging queue Date: Tue, 11 Dec 2012 19:12:17 -0000 From: Herton Ronaldo Krzesinski X-Patchwork-Id: 205427 Message-Id: <1355289137-32019-1-git-send-email-herton.krzesinski@canonical.com> To: Tom Herbert Cc: Ben Hutchings , Eric Dumazet , "David S. Miller" , kernel-team@lists.ubuntu.com This is a note to let you know that I have just added a patch titled net-rps: Fix brokeness causing OOO packets to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree which can be found at: http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.5.y-queue If you, or anyone else, feels it should not be added to this tree, please reply to this email. For more information about the 3.5.y.z tree, see https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable Thanks. -Herton ------ >From 4f41574b83049c523faa5468bb65a9f490394779 Mon Sep 17 00:00:00 2001 From: Tom Herbert Date: Fri, 16 Nov 2012 09:04:15 +0000 Subject: [PATCH] net-rps: Fix brokeness causing OOO packets commit baefa31db2f2b13a05d1b81bdf2d20d487f58b0a upstream. In commit c445477d74ab3779 which adds aRFS to the kernel, the CPU selected for RFS is not set correctly when CPU is changing. This is causing OOO packets and probably other issues. Signed-off-by: Tom Herbert Acked-by: Eric Dumazet Acked-by: Ben Hutchings Signed-off-by: David S. Miller Signed-off-by: Herton Ronaldo Krzesinski --- net/core/dev.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) -- 1.7.9.5 diff --git a/net/core/dev.c b/net/core/dev.c index 75845ba..3ad746b 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2761,8 +2761,10 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb, if (unlikely(tcpu != next_cpu) && (tcpu == RPS_NO_CPU || !cpu_online(tcpu) || ((int)(per_cpu(softnet_data, tcpu).input_queue_head - - rflow->last_qtail)) >= 0)) + rflow->last_qtail)) >= 0)) { + tcpu = next_cpu; rflow = set_rps_cpu(dev, skb, rflow, next_cpu); + } if (tcpu != RPS_NO_CPU && cpu_online(tcpu)) { *rflowp = rflow;