ChangeSet 1.1757.66.17, 2004/07/14 14:51:11-07:00, [EMAIL PROTECTED]
[PATCH] USB: ax8817x_unbind does not free the interrupt URB after unlinking
ax8817x_unbind does not free the interrupt URB after unlinking.
Noticed that the net->status already has a flag for link so my
private structure variable for link was redundant. Worked around
this and was able to kill off the unique ax8817x_get_link() function
in the process.
Signed-off-by: David Hollis <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>
drivers/usb/net/usbnet.c | 26 +++++++++-----------------
1 files changed, 9 insertions(+), 17 deletions(-)
diff -Nru a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c
--- a/drivers/usb/net/usbnet.c 2004-07-14 16:44:53 -07:00
+++ b/drivers/usb/net/usbnet.c 2004-07-14 16:44:53 -07:00
@@ -461,7 +461,6 @@
u8 multi_filter[AX_MCAST_FILTER_SIZE];
struct urb *int_urb;
u8 *int_buf;
- u8 link;
};
static int ax8817x_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
@@ -510,20 +509,20 @@
{
struct usbnet *dev = (struct usbnet *)urb->context;
struct ax8817x_data *data = (struct ax8817x_data *)&dev->data;
+ int link;
if (urb->status < 0) {
printk(KERN_DEBUG "ax8817x_interrupt_complete() failed with %d",
urb->status);
} else {
if (data->int_buf[5] == 0x90) {
- if (data->link != (data->int_buf[2] & 0x01)) {
- if (data->link == 1)
- netif_carrier_off(dev->net);
- else
+ link = data->int_buf[2] & 0x01;
+ if (netif_carrier_ok(dev->net) != link) {
+ if (link)
netif_carrier_on(dev->net);
-
- data->link = data->int_buf[2] & 0x01;
- devdbg(dev, "ax8817x: link is now %d", data->link);
+ else
+ netif_carrier_off(dev->net);
+ devdbg(dev, "ax8817x - Link Status is: %d", link);
}
}
usb_submit_urb(data->int_urb, GFP_KERNEL);
@@ -703,14 +702,6 @@
info->eedump_len = 0x3e;
}
-static u32 ax8817x_get_link (struct net_device *net)
-{
- struct usbnet *dev = (struct usbnet *)net->priv;
- struct ax8817x_data *data = (struct ax8817x_data *)&dev->data;
-
- return (u32)data->link;
-}
-
static int ax8817x_get_settings(struct net_device *net, struct ethtool_cmd *cmd)
{
struct usbnet *dev = (struct usbnet *)net->priv;
@@ -730,7 +721,7 @@
devices that may be connected at the same time. */
static struct ethtool_ops ax8817x_ethtool_ops = {
.get_drvinfo = ax8817x_get_drvinfo,
- .get_link = ax8817x_get_link,
+ .get_link = ethtool_op_get_link,
.get_msglevel = usbnet_get_msglevel,
.set_msglevel = usbnet_set_msglevel,
.get_wol = ax8817x_get_wol,
@@ -835,6 +826,7 @@
struct ax8817x_data *data = (struct ax8817x_data *)dev->data;
usb_unlink_urb(data->int_urb);
+ usb_free_urb(data->int_urb);
kfree(data->int_buf);
}
-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_idG21&alloc_id040&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel