linux/drivers/net/usb
Kristian Evensen d5c83d0d1d cdc_ether: Fix handling connection notification
Commit bfe9b9d2df ("cdc_ether: Improve ZTE MF823/831/910 handling")
introduced a work-around in usbnet_cdc_status() for devices that exported
cdc carrier on twice on connect. Before the commit, this behavior caused
the link state to be incorrect. It was assumed that all CDC Ethernet
devices would either export this behavior, or send one off and then one on
notification (which seems to be the default behavior).

Unfortunately, it turns out multiple devices sends a connection
notification multiple times per second (via an interrupt), even when
connection state does not change. This has been observed with several
different USB LAN dongles (at least), for example 13b1:0041 (Linksys).
After bfe9b9d2df, the link state has been set as down and then up for
each notification. This has caused a flood of Netlink NEWLINK messages and
syslog to be flooded with messages similar to:

cdc_ether 2-1:2.0 eth1: kevent 12 may have been dropped

This commit fixes the behavior by reverting usbnet_cdc_status() to how it
was before bfe9b9d2df. The work-around has been moved to a separate
status-function which is only called when a known, affect device is
detected.

v1->v2:

* Do not open-code netif_carrier_ok() (thanks Henning Schild).
* Call netif_carrier_off() instead of usb_link_change(). This prevents
calling schedule_work() twice without giving the work queue a chance to be
processed (thanks Bjørn Mork).

Fixes: bfe9b9d2df ("cdc_ether: Improve ZTE MF823/831/910 handling")
Reported-by: Henning Schild <henning.schild@siemens.com>
Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-12-02 13:40:09 -05:00
..
asix_common.c net: asix: Avoid looping when the device does not respond 2016-10-14 16:06:54 -04:00
asix_devices.c net: asix: Fix AX88772_suspend() USB vendor commands failure issues 2016-12-01 14:26:56 -05:00
asix.h net: asix: Add in_pm parameter 2016-08-31 21:07:05 -07:00
ax88172a.c net: asix: Add in_pm parameter 2016-08-31 21:07:05 -07:00
ax88179_178a.c Net Driver: Add Cypress GX3 VID=04b4 PID=3610. 2016-11-09 21:45:34 -05:00
catc.c treewide: replace dev->trans_start update with helper 2016-05-04 14:16:49 -04:00
cdc_eem.c
cdc_ether.c cdc_ether: Fix handling connection notification 2016-12-02 13:40:09 -05:00
cdc_mbim.c cdc_mbim: apply "NDP to end" quirk to all Huawei devices 2016-04-14 21:04:04 -04:00
cdc_ncm.c cdc_ncm: workaround for EM7455 "silent" data interface 2016-07-04 16:12:03 -07:00
cdc_subset.c
cdc-phonet.c cdc-phonet: use common parser 2015-09-15 12:43:49 -07:00
ch9200.c net: usb: ch9200: use kmemdup 2016-05-20 19:50:07 -04:00
cx82310_eth.c cx82310_eth: fix semicolon.cocci warnings 2015-03-24 14:56:02 -04:00
dm9601.c drivers/net: get rid of unnecessary initializations in .get_drvinfo() 2015-10-16 00:24:10 -07:00
gl620a.c
hso.c hso: Convert printk to pr_<level> 2016-09-06 13:29:51 -07:00
huawei_cdc_ncm.c cdc_ncm: Add support for moving NDP to end of NCM frame 2015-07-09 14:58:31 -07:00
int51x1.c
ipheth.c
kalmia.c kalmia: avoid potential uninitialized variable use 2016-10-27 16:27:34 -04:00
kaweth.c kaweth: remove obsolete debugging statements 2016-09-07 17:45:31 -07:00
Kconfig USB: cdc_subset: only build when one driver is enabled 2016-02-18 15:59:45 -05:00
lan78xx.c lan78xx: mark symbols static where possible 2016-09-06 15:58:59 -07:00
lan78xx.h lan78xx: replace devid to chipid & chiprev 2016-02-29 17:12:07 -05:00
lg-vl600.c net: usb: Use eth_<foo>_addr instead of memset 2015-03-03 17:01:36 -05:00
Makefile USB: cdc_subset: only build when one driver is enabled 2016-02-18 15:59:45 -05:00
mcs7830.c drivers/net: get rid of unnecessary initializations in .get_drvinfo() 2015-10-16 00:24:10 -07:00
net1080.c
pegasus.c net: pegasus: Remove deprecated create_singlethread_workqueue 2016-09-01 16:42:25 -07:00
pegasus.h
plusb.c drivers/net/usb/plusb.c: Fix typo 2016-03-27 22:33:56 -04:00
qmi_wwan.c qmi_wwan: add support for Quectel EC21 and EC25 2016-10-13 10:05:06 -04:00
r8152.c r8152: Fix error path in open function 2016-11-13 12:03:20 -05:00
rndis_host.c rndis_host: Set valid random MAC on buggy devices 2016-07-16 20:03:04 -07:00
rtl8150.c treewide: replace dev->trans_start update with helper 2016-05-04 14:16:49 -04:00
sierra_net.c
smsc75xx.c usbnet/smsc75xx: silence uninitialized variable warning 2016-05-04 16:58:56 -04:00
smsc75xx.h
smsc95xx.c smsc95xx: Add mdix control via ethtool 2016-09-06 13:28:10 -07:00
smsc95xx.h smsc95xx: Add register define 2016-09-06 13:28:10 -07:00
sr9700.c net: usb: sr9700: Use 'SR_' prefix for the common register macros 2015-02-04 13:53:02 -08:00
sr9700.h net: usb: sr9700: Use 'SR_' prefix for the common register macros 2015-02-04 13:53:02 -08:00
sr9800.c drivers/net: get rid of unnecessary initializations in .get_drvinfo() 2015-10-16 00:24:10 -07:00
sr9800.h
usbnet.c net: usb: usbnet: don't print error when allocating urb fails 2016-08-13 14:53:40 -07:00
zaurus.c