usbnet: Set link down initially for drivers that update link state (Closes: #444043)
svn path=/dists/trunk/linux-2.6/; revision=14722
This commit is contained in:
parent
baef4ede8d
commit
e5d7296470
|
@ -33,6 +33,8 @@ linux-2.6 (2.6.32-1) UNRELEASED; urgency=low
|
|||
* atl1e: Remove broken implementation of TSO for TCP/IPv6
|
||||
(Closes: #558426) and allow other hardware offloads to be disabled in
|
||||
case they are also buggy
|
||||
* usbnet: Set link down initially for drivers that update link state
|
||||
(Closes: #444043)
|
||||
|
||||
[ dann frazier ]
|
||||
* mac80211 (CVE-2009-4026, CVE-2009-4027):
|
||||
|
|
112
debian/patches/bugfix/all/usbnet-link-down-initially-for-drivers-that-update.patch
vendored
Normal file
112
debian/patches/bugfix/all/usbnet-link-down-initially-for-drivers-that-update.patch
vendored
Normal file
|
@ -0,0 +1,112 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Subject: [PATCH] usbnet: Set link down initially for drivers that update link state
|
||||
|
||||
Some usbnet drivers update link state while others do not due to
|
||||
hardware limitations. Add a flag to distinguish those that do, and
|
||||
set the link down initially for their devices.
|
||||
|
||||
This is intended to fix this bug: http://bugs.debian.org/444043
|
||||
|
||||
--- a/drivers/net/usb/asix.c
|
||||
+++ b/drivers/net/usb/asix.c
|
||||
@@ -1327,7 +1327,7 @@ static const struct driver_info ax8817x_info = {
|
||||
.status = asix_status,
|
||||
.link_reset = ax88172_link_reset,
|
||||
.reset = ax88172_link_reset,
|
||||
- .flags = FLAG_ETHER,
|
||||
+ .flags = FLAG_ETHER | FLAG_LINK_INTR,
|
||||
.data = 0x00130103,
|
||||
};
|
||||
|
||||
@@ -1337,7 +1337,7 @@ static const struct driver_info dlink_dub_e100_info = {
|
||||
.status = asix_status,
|
||||
.link_reset = ax88172_link_reset,
|
||||
.reset = ax88172_link_reset,
|
||||
- .flags = FLAG_ETHER,
|
||||
+ .flags = FLAG_ETHER | FLAG_LINK_INTR,
|
||||
.data = 0x009f9d9f,
|
||||
};
|
||||
|
||||
@@ -1347,7 +1347,7 @@ static const struct driver_info netgear_fa120_info = {
|
||||
.status = asix_status,
|
||||
.link_reset = ax88172_link_reset,
|
||||
.reset = ax88172_link_reset,
|
||||
- .flags = FLAG_ETHER,
|
||||
+ .flags = FLAG_ETHER | FLAG_LINK_INTR,
|
||||
.data = 0x00130103,
|
||||
};
|
||||
|
||||
@@ -1357,7 +1357,7 @@ static const struct driver_info hawking_uf200_info = {
|
||||
.status = asix_status,
|
||||
.link_reset = ax88172_link_reset,
|
||||
.reset = ax88172_link_reset,
|
||||
- .flags = FLAG_ETHER,
|
||||
+ .flags = FLAG_ETHER | FLAG_LINK_INTR,
|
||||
.data = 0x001f1d1f,
|
||||
};
|
||||
|
||||
@@ -1367,7 +1367,7 @@ static const struct driver_info ax88772_info = {
|
||||
.status = asix_status,
|
||||
.link_reset = ax88772_link_reset,
|
||||
.reset = ax88772_link_reset,
|
||||
- .flags = FLAG_ETHER | FLAG_FRAMING_AX,
|
||||
+ .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_LINK_INTR,
|
||||
.rx_fixup = asix_rx_fixup,
|
||||
.tx_fixup = asix_tx_fixup,
|
||||
};
|
||||
@@ -1378,7 +1378,7 @@ static const struct driver_info ax88178_info = {
|
||||
.status = asix_status,
|
||||
.link_reset = ax88178_link_reset,
|
||||
.reset = ax88178_link_reset,
|
||||
- .flags = FLAG_ETHER | FLAG_FRAMING_AX,
|
||||
+ .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_LINK_INTR,
|
||||
.rx_fixup = asix_rx_fixup,
|
||||
.tx_fixup = asix_tx_fixup,
|
||||
};
|
||||
--- a/drivers/net/usb/cdc_ether.c
|
||||
+++ b/drivers/net/usb/cdc_ether.c
|
||||
@@ -413,7 +413,7 @@ static int cdc_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
|
||||
static const struct driver_info cdc_info = {
|
||||
.description = "CDC Ethernet Device",
|
||||
- .flags = FLAG_ETHER,
|
||||
+ .flags = FLAG_ETHER | FLAG_LINK_INTR,
|
||||
// .check_connect = cdc_check_connect,
|
||||
.bind = cdc_bind,
|
||||
.unbind = usbnet_cdc_unbind,
|
||||
--- a/drivers/net/usb/dm9601.c
|
||||
+++ b/drivers/net/usb/dm9601.c
|
||||
@@ -611,7 +611,7 @@ static int dm9601_link_reset(struct usbnet *dev)
|
||||
|
||||
static const struct driver_info dm9601_info = {
|
||||
.description = "Davicom DM9601 USB Ethernet",
|
||||
- .flags = FLAG_ETHER,
|
||||
+ .flags = FLAG_ETHER | FLAG_LINK_INTR,
|
||||
.bind = dm9601_bind,
|
||||
.rx_fixup = dm9601_rx_fixup,
|
||||
.tx_fixup = dm9601_tx_fixup,
|
||||
--- a/drivers/net/usb/usbnet.c
|
||||
+++ b/drivers/net/usb/usbnet.c
|
||||
@@ -1352,9 +1352,11 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
|
||||
// ok, it's ready to go.
|
||||
usb_set_intfdata (udev, dev);
|
||||
|
||||
- // start as if the link is up
|
||||
netif_device_attach (net);
|
||||
|
||||
+ if (dev->driver_info->flags & FLAG_LINK_INTR)
|
||||
+ netif_carrier_off(net);
|
||||
+
|
||||
return 0;
|
||||
|
||||
out3:
|
||||
--- a/include/linux/usb/usbnet.h
|
||||
+++ b/include/linux/usb/usbnet.h
|
||||
@@ -92,6 +92,7 @@ struct driver_info {
|
||||
#define FLAG_AVOID_UNLINK_URBS 0x0100 /* don't unlink urbs at usbnet_stop() */
|
||||
#define FLAG_SEND_ZLP 0x0200 /* hw requires ZLPs are sent */
|
||||
|
||||
+#define FLAG_LINK_INTR 0x0800 /* updates link (carrier) status */
|
||||
|
||||
/* init device ... can sleep, or cause probe() failure */
|
||||
int (*bind)(struct usbnet *, struct usb_interface *);
|
|
@ -80,3 +80,4 @@
|
|||
|
||||
+ bugfix/all/atl1e-remove-broken-tsov6.patch
|
||||
+ features/all/atl1e-allow-offload-disable.patch
|
||||
+ bugfix/all/usbnet-link-down-initially-for-drivers-that-update.patch
|
||||
|
|
Loading…
Reference in New Issue