From e5766c689355290dda4b453e35f1373cc96ed673 Mon Sep 17 00:00:00 2001 From: Chris Wright Date: Mon, 21 Nov 2005 16:41:12 -0800 Subject: [PATCH] Add HDLC fix from Krzysztof Halasa --- ...an-drivers-disable-netif_carrier_off.patch | 129 ++++++++++++++++++ queue/series | 1 + 2 files changed, 130 insertions(+) create mode 100644 queue/generic-hdlc-wan-drivers-disable-netif_carrier_off.patch 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 index 00000000000..6dab9b331c6 --- /dev/null +++ b/queue/generic-hdlc-wan-drivers-disable-netif_carrier_off.patch @@ -0,0 +1,129 @@ +From stable-bounces@linux.kernel.org Thu Nov 10 16:54:29 2005 +To: stable@kernel.org +From: Krzysztof Halasa +Date: Fri, 11 Nov 2005 01:54:14 +0100 +Message-ID: +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 +Signed-off-by: Chris Wright +--- + + 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; + } diff --git a/queue/series b/queue/series index 6ebf15e4bf3..66689990d71 100644 --- a/queue/series +++ b/queue/series @@ -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 -- 2.47.3