usb_put_urb(urb);
 }
 
-static void usb_giveback_urb_bh(unsigned long param)
+static void usb_giveback_urb_bh(struct tasklet_struct *t)
 {
-       struct giveback_urb_bh *bh = (struct giveback_urb_bh *)param;
+       struct giveback_urb_bh *bh = from_tasklet(bh, t, bh);
        struct list_head local_list;
 
        spin_lock_irq(&bh->lock);
 
        spin_lock_init(&bh->lock);
        INIT_LIST_HEAD(&bh->head);
-       tasklet_init(&bh->bh, usb_giveback_urb_bh, (unsigned long)bh);
+       tasklet_setup(&bh->bh, usb_giveback_urb_bh);
 }
 
 struct usb_hcd *__usb_create_hcd(const struct hc_driver *driver,