void usbip_start_eh(struct usbip_device *ud) { struct usbip_task *eh = &ud->eh; init_waitqueue_head(&ud->eh_waitq); ud->event = 0; usbip_task_init(eh, "usbip_eh", event_handler_loop); kernel_thread((int(*)(void *)) usbip_thread, (void *) eh, 0); wait_for_completion(&eh->thread_done); }
int usbip_start_eh(struct usbip_device *ud) { struct usbip_task *eh = &ud->eh; struct task_struct *th; init_waitqueue_head(&ud->eh_waitq); ud->event = 0; usbip_task_init(eh, "usbip_eh", event_handler_loop); th = kthread_run(usbip_thread, (void *)eh, "usbip"); if (IS_ERR(th)) { printk(KERN_WARNING "Unable to start control thread\n"); return PTR_ERR(th); } wait_for_completion(&eh->thread_done); return 0; }