aboutsummaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@openwrt.org>2014-12-18 16:25:22 +0000
committerHauke Mehrtens <hauke@openwrt.org>2014-12-18 16:25:22 +0000
commit1ea4b50804c663085d1031fd61a040f53acf33df (patch)
tree941dcd844ee7560bd8c231d0d983c41ebb5c295a /target
parent440591ac63a185a099276194840813a02efd6f2e (diff)
downloadupstream-1ea4b50804c663085d1031fd61a040f53acf33df.tar.gz
upstream-1ea4b50804c663085d1031fd61a040f53acf33df.tar.bz2
upstream-1ea4b50804c663085d1031fd61a040f53acf33df.zip
kernel: bgmac: fix some problems
There are some problems in the napi usage that are fixed now. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@43749 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target')
-rw-r--r--target/linux/generic/patches-3.14/771-bgmac-register-napi-before-the-device.patch43
-rw-r--r--target/linux/generic/patches-3.14/772-bgmac-activate-irqs-only-if-there-is-nothing-to-poll.patch29
-rw-r--r--target/linux/generic/patches-3.14/773-bgmac-add-srab-switch.patch4
-rw-r--r--target/linux/generic/patches-3.18/771-bgmac-register-napi-before-the-device.patch43
-rw-r--r--target/linux/generic/patches-3.18/772-bgmac-activate-irqs-only-if-there-is-nothing-to-poll.patch29
-rw-r--r--target/linux/generic/patches-3.18/773-bgmac-add-srab-switch.patch4
6 files changed, 148 insertions, 4 deletions
diff --git a/target/linux/generic/patches-3.14/771-bgmac-register-napi-before-the-device.patch b/target/linux/generic/patches-3.14/771-bgmac-register-napi-before-the-device.patch
new file mode 100644
index 0000000000..56248c6720
--- /dev/null
+++ b/target/linux/generic/patches-3.14/771-bgmac-register-napi-before-the-device.patch
@@ -0,0 +1,43 @@
+From d5b4e70e8c205a67e2e246908b259367ab9ccecf Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Mon, 8 Dec 2014 08:27:23 +0100
+Subject: [PATCH 2/4] bgmac: register napi before the device
+
+napi should get registered before the netdev and not after.
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ drivers/net/ethernet/broadcom/bgmac.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/broadcom/bgmac.c
++++ b/drivers/net/ethernet/broadcom/bgmac.c
+@@ -1515,6 +1515,8 @@ static int bgmac_probe(struct bcma_devic
+ if (core->bus->sprom.boardflags_lo & BGMAC_BFL_ENETADM)
+ bgmac_warn(bgmac, "Support for ADMtek ethernet switch not implemented\n");
+
++ netif_napi_add(net_dev, &bgmac->napi, bgmac_poll, BGMAC_WEIGHT);
++
+ err = bgmac_mii_register(bgmac);
+ if (err) {
+ bgmac_err(bgmac, "Cannot register MDIO\n");
+@@ -1529,8 +1531,6 @@ static int bgmac_probe(struct bcma_devic
+
+ netif_carrier_off(net_dev);
+
+- netif_napi_add(net_dev, &bgmac->napi, bgmac_poll, BGMAC_WEIGHT);
+-
+ return 0;
+
+ err_mii_unregister:
+@@ -1549,9 +1549,9 @@ static void bgmac_remove(struct bcma_dev
+ {
+ struct bgmac *bgmac = bcma_get_drvdata(core);
+
+- netif_napi_del(&bgmac->napi);
+ unregister_netdev(bgmac->net_dev);
+ bgmac_mii_unregister(bgmac);
++ netif_napi_del(&bgmac->napi);
+ bgmac_dma_free(bgmac);
+ bcma_set_drvdata(core, NULL);
+ free_netdev(bgmac->net_dev);
diff --git a/target/linux/generic/patches-3.14/772-bgmac-activate-irqs-only-if-there-is-nothing-to-poll.patch b/target/linux/generic/patches-3.14/772-bgmac-activate-irqs-only-if-there-is-nothing-to-poll.patch
new file mode 100644
index 0000000000..b494998be3
--- /dev/null
+++ b/target/linux/generic/patches-3.14/772-bgmac-activate-irqs-only-if-there-is-nothing-to-poll.patch
@@ -0,0 +1,29 @@
+From fbd3b188fbaa861165a074c454d8f8dcf15343a0 Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Mon, 8 Dec 2014 08:47:10 +0100
+Subject: [PATCH 3/4] bgmac: activate irqs only if there is nothing to poll
+
+IRQs should only get activated when there is nothing to poll in the
+queue any more and to after every poll.
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ drivers/net/ethernet/broadcom/bgmac.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/broadcom/bgmac.c
++++ b/drivers/net/ethernet/broadcom/bgmac.c
+@@ -1167,10 +1167,10 @@ static int bgmac_poll(struct napi_struct
+ bgmac->int_status = 0;
+ }
+
+- if (handled < weight)
++ if (handled < weight) {
+ napi_complete(napi);
+-
+- bgmac_chip_intrs_on(bgmac);
++ bgmac_chip_intrs_on(bgmac);
++ }
+
+ return handled;
+ }
diff --git a/target/linux/generic/patches-3.14/773-bgmac-add-srab-switch.patch b/target/linux/generic/patches-3.14/773-bgmac-add-srab-switch.patch
index fe52ccc33e..bf3ab93830 100644
--- a/target/linux/generic/patches-3.14/773-bgmac-add-srab-switch.patch
+++ b/target/linux/generic/patches-3.14/773-bgmac-add-srab-switch.patch
@@ -30,7 +30,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
/**************************************************
* BCMA bus ops
**************************************************/
-@@ -1521,6 +1533,16 @@ static int bgmac_probe(struct bcma_devic
+@@ -1523,6 +1535,16 @@ static int bgmac_probe(struct bcma_devic
goto err_dma_free;
}
@@ -55,9 +55,9 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+ platform_device_unregister(&bgmac_b53_dev);
+ bgmac->b53_device = NULL;
+
- netif_napi_del(&bgmac->napi);
unregister_netdev(bgmac->net_dev);
bgmac_mii_unregister(bgmac);
+ netif_napi_del(&bgmac->napi);
--- a/drivers/net/ethernet/broadcom/bgmac.h
+++ b/drivers/net/ethernet/broadcom/bgmac.h
@@ -457,6 +457,9 @@ struct bgmac {
diff --git a/target/linux/generic/patches-3.18/771-bgmac-register-napi-before-the-device.patch b/target/linux/generic/patches-3.18/771-bgmac-register-napi-before-the-device.patch
new file mode 100644
index 0000000000..56248c6720
--- /dev/null
+++ b/target/linux/generic/patches-3.18/771-bgmac-register-napi-before-the-device.patch
@@ -0,0 +1,43 @@
+From d5b4e70e8c205a67e2e246908b259367ab9ccecf Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Mon, 8 Dec 2014 08:27:23 +0100
+Subject: [PATCH 2/4] bgmac: register napi before the device
+
+napi should get registered before the netdev and not after.
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ drivers/net/ethernet/broadcom/bgmac.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/broadcom/bgmac.c
++++ b/drivers/net/ethernet/broadcom/bgmac.c
+@@ -1515,6 +1515,8 @@ static int bgmac_probe(struct bcma_devic
+ if (core->bus->sprom.boardflags_lo & BGMAC_BFL_ENETADM)
+ bgmac_warn(bgmac, "Support for ADMtek ethernet switch not implemented\n");
+
++ netif_napi_add(net_dev, &bgmac->napi, bgmac_poll, BGMAC_WEIGHT);
++
+ err = bgmac_mii_register(bgmac);
+ if (err) {
+ bgmac_err(bgmac, "Cannot register MDIO\n");
+@@ -1529,8 +1531,6 @@ static int bgmac_probe(struct bcma_devic
+
+ netif_carrier_off(net_dev);
+
+- netif_napi_add(net_dev, &bgmac->napi, bgmac_poll, BGMAC_WEIGHT);
+-
+ return 0;
+
+ err_mii_unregister:
+@@ -1549,9 +1549,9 @@ static void bgmac_remove(struct bcma_dev
+ {
+ struct bgmac *bgmac = bcma_get_drvdata(core);
+
+- netif_napi_del(&bgmac->napi);
+ unregister_netdev(bgmac->net_dev);
+ bgmac_mii_unregister(bgmac);
++ netif_napi_del(&bgmac->napi);
+ bgmac_dma_free(bgmac);
+ bcma_set_drvdata(core, NULL);
+ free_netdev(bgmac->net_dev);
diff --git a/target/linux/generic/patches-3.18/772-bgmac-activate-irqs-only-if-there-is-nothing-to-poll.patch b/target/linux/generic/patches-3.18/772-bgmac-activate-irqs-only-if-there-is-nothing-to-poll.patch
new file mode 100644
index 0000000000..b494998be3
--- /dev/null
+++ b/target/linux/generic/patches-3.18/772-bgmac-activate-irqs-only-if-there-is-nothing-to-poll.patch
@@ -0,0 +1,29 @@
+From fbd3b188fbaa861165a074c454d8f8dcf15343a0 Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Mon, 8 Dec 2014 08:47:10 +0100
+Subject: [PATCH 3/4] bgmac: activate irqs only if there is nothing to poll
+
+IRQs should only get activated when there is nothing to poll in the
+queue any more and to after every poll.
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ drivers/net/ethernet/broadcom/bgmac.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/broadcom/bgmac.c
++++ b/drivers/net/ethernet/broadcom/bgmac.c
+@@ -1167,10 +1167,10 @@ static int bgmac_poll(struct napi_struct
+ bgmac->int_status = 0;
+ }
+
+- if (handled < weight)
++ if (handled < weight) {
+ napi_complete(napi);
+-
+- bgmac_chip_intrs_on(bgmac);
++ bgmac_chip_intrs_on(bgmac);
++ }
+
+ return handled;
+ }
diff --git a/target/linux/generic/patches-3.18/773-bgmac-add-srab-switch.patch b/target/linux/generic/patches-3.18/773-bgmac-add-srab-switch.patch
index fe52ccc33e..bf3ab93830 100644
--- a/target/linux/generic/patches-3.18/773-bgmac-add-srab-switch.patch
+++ b/target/linux/generic/patches-3.18/773-bgmac-add-srab-switch.patch
@@ -30,7 +30,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
/**************************************************
* BCMA bus ops
**************************************************/
-@@ -1521,6 +1533,16 @@ static int bgmac_probe(struct bcma_devic
+@@ -1523,6 +1535,16 @@ static int bgmac_probe(struct bcma_devic
goto err_dma_free;
}
@@ -55,9 +55,9 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+ platform_device_unregister(&bgmac_b53_dev);
+ bgmac->b53_device = NULL;
+
- netif_napi_del(&bgmac->napi);
unregister_netdev(bgmac->net_dev);
bgmac_mii_unregister(bgmac);
+ netif_napi_del(&bgmac->napi);
--- a/drivers/net/ethernet/broadcom/bgmac.h
+++ b/drivers/net/ethernet/broadcom/bgmac.h
@@ -457,6 +457,9 @@ struct bgmac {