diff --git a/net/usbip/patches/000-upstream_svn_152.patch b/net/usbip/patches/000-upstream_svn_152.patch new file mode 100644 index 000000000..3cdef597d --- /dev/null +++ b/net/usbip/patches/000-upstream_svn_152.patch @@ -0,0 +1,247 @@ +--- 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 +@@ -27,7 +27,7 @@ + #include "usbip_common.h" + + /* version information */ +-#define DRIVER_VERSION "$Id: usbip_common.c 66 2008-04-20 13:19:42Z hirofuchi $" ++#define DRIVER_VERSION "$Id$" + #define DRIVER_AUTHOR "Takahiro Hirofuchi " + #define DRIVER_DESC "usbip common driver" + +@@ -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 +@@ -24,7 +24,7 @@ + #include "usbip_common.h" + #include "vhci.h" + +-#define DRIVER_VERSION " $Id: vhci_hcd.c 66 2008-04-20 13:19:42Z hirofuchi $ " ++#define DRIVER_VERSION " $Id$ " + #define DRIVER_AUTHOR "Takahiro Hirofuchi" + #define DRIVER_DESC "Virtual Host Controller Interface Driver for USB/IP" + #define DRIVER_LICENCE "GPL" +@@ -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 *);