--- a/drivers/head/stub_dev.c +++ b/drivers/head/stub_dev.c @@ -398,7 +398,11 @@ static int stub_probe(struct usb_interfa { struct usb_device *udev = interface_to_usbdev(interface); struct stub_device *sdev = NULL; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) char *udev_busid = interface->dev.parent->bus_id; +#else + char *udev_busid = dev_name(interface->dev.parent); +#endif int err = 0; udbg("Enter\n"); --- a/drivers/head/stub_main.c +++ b/drivers/head/stub_main.c @@ -252,18 +252,17 @@ static int __init usb_stub_init(void) return -ENOMEM; } + info(DRIVER_DESC "" DRIVER_VERSION); + + memset(busid_table, 0, sizeof(busid_table)); + spin_lock_init(&busid_table_lock); + ret = usb_register(&stub_driver); if (ret) { uerr("usb_register failed %d\n", ret); return ret; } - - info(DRIVER_DESC "" DRIVER_VERSION); - - memset(busid_table, 0, sizeof(busid_table)); - spin_lock_init(&busid_table_lock); - ret = driver_create_file(&stub_driver.drvwrap.driver, &driver_attr_match_busid); if (ret) { --- a/drivers/head/stub_rx.c +++ b/drivers/head/stub_rx.c @@ -159,7 +159,11 @@ static int tweak_set_configuration_cmd(s * A user may need to set a special configuration value before * exporting the device. */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) uinfo("set_configuration (%d) to %s\n", config, urb->dev->dev.bus_id); +#else + uinfo("set_configuration (%d) to %s\n", config, dev_name(&urb->dev->dev)); +#endif uinfo("but, skip!\n"); return 0; @@ -177,7 +181,11 @@ static int tweak_reset_device_cmd(struct value = le16_to_cpu(req->wValue); index = le16_to_cpu(req->wIndex); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) uinfo("reset_device (port %d) to %s\n", index, urb->dev->dev.bus_id); +#else + uinfo("reset_device (port %d) to %s\n", index, dev_name(&urb->dev->dev)); +#endif /* all interfaces should be owned by usbip driver, so just reset it. */ ret = usb_lock_device_for_reset(urb->dev, NULL); @@ -187,7 +195,11 @@ static int tweak_reset_device_cmd(struct } /* try to reset the device */ - ret = usb_reset_composite_device(urb->dev, NULL); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) + ret = usb_reset_composite_device(urb->dev, NULL); +#else + ret = usb_reset_device(urb->dev); +#endif if (ret < 0) uerr("device reset\n"); --- a/drivers/head/usbip_common.c +++ b/drivers/head/usbip_common.c @@ -55,10 +55,7 @@ static ssize_t show_flag(struct device * static ssize_t store_flag(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { - unsigned long flag; - - sscanf(buf, "%lx", &flag); - usbip_debug_flag = flag; + sscanf(buf, "%lx", &usbip_debug_flag); return count; } @@ -390,7 +387,7 @@ int usbip_thread(void *param) unlock_kernel(); /* srv.rb must wait for rx_thread starting */ - complete(&ut->thread_done); + complete(&ut->thread_started); /* start of while loop */ ut->loop_ops(ut); @@ -403,15 +400,21 @@ int usbip_thread(void *param) void usbip_start_threads(struct usbip_device *ud) { + /* * threads are invoked per one device (per one connection). */ + INIT_COMPLETION(ud->tcp_rx.thread_started); + INIT_COMPLETION(ud->tcp_tx.thread_started); + INIT_COMPLETION(ud->tcp_rx.thread_done); + INIT_COMPLETION(ud->tcp_tx.thread_done); + kernel_thread((int(*)(void *))usbip_thread, (void *)&ud->tcp_rx, 0); kernel_thread((int(*)(void *))usbip_thread, (void *)&ud->tcp_tx, 0); /* confirm threads are starting */ - wait_for_completion(&ud->tcp_rx.thread_done); - wait_for_completion(&ud->tcp_tx.thread_done); + wait_for_completion(&ud->tcp_rx.thread_started); + wait_for_completion(&ud->tcp_tx.thread_started); } EXPORT_SYMBOL(usbip_start_threads); @@ -436,6 +439,7 @@ void usbip_task_init(struct usbip_task * void (*loop_ops)(struct usbip_task *)) { ut->thread = NULL; + init_completion(&ut->thread_started); init_completion(&ut->thread_done); ut->name = name; ut->loop_ops = loop_ops; --- a/drivers/head/usbip_event.c +++ b/drivers/head/usbip_event.c @@ -38,7 +38,7 @@ void usbip_start_eh(struct usbip_device kernel_thread((int(*)(void *)) usbip_thread, (void *) eh, 0); - wait_for_completion(&eh->thread_done); + wait_for_completion(&eh->thread_started); } EXPORT_SYMBOL(usbip_start_eh); --- a/drivers/head/vhci_hcd.c +++ b/drivers/head/vhci_hcd.c @@ -58,7 +58,7 @@ static void vhci_stop(struct usb_hcd *hc static int vhci_get_frame_number(struct usb_hcd *hcd); static const char driver_name[] = "vhci_hcd"; -static const char driver_desc[] = "USB/IP Virtual Host Contoroller"; +static const char driver_desc[] = "USB/IP Virtual Host Controller"; @@ -416,14 +416,6 @@ static int vhci_hub_control(struct usb_h case USB_PORT_FEAT_SUSPEND: dbg_vhci_rh(" SetPortFeature: USB_PORT_FEAT_SUSPEND\n"); uerr(" not yet\n"); -#if 0 - dum->port_status[rhport] |= (1 << USB_PORT_FEAT_SUSPEND); - if (dum->driver->suspend) { - spin_unlock (&dum->lock); - dum->driver->suspend (&dum->gadget); - spin_lock (&dum->lock); - } -#endif break; case USB_PORT_FEAT_RESET: dbg_vhci_rh(" SetPortFeature: USB_PORT_FEAT_RESET\n"); @@ -432,12 +424,6 @@ static int vhci_hub_control(struct usb_h dum->port_status[rhport] &= ~(USB_PORT_STAT_ENABLE | USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED); -#if 0 - if (dum->driver) { - dev_dbg (hardware, "disconnect\n"); - stop_activity (dum, dum->driver); - } -#endif /* FIXME test that code path! */ } @@ -1060,7 +1046,7 @@ static int vhci_hcd_probe(struct platfor struct usb_hcd *hcd; int ret; - uinfo("proving...\n"); + uinfo("probing...\n"); dbg_vhci_hc("name %s id %d\n", pdev->name, pdev->id); @@ -1076,7 +1062,11 @@ static int vhci_hcd_probe(struct platfor * Allocate and initialize hcd. * Our private data is also allocated automatically. */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) hcd = usb_create_hcd(&vhci_hc_driver, &pdev->dev, pdev->dev.bus_id); +#else + hcd = usb_create_hcd(&vhci_hc_driver, &pdev->dev, dev_name(&pdev->dev)); +#endif if (!hcd) { uerr("create hcd failed\n"); return -ENOMEM; --- a/drivers/head/vhci_sysfs.c +++ b/drivers/head/vhci_sysfs.c @@ -123,7 +123,11 @@ static ssize_t show_status(struct device out += sprintf(out, "%03u %08x ", vdev->speed, vdev->devid); out += sprintf(out, "%16p ", vdev->ud.tcp_socket); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) out += sprintf(out, "%s", vdev->udev->dev.bus_id); +#else + out += sprintf(out, "%s", dev_name(&vdev->udev->dev)); +#endif } else out += sprintf(out, "000 000 000 0000000000000000 0-0"); --- a/drivers/head/usbip_common.h +++ b/drivers/head/usbip_common.h @@ -300,6 +300,7 @@ struct usbip_device; struct usbip_task { struct task_struct *thread; + struct completion thread_started; struct completion thread_done; char *name; void (*loop_ops)(struct usbip_task *);