]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Add HDLC fix from Krzysztof Halasa
authorChris Wright <chrisw@osdl.org>
Tue, 22 Nov 2005 00:41:12 +0000 (16:41 -0800)
committerChris Wright <chrisw@osdl.org>
Tue, 22 Nov 2005 00:41:12 +0000 (16:41 -0800)
queue/generic-hdlc-wan-drivers-disable-netif_carrier_off.patch [new file with mode: 0644]
queue/series

diff --git a/queue/generic-hdlc-wan-drivers-disable-netif_carrier_off.patch b/queue/generic-hdlc-wan-drivers-disable-netif_carrier_off.patch
new file mode 100644 (file)
index 0000000..6dab9b3
--- /dev/null
@@ -0,0 +1,129 @@
+From stable-bounces@linux.kernel.org  Thu Nov 10 16:54:29 2005
+To: stable@kernel.org
+From: Krzysztof Halasa <khc@pm.waw.pl>
+Date: Fri, 11 Nov 2005 01:54:14 +0100
+Message-ID: <m3hdakxavd.fsf@defiant.localdomain>
+Cc: 
+Subject: [PATCH] Generic HDLC WAN drivers - disable netif_carrier_off()
+
+As we are currently unable to fix the problem with carrier and protocol
+state signaling in net core I've to disable netif_carrier_off() calls
+used by WAN protocol drivers. The attached patch should make them
+working again.
+
+The remaining netif_carrier_*() calls in hdlc_fr.c are fine as they
+don't touch the physical device.
+
+Signed-off-by: Krzysztof Halasa <khc@pm.waw.pl>
+Signed-off-by: Chris Wright <chrisw@osdl.org>
+---
+
+ drivers/net/wan/hdlc_cisco.c   |    6 ++++++
+ drivers/net/wan/hdlc_fr.c      |    4 ++++
+ drivers/net/wan/hdlc_generic.c |    6 ++++++
+ 3 files changed, 16 insertions(+)
+
+Index: linux-2.6.14.y/drivers/net/wan/hdlc_cisco.c
+===================================================================
+--- linux-2.6.14.y.orig/drivers/net/wan/hdlc_cisco.c
++++ linux-2.6.14.y/drivers/net/wan/hdlc_cisco.c
+@@ -192,7 +192,9 @@ static int cisco_rx(struct sk_buff *skb)
+                                              "uptime %ud%uh%um%us)\n",
+                                              dev->name, days, hrs,
+                                              min, sec);
++#if 0
+                                       netif_carrier_on(dev);
++#endif
+                                       hdlc->state.cisco.up = 1;
+                               }
+                       }
+@@ -225,7 +227,9 @@ static void cisco_timer(unsigned long ar
+                      hdlc->state.cisco.settings.timeout * HZ)) {
+               hdlc->state.cisco.up = 0;
+               printk(KERN_INFO "%s: Link down\n", dev->name);
++#if 0
+               netif_carrier_off(dev);
++#endif
+       }
+       cisco_keepalive_send(dev, CISCO_KEEPALIVE_REQ,
+@@ -261,8 +265,10 @@ static void cisco_stop(struct net_device
+ {
+       hdlc_device *hdlc = dev_to_hdlc(dev);
+       del_timer_sync(&hdlc->state.cisco.timer);
++#if 0
+       if (netif_carrier_ok(dev))
+               netif_carrier_off(dev);
++#endif
+       hdlc->state.cisco.up = 0;
+       hdlc->state.cisco.request_sent = 0;
+ }
+Index: linux-2.6.14.y/drivers/net/wan/hdlc_fr.c
+===================================================================
+--- linux-2.6.14.y.orig/drivers/net/wan/hdlc_fr.c
++++ linux-2.6.14.y/drivers/net/wan/hdlc_fr.c
+@@ -545,8 +545,10 @@ static void fr_set_link_state(int reliab
+       hdlc->state.fr.reliable = reliable;
+       if (reliable) {
++#if 0
+               if (!netif_carrier_ok(dev))
+                       netif_carrier_on(dev);
++#endif
+               hdlc->state.fr.n391cnt = 0; /* Request full status */
+               hdlc->state.fr.dce_changed = 1;
+@@ -560,8 +562,10 @@ static void fr_set_link_state(int reliab
+                       }
+               }
+       } else {
++#if 0
+               if (netif_carrier_ok(dev))
+                       netif_carrier_off(dev);
++#endif
+               while (pvc) {           /* Deactivate all PVCs */
+                       pvc_carrier(0, pvc);
+Index: linux-2.6.14.y/drivers/net/wan/hdlc_generic.c
+===================================================================
+--- linux-2.6.14.y.orig/drivers/net/wan/hdlc_generic.c
++++ linux-2.6.14.y/drivers/net/wan/hdlc_generic.c
+@@ -79,11 +79,13 @@ static void __hdlc_set_carrier_on(struct
+       hdlc_device *hdlc = dev_to_hdlc(dev);
+       if (hdlc->proto.start)
+               return hdlc->proto.start(dev);
++#if 0
+ #ifdef DEBUG_LINK
+       if (netif_carrier_ok(dev))
+               printk(KERN_ERR "hdlc_set_carrier_on(): already on\n");
+ #endif
+       netif_carrier_on(dev);
++#endif
+ }
+@@ -94,11 +96,13 @@ static void __hdlc_set_carrier_off(struc
+       if (hdlc->proto.stop)
+               return hdlc->proto.stop(dev);
++#if 0
+ #ifdef DEBUG_LINK
+       if (!netif_carrier_ok(dev))
+               printk(KERN_ERR "hdlc_set_carrier_off(): already off\n");
+ #endif
+       netif_carrier_off(dev);
++#endif
+ }
+@@ -294,8 +298,10 @@ int register_hdlc_device(struct net_devi
+       if (result != 0)
+               return -EIO;
++#if 0
+       if (netif_carrier_ok(dev))
+               netif_carrier_off(dev); /* no carrier until DCD goes up */
++#endif
+       return 0;
+ }
index 6ebf15e4bf3926a2dd4b28ffec6003af6d5c268e..66689990d71997e31eac578774c1a849be4a5ae0 100644 (file)
@@ -3,3 +3,4 @@ ptrace-auto-reap-fix.patch
 fix-soft-lockup-with-ALSA-rtc-timer.patch
 packet-writing-oops-fix.patch
 fix-memory-leak-with-file-leases.patch
+generic-hdlc-wan-drivers-disable-netif_carrier_off.patch