|
@@ -1509,9 +1509,9 @@ err:
|
|
|
|
|
|
// tasklet (work deferred from completions, in_irq) or timer
|
|
|
|
|
|
-static void usbnet_bh (unsigned long param)
|
|
|
+static void usbnet_bh (struct timer_list *t)
|
|
|
{
|
|
|
- struct usbnet *dev = (struct usbnet *) param;
|
|
|
+ struct usbnet *dev = from_timer(dev, t, delay);
|
|
|
struct sk_buff *skb;
|
|
|
struct skb_data *entry;
|
|
|
|
|
@@ -1694,13 +1694,11 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
|
|
|
skb_queue_head_init (&dev->txq);
|
|
|
skb_queue_head_init (&dev->done);
|
|
|
skb_queue_head_init(&dev->rxq_pause);
|
|
|
- dev->bh.func = usbnet_bh;
|
|
|
- dev->bh.data = (unsigned long) dev;
|
|
|
+ dev->bh.func = (void (*)(unsigned long))usbnet_bh;
|
|
|
+ dev->bh.data = (unsigned long)&dev->delay;
|
|
|
INIT_WORK (&dev->kevent, usbnet_deferred_kevent);
|
|
|
init_usb_anchor(&dev->deferred);
|
|
|
- dev->delay.function = usbnet_bh;
|
|
|
- dev->delay.data = (unsigned long) dev;
|
|
|
- init_timer (&dev->delay);
|
|
|
+ timer_setup(&dev->delay, usbnet_bh, 0);
|
|
|
mutex_init (&dev->phy_mutex);
|
|
|
mutex_init(&dev->interrupt_mutex);
|
|
|
dev->interrupt_count = 0;
|