From 0328f2d7844b000c71650a14d8479fcf98b1a58e Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Wed, 15 Apr 2009 11:49:06 +0200 Subject: linux: initial micro2440 support for 2.6.29 using mini2440 kernel patches. --- ...2-GRO-Disable-GRO-on-legacy-netif_rx-path.patch | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 recipes/linux/linux-2.6.29/micro2440/0012-GRO-Disable-GRO-on-legacy-netif_rx-path.patch (limited to 'recipes/linux/linux-2.6.29/micro2440/0012-GRO-Disable-GRO-on-legacy-netif_rx-path.patch') diff --git a/recipes/linux/linux-2.6.29/micro2440/0012-GRO-Disable-GRO-on-legacy-netif_rx-path.patch b/recipes/linux/linux-2.6.29/micro2440/0012-GRO-Disable-GRO-on-legacy-netif_rx-path.patch new file mode 100644 index 0000000000..bfad6d80eb --- /dev/null +++ b/recipes/linux/linux-2.6.29/micro2440/0012-GRO-Disable-GRO-on-legacy-netif_rx-path.patch @@ -0,0 +1,54 @@ +From 11c0b33d2a046a37bcd96528faa0e93359ef4a4b Mon Sep 17 00:00:00 2001 +From: Herbert Xu +Date: Thu, 26 Mar 2009 00:59:10 -0700 +Subject: [PATCH] GRO: Disable GRO on legacy netif_rx path + +When I fixed the GRO crash in the legacy receive path I used +napi_complete to replace __napi_complete. Unfortunately they're +not the same when NETPOLL is enabled, which may result in us +not calling __napi_complete at all. + +What's more, we really do need to keep the __napi_complete call +within the IRQ-off section since in theory an IRQ can occur in +between and fill up the backlog to the maximum, causing us to +lock up. + +Since we can't seem to find a fix that works properly right now, +this patch reverts all the GRO support from the netif_rx path. + +Signed-off-by: Herbert Xu +Signed-off-by: David S. Miller +Signed-off-by: Michel Pollet +--- + net/core/dev.c | 9 +++------ + 1 files changed, 3 insertions(+), 6 deletions(-) + +diff --git a/net/core/dev.c b/net/core/dev.c +index e3fe5c7..e438f54 100644 +--- a/net/core/dev.c ++++ b/net/core/dev.c +@@ -2588,18 +2588,15 @@ static int process_backlog(struct napi_struct *napi, int quota) + local_irq_disable(); + skb = __skb_dequeue(&queue->input_pkt_queue); + if (!skb) { ++ __napi_complete(napi); + local_irq_enable(); +- napi_complete(napi); +- goto out; ++ break; + } + local_irq_enable(); + +- napi_gro_receive(napi, skb); ++ netif_receive_skb(skb); + } while (++work < quota && jiffies == start_time); + +- napi_gro_flush(napi); +- +-out: + return work; + } + +-- +1.5.6.3 + -- cgit v1.2.3