octeon: add 3 upstream patches that fix issues on the esr-lite

Signed-off-by: John Crispin <blogic@openwrt.org>

SVN-Revision: 41252
owl
John Crispin 2014-06-18 10:07:57 +00:00
parent c911cdcc04
commit 312fca5455
3 changed files with 186 additions and 0 deletions

View File

@ -0,0 +1,45 @@
From patchwork Thu Sep 5 18:43:59 2013
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [1/3] staging: octeon-ethernet: make dropped packets to consume NAPI
budget
From: Aaro Koskinen <aaro.koskinen@iki.fi>
X-Patchwork-Id: 5809
Message-Id: <1378406641-16530-2-git-send-email-aaro.koskinen@iki.fi>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
devel@driverdev.osuosl.org, linux-mips@linux-mips.org
Cc: David Daney <david.daney@cavium.com>,
"Jason A. Donenfeld" <Jason@zx2c4.com>, richard@nod.at,
Aaro Koskinen <aaro.koskinen@iki.fi>
Date: Thu, 5 Sep 2013 21:43:59 +0300
We should count also dropped packets, otherwise the NAPI handler may
end up running too long.
Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
---
drivers/staging/octeon/ethernet-rx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/octeon/ethernet-rx.c b/drivers/staging/octeon/ethernet-rx.c
index 34afc16..10e5416 100644
--- a/drivers/staging/octeon/ethernet-rx.c
+++ b/drivers/staging/octeon/ethernet-rx.c
@@ -303,6 +303,7 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
if (backlog > budget * cores_in_use && napi != NULL)
cvm_oct_enable_one_cpu();
}
+ rx_count++;
skb_in_hw = USE_SKBUFFS_IN_HW && work->word2.s.bufs == 1;
if (likely(skb_in_hw)) {
@@ -429,7 +430,6 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
#endif
}
netif_receive_skb(skb);
- rx_count++;
} else {
/* Drop any packet received for a device that isn't up */
/*

View File

@ -0,0 +1,60 @@
From patchwork Thu Sep 5 18:44:00 2013
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [2/3] staging: octeon-ethernet: remove skb alloc failure warnings
From: Aaro Koskinen <aaro.koskinen@iki.fi>
X-Patchwork-Id: 5811
Message-Id: <1378406641-16530-3-git-send-email-aaro.koskinen@iki.fi>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
devel@driverdev.osuosl.org, linux-mips@linux-mips.org
Cc: David Daney <david.daney@cavium.com>,
"Jason A. Donenfeld" <Jason@zx2c4.com>, richard@nod.at,
Aaro Koskinen <aaro.koskinen@iki.fi>
Date: Thu, 5 Sep 2013 21:44:00 +0300
Remove skb allocation failure warnings. They will trigger a page
allocation warning already. Also, one of the warnings was not ratelimited,
causing the box to lock up under heavy traffic & low memory.
Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Acked-by: David Daney <david.daney@cavium.com>
---
drivers/staging/octeon/ethernet-mem.c | 7 +------
drivers/staging/octeon/ethernet-rx.c | 3 ---
2 files changed, 1 insertion(+), 9 deletions(-)
diff --git a/drivers/staging/octeon/ethernet-mem.c b/drivers/staging/octeon/ethernet-mem.c
index 78b6cb7..199059d 100644
--- a/drivers/staging/octeon/ethernet-mem.c
+++ b/drivers/staging/octeon/ethernet-mem.c
@@ -48,13 +48,8 @@ static int cvm_oct_fill_hw_skbuff(int pool, int size, int elements)
while (freed) {
struct sk_buff *skb = dev_alloc_skb(size + 256);
- if (unlikely(skb == NULL)) {
- pr_warning
- ("Failed to allocate skb for hardware pool %d\n",
- pool);
+ if (unlikely(skb == NULL))
break;
- }
-
skb_reserve(skb, 256 - (((unsigned long)skb->data) & 0x7f));
*(struct sk_buff **)(skb->data - sizeof(void *)) = skb;
cvmx_fpa_free(skb->data, pool, DONT_WRITEBACK(size / 128));
diff --git a/drivers/staging/octeon/ethernet-rx.c b/drivers/staging/octeon/ethernet-rx.c
index 10e5416..e14a1bb 100644
--- a/drivers/staging/octeon/ethernet-rx.c
+++ b/drivers/staging/octeon/ethernet-rx.c
@@ -337,9 +337,6 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
*/
skb = dev_alloc_skb(work->len);
if (!skb) {
- printk_ratelimited("Port %d failed to allocate "
- "skbuff, packet dropped\n",
- work->ipprt);
cvm_oct_free_work(work);
continue;
}

View File

@ -0,0 +1,81 @@
From patchwork Thu Sep 5 18:44:01 2013
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [3/3] staging: octeon-ethernet: rgmii: enable interrupts that we can
handle
From: Aaro Koskinen <aaro.koskinen@iki.fi>
X-Patchwork-Id: 5810
Message-Id: <1378406641-16530-4-git-send-email-aaro.koskinen@iki.fi>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
devel@driverdev.osuosl.org, linux-mips@linux-mips.org
Cc: David Daney <david.daney@cavium.com>,
"Jason A. Donenfeld" <Jason@zx2c4.com>, richard@nod.at,
Aaro Koskinen <aaro.koskinen@iki.fi>
Date: Thu, 5 Sep 2013 21:44:01 +0300
Enable only those interrupts that we can handle & acknowledge in the
interrupt handler.
At least on EdgeRouter Lite, the hardware may occasionally interrupt with
some error condition when the physical link status changes frequently.
Since the interrupt condition is not acked properly, this leads to the
following warning and the IRQ gets disabled completely:
[ 41.324700] eth0: Link down
[ 44.324721] eth0: 1000 Mbps Full duplex, port 0, queue 0
[ 44.885590] irq 117: nobody cared (try booting with the "irqpoll" option)
[ 44.892397] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.11.0-rc5-edge-los.git-27d042f-dirty-00950-gaa42f2d-dirty #8
[ 44.902825] Stack : ffffffff815c0000 0000000000000004 0000000000000003 0000000000000000
ffffffff81fd0000 ffffffff815c0000 0000000000000004 ffffffff8118530c
ffffffff815c0000 ffffffff811858d8 0000000000000000 0000000000000000
ffffffff81fd0000 ffffffff81fc0000 ffffffff8152f3a0 ffffffff815b7bf7
ffffffff81fc6688 ffffffff815b8060 0000000000000000 0000000000000000
0000000000000000 ffffffff815346c8 ffffffff815346b0 ffffffff814a6a18
ffffffff8158b848 ffffffff81145614 ffffffff81593800 ffffffff81187174
ffffffff815b7d00 ffffffff8158b760 0000000000000000 ffffffff814a9184
0000000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 ffffffff811203b8 0000000000000000 0000000000000000
...
[ 44.968408] Call Trace:
[ 44.970873] [<ffffffff811203b8>] show_stack+0x68/0x80
[ 44.975937] [<ffffffff814a9184>] dump_stack+0x78/0xb8
[ 44.980999] [<ffffffff811aac54>] __report_bad_irq+0x44/0x108
[ 44.986662] [<ffffffff811ab238>] note_interrupt+0x248/0x2a0
[ 44.992240] [<ffffffff811a85e4>] handle_irq_event_percpu+0x144/0x200
[ 44.998598] [<ffffffff811a86f4>] handle_irq_event+0x54/0x90
[ 45.004176] [<ffffffff811ab908>] handle_level_irq+0xd0/0x148
[ 45.009839] [<ffffffff811a7b04>] generic_handle_irq+0x34/0x50
[ 45.015589] [<ffffffff8111dae8>] do_IRQ+0x18/0x30
[ 45.020301] [<ffffffff8110486c>] plat_irq_dispatch+0x74/0xb8
[ 45.025958]
[ 45.027451] handlers:
[ 45.029731] [<ffffffff813fca10>] cvm_oct_rgmii_rml_interrupt
[ 45.035397] Disabling IRQ #117
[ 45.038742] Port 0 receive error code 13, packet dropped
[ 46.324719] eth0: Link down
[ 48.324733] eth0: 1000 Mbps Full duplex, port 0, queue 0
Reported-by: "Jason A. Donenfeld" <Jason@zx2c4.com>
Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Acked-by: David Daney <david.daney@cavium.com>
---
drivers/staging/octeon/ethernet-rgmii.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/staging/octeon/ethernet-rgmii.c b/drivers/staging/octeon/ethernet-rgmii.c
index d8f5f69..ea53af3 100644
--- a/drivers/staging/octeon/ethernet-rgmii.c
+++ b/drivers/staging/octeon/ethernet-rgmii.c
@@ -373,9 +373,7 @@ int cvm_oct_rgmii_init(struct net_device *dev)
* Enable interrupts on inband status changes
* for this port.
*/
- gmx_rx_int_en.u64 =
- cvmx_read_csr(CVMX_GMXX_RXX_INT_EN
- (index, interface));
+ gmx_rx_int_en.u64 = 0;
gmx_rx_int_en.s.phy_dupx = 1;
gmx_rx_int_en.s.phy_link = 1;
gmx_rx_int_en.s.phy_spd = 1;