|
@@ -137,7 +137,6 @@ struct most_dev {
|
|
|
#define to_mdev(d) container_of(d, struct most_dev, iface)
|
|
|
#define to_mdev_from_work(w) container_of(w, struct most_dev, poll_work_obj)
|
|
|
|
|
|
-static struct workqueue_struct *schedule_usb_work;
|
|
|
static void wq_clear_halt(struct work_struct *wq_obj);
|
|
|
static void wq_netinfo(struct work_struct *wq_obj);
|
|
|
|
|
@@ -226,6 +225,8 @@ static void free_anchored_buffers(struct most_dev *mdev, unsigned int channel)
|
|
|
kfree(anchor);
|
|
|
}
|
|
|
spin_unlock_irqrestore(&mdev->anchor_list_lock[channel], flags);
|
|
|
+
|
|
|
+ cancel_work_sync(&anchor->clear_work_obj);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -411,7 +412,7 @@ static void hdm_write_completion(struct urb *urb)
|
|
|
mbo->status = MBO_E_INVAL;
|
|
|
usb_unlink_urb(urb);
|
|
|
INIT_WORK(&anchor->clear_work_obj, wq_clear_halt);
|
|
|
- queue_work(schedule_usb_work, &anchor->clear_work_obj);
|
|
|
+ schedule_work(&anchor->clear_work_obj);
|
|
|
return;
|
|
|
case -ENODEV:
|
|
|
case -EPROTO:
|
|
@@ -575,7 +576,7 @@ static void hdm_read_completion(struct urb *urb)
|
|
|
mbo->status = MBO_E_INVAL;
|
|
|
usb_unlink_urb(urb);
|
|
|
INIT_WORK(&anchor->clear_work_obj, wq_clear_halt);
|
|
|
- queue_work(schedule_usb_work, &anchor->clear_work_obj);
|
|
|
+ schedule_work(&anchor->clear_work_obj);
|
|
|
return;
|
|
|
case -ENODEV:
|
|
|
case -EPROTO:
|
|
@@ -872,7 +873,7 @@ static void link_stat_timer_handler(unsigned long data)
|
|
|
{
|
|
|
struct most_dev *mdev = (struct most_dev *)data;
|
|
|
|
|
|
- queue_work(schedule_usb_work, &mdev->poll_work_obj);
|
|
|
+ schedule_work(&mdev->poll_work_obj);
|
|
|
mdev->link_stat_timer.expires = jiffies + (2 * HZ);
|
|
|
add_timer(&mdev->link_stat_timer);
|
|
|
}
|
|
@@ -1415,19 +1416,13 @@ static int __init hdm_usb_init(void)
|
|
|
pr_err("could not register hdm_usb driver\n");
|
|
|
return -EIO;
|
|
|
}
|
|
|
- schedule_usb_work = create_workqueue("hdmu_work");
|
|
|
- if (!schedule_usb_work) {
|
|
|
- pr_err("could not create workqueue\n");
|
|
|
- usb_deregister(&hdm_usb);
|
|
|
- return -ENOMEM;
|
|
|
- }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static void __exit hdm_usb_exit(void)
|
|
|
{
|
|
|
pr_info("hdm_usb_exit()\n");
|
|
|
- destroy_workqueue(schedule_usb_work);
|
|
|
usb_deregister(&hdm_usb);
|
|
|
}
|
|
|
|