summaryrefslogtreecommitdiffstats
path: root/target/linux/ar7/patches/900-cpmac_multiqueue.patch
diff options
context:
space:
mode:
authorflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-06-01 08:11:37 +0000
committerflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-06-01 08:11:37 +0000
commite05eeb7e75550200983378ed48db3a3a1bfe3d84 (patch)
treeb842317adc94123568ad36ecbceacd07004e3517 /target/linux/ar7/patches/900-cpmac_multiqueue.patch
parentc5c3cf287d53a5d99ba8ac72867600c8a12de022 (diff)
[ar7] add experimental 2.6.30 support, boot tested
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@16242 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar7/patches/900-cpmac_multiqueue.patch')
-rw-r--r--target/linux/ar7/patches/900-cpmac_multiqueue.patch70
1 files changed, 70 insertions, 0 deletions
diff --git a/target/linux/ar7/patches/900-cpmac_multiqueue.patch b/target/linux/ar7/patches/900-cpmac_multiqueue.patch
new file mode 100644
index 000000000..3df3d6832
--- /dev/null
+++ b/target/linux/ar7/patches/900-cpmac_multiqueue.patch
@@ -0,0 +1,70 @@
+This patch fixes the network driver cpmac.c for compilation with
+configuration option CONFIG_NETDEVICES_MULTIQUEUE.
+
+These compiler warnings are fixed by the patch:
+drivers/net/cpmac.c: In function 'cpmac_end_xmit':
+drivers/net/cpmac.c:630: warning: passing argument 2 of 'netif_subqueue_stopped' makes pointer from integer without a cast
+drivers/net/cpmac.c:641: warning: passing argument 2 of 'netif_subqueue_stopped' makes pointer from integer without a cast
+drivers/net/cpmac.c: In function 'cpmac_probe':
+drivers/net/cpmac.c:1128: warning: unused variable 'i'
+
+During runtime, the unpatched driver raises a fatal runtime exception.
+This is fixed by calling __netif_subqueue_stopped instead
+of netif_subqueue_stopped, too.
+
+Two additional code parts were modified for CONFIG_NETDEVICES_MULTIQUEUE
+because other drivers do it in the same way.
+
+ Signed-off-by: Stefan Weil <weil@mail.berlios.de>
+
+--- a/drivers/net/cpmac.c
++++ b/drivers/net/cpmac.c
+@@ -615,13 +615,13 @@ static void cpmac_end_xmit(struct net_de
+
+ dev_kfree_skb_irq(desc->skb);
+ desc->skb = NULL;
+- if (netif_subqueue_stopped(dev, queue))
++ if (__netif_subqueue_stopped(dev, queue))
+ netif_wake_subqueue(dev, queue);
+ } else {
+ if (netif_msg_tx_err(priv) && net_ratelimit())
+ printk(KERN_WARNING
+ "%s: end_xmit: spurious interrupt\n", dev->name);
+- if (netif_subqueue_stopped(dev, queue))
++ if (__netif_subqueue_stopped(dev, queue))
+ netif_wake_subqueue(dev, queue);
+ }
+ }
+@@ -731,7 +731,6 @@ static void cpmac_clear_tx(struct net_de
+
+ static void cpmac_hw_error(struct work_struct *work)
+ {
+- int i;
+ struct cpmac_priv *priv =
+ container_of(work, struct cpmac_priv, reset_work);
+
+@@ -818,7 +817,6 @@ static irqreturn_t cpmac_irq(int irq, vo
+
+ static void cpmac_tx_timeout(struct net_device *dev)
+ {
+- int i;
+ struct cpmac_priv *priv = netdev_priv(dev);
+
+ spin_lock(&priv->lock);
+@@ -1097,7 +1095,7 @@ static int external_switch;
+
+ static int __devinit cpmac_probe(struct platform_device *pdev)
+ {
+- int rc, phy_id, i;
++ int rc, phy_id;
+ char *mdio_bus_id = "0";
+ struct resource *mem;
+ struct cpmac_priv *priv;
+@@ -1125,6 +1123,7 @@ static int __devinit cpmac_probe(struct
+ }
+
+ dev = alloc_etherdev_mq(sizeof(*priv), CPMAC_QUEUES);
++ //~ dev = alloc_etherdev(sizeof(*priv));
+
+ if (!dev) {
+ printk(KERN_ERR "cpmac: Unable to allocate net_device\n");