MODULE_DEVICE_TABLE(usb, id_table);
 
-static struct workqueue_struct *usb_tx_wq;
-static struct workqueue_struct *usb_rx_wq;
-
 static void do_tx(struct work_struct *work);
 static void do_rx(struct work_struct *work);
 
        if (!urb->status && r->callback) {
                spin_lock_irqsave(&rx->to_host_lock, flags);
                list_add_tail(&r->to_host_list, &rx->to_host_list);
-               queue_work(usb_rx_wq, &udev->work_rx.work);
+               schedule_work(&udev->work_rx.work);
                spin_unlock_irqrestore(&rx->to_host_lock, flags);
        } else {
                if (urb->status && udev->usb_state == PM_NORMAL)
 
        spin_lock_irqsave(&tx->lock, flags);
        udev->send_complete = 1;
-       queue_work(usb_tx_wq, &udev->work_tx.work);
+       schedule_work(&udev->work_tx.work);
        spin_unlock_irqrestore(&tx->lock, flags);
 }
 
 
        spin_lock_irqsave(&tx->lock, flags);
        list_add_tail(&t_sdu->list, &tx->sdu_list);
-       queue_work(usb_tx_wq, &udev->work_tx.work);
+       schedule_work(&udev->work_tx.work);
        spin_unlock_irqrestore(&tx->lock, flags);
 
        if (no_spc)
 
        spin_lock_irqsave(&tx->lock, flags);
        list_add_tail(&t->list, &tx->hci_list);
-       queue_work(usb_tx_wq, &udev->work_tx.work);
+       schedule_work(&udev->work_tx.work);
        spin_unlock_irqrestore(&tx->lock, flags);
 
        return 0;
        }
        spin_unlock_irqrestore(&rx->submit_lock, flags);
 
+       cancel_work_sync(&udev->work_tx.work);
+       cancel_work_sync(&udev->work_rx.work);
+
        return 0;
 }
 
 
        tx = &udev->tx;
        spin_lock_irqsave(&tx->lock, flags);
-       queue_work(usb_tx_wq, &udev->work_tx.work);
+       schedule_work(&udev->work_tx.work);
        spin_unlock_irqrestore(&tx->lock, flags);
 
        return 0;
                return -1;
        }
 
-       usb_tx_wq = create_workqueue("usb_tx_wq");
-       if (!usb_tx_wq)
-               return -1;
-
-       usb_rx_wq = create_workqueue("usb_rx_wq");
-       if (!usb_rx_wq)
-               return -1;
-
        return usb_register(&gdm_usb_lte_driver);
 }
 
        gdm_lte_event_exit();
 
        usb_deregister(&gdm_usb_lte_driver);
-
-       if (usb_tx_wq) {
-               flush_workqueue(usb_tx_wq);
-               destroy_workqueue(usb_tx_wq);
-       }
-
-       if (usb_rx_wq) {
-               flush_workqueue(usb_rx_wq);
-               destroy_workqueue(usb_rx_wq);
-       }
 }
 
 module_init(gdm_usb_lte_init);