Re: [3.5 regression / mcs7830 / bisected] bridge constantly toggeling between disabled and forwarding
From: Ondrej Zary <hidden>
Date: 2012-10-09 07:22:09
Also in:
lkml
On Tuesday 09 October 2012, Michael Leun wrote:
On Thu, 27 Sep 2012 10:39:05 -0700 Greg KH [off-list ref] wrote:quoted
On Tue, Jul 24, 2012 at 01:36:34AM +0200, Michael Leun wrote:quoted
On Mon, 23 Jul 2012 09:15:04 +0200 Michael Leun [off-list ref] wrote: [see issue description below] Bisecting yielded b1ff4f96fd1c63890d78d8939c6e0f2b44ce3113 is the first bad commit commit b1ff4f96fd1c63890d78d8939c6e0f2b44ce3113 Author: Ondrej Zary [off-list ref] Date: Fri Jun 1 10:29:08 2012 +0000 mcs7830: Implement link state detection Add .status callback that detects link state changes. Tested with MCS7832CV-AA chip (9710:7830, identified as rev.C by the driver). Fixes https://bugzilla.kernel.org/show_bug.cgi?id=28532 Signed-off-by: Ondrej Zary [off-list ref] Signed-off-by: David S. Miller [off-list ref] :040000 040000 5480780cb5e75c57122a621fc3bab0108c16be27 d97efd9cc0a465dff76bcd3a3c547f718f2a5345 M drivers Reverting that from 3.5 makes the issue go away.Did this ever get resolved in 3.6-rc7 or any older kernel? I can't revert the patch from 3.5.y unless it's also fixed in Linus's tree.Please excuse me for answering a bit late. No, that never got resolved, I still have the problem with 3.6 but I'm not shure about the correct solution. Maybe link state detection just does not work with some of that devices and we should have an possibility to enable/disable it per device, maybe it can be handeled with an blacklist of not working devices, maybe it could be fixed - I do not know and also do not know how to find out. But I'm willing to test.
Can you please apply this debug patch and provide the output?
--- a/drivers/net/usb/mcs7830.c
+++ b/drivers/net/usb/mcs7830.c@@ -638,6 +638,7 @@ static void mcs7830_status(struct usbnet *dev, struct urb *urb) return; link = !(buf[1] & 0x20); + printk("netif_carrier_ok=%d, link=%d, buf[0]=0x%02x, buf[1]=0x%02x\n", netif_carrier_ok(dev->net), link, buf[0], buf[1]); if (netif_carrier_ok(dev->net) != link) { if (link) { netif_carrier_on(dev->net);
--
Ondrej Zary