[packages_10.03.2] usbip: merge r27745, r27746, r28512
authorjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 5 Feb 2012 16:33:23 +0000 (16:33 +0000)
committerjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 5 Feb 2012 16:33:23 +0000 (16:33 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/branches/packages_10.03.2@30277 3c298f89-4303-0410-b956-a3cf2f4a3e73

net/usbip/Makefile
net/usbip/patches/000-upstream_svn_152.patch [deleted file]
net/usbip/patches/001-upstream_svn_r99.diff [new file with mode: 0644]
net/usbip/patches/002-upstream_svn_r152.patch [new file with mode: 0644]

index 9251857..7748ca7 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2010 OpenWrt.org
+# Copyright (C) 2010-2011 OpenWrt.org
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -10,13 +10,14 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=usbip
 PKG_VERSION:=0.1.7
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=@SF/usbip
 PKG_MD5SUM:=d1094b6d4449787864f8be001639232c
 
-PKG_FIXUP:=libtool
+PKG_BUILD_DEPENDS:=glib2 sysfsutils
+PKG_FIXUP:=libtool autoreconf
 PKG_INSTALL:=1
 
 include $(INCLUDE_DIR)/package.mk
@@ -25,7 +26,7 @@ include $(INCLUDE_DIR)/nls.mk
 define Package/usbip/Common
   TITLE:=USB-over-IP
   URL:=http://usbip.sourceforge.net/
-  DEPENDS:=@!LINUX_2_4 @USB_SUPPORT +glib2 +sysfsutils
+  DEPENDS:=@!LINUX_2_4 @USB_SUPPORT
   MAINTAINER:=Nuno Goncalves <nunojpg@gmail.com>
 endef
 
@@ -38,19 +39,19 @@ endef
 define Package/usbip
 $(call Package/usbip/Default)
   TITLE+= (common)
-  DEPENDS+= +glib2 +sysfsutils +libwrap +kmod-usbip
+  DEPENDS+= +libsysfs +libwrap +kmod-usbip
 endef
 
 define Package/usbip-client
 $(call Package/usbip/Default)
   TITLE+= (client)
-  DEPENDS+= usbip +kmod-usbip-client
+  DEPENDS+= usbip +glib2 +kmod-usbip-client
 endef
 
 define Package/usbip-server
 $(call Package/usbip/Default)
   TITLE+= (server)
-  DEPENDS+= usbip +kmod-usbip-server
+  DEPENDS+= usbip +glib2 +kmod-usbip-server
 endef
 
 define KernelPackage/usbip/Default
@@ -61,29 +62,40 @@ endef
 define KernelPackage/usbip
 $(call KernelPackage/usbip/Default)
   TITLE+= (kernel support)
-  KCONFIG:= CONFIG_USB_IP_COMMON CONFIG_USB_IP_DEBUG_ENABLE=n
+  DEPENDS+= +kmod-usb-core
+  KCONFIG:= \
+       CONFIG_USB_IP_COMMON CONFIG_USB_IP_DEBUG_ENABLE=n \
+       CONFIG_USBIP_CORE CONFIG_USBIP_DEBUG=n
+ ifeq ($(strip $(call CompareKernelPatchVer,$(KERNEL_PATCHVER),le,2.6.39)),1)
   FILES:=$(LINUX_DIR)/drivers/staging/usbip/usbip_common_mod.$(LINUX_KMOD_SUFFIX)
   AUTOLOAD:=$(call AutoLoad,98,usbip_common_mod)
+ else
+  FILES:=$(LINUX_DIR)/drivers/staging/usbip/usbip-core.ko
+  AUTOLOAD:=$(call AutoLoad,98,usbip-core)
+ endif
 endef
 
 define KernelPackage/usbip-client
 $(call KernelPackage/usbip/Default)
-  SUBMENU:=USB Support
   TITLE+= (kernel client driver)
   DEPENDS+= kmod-usbip
-  KCONFIG:= CONFIG_USB_IP_VHCI_HCD
+  KCONFIG:= CONFIG_USB_IP_VHCI_HCD CONFIG_USBIP_VHCI_HCD
   FILES:=$(LINUX_DIR)/drivers/staging/usbip/vhci-hcd.$(LINUX_KMOD_SUFFIX)
   AUTOLOAD:=$(call AutoLoad,99,vhci-hcd)
 endef
 
 define KernelPackage/usbip-server
 $(call KernelPackage/usbip/Default)
-  SUBMENU:=USB Support
   TITLE+= (kernel host driver)
   DEPENDS+= kmod-usbip
-  KCONFIG:= CONFIG_USB_IP_HOST
+  KCONFIG:= CONFIG_USB_IP_HOST CONFIG_USBIP_HOST
+ ifeq ($(strip $(call CompareKernelPatchVer,$(KERNEL_PATCHVER),le,2.6.39)),1)
   FILES:=$(LINUX_DIR)/drivers/staging/usbip/usbip.$(LINUX_KMOD_SUFFIX)
   AUTOLOAD:=$(call AutoLoad,99,usbip)
+ else
+  FILES:=$(LINUX_DIR)/drivers/staging/usbip/usbip-host.ko
+  AUTOLOAD:=$(call AutoLoad,99,usbip-host)
+ endif
 endef
 
 include $(INCLUDE_DIR)/kernel-defaults.mk
@@ -94,17 +106,15 @@ LIBTOOL_PATHS:=./src
 
 CFLAGS+="$(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include"
 
-define Build/Prepare
-$(call Build/Prepare/Default)
-       (cd $(PKG_BUILD_DIR)/src; autoreconf -v --install || exit 1 )
-endef
-
 define Build/Compile/kmod
        $(MAKE) $(KERNEL_MAKEOPTS) \
                SUBDIRS="$(LINUX_DIR)/drivers/staging/usbip" \
                CONFIG_USB_IP_COMMON=m \
                CONFIG_USB_IP_VHCI_HCD=m \
                CONFIG_USB_IP_HOST=m \
+               CONFIG_USBIP_CORE=m \
+               CONFIG_USBIP_VHCI_HCD=m \
+               CONFIG_USBIP_HOST=m \
                modules
 endef
 
@@ -118,10 +128,10 @@ define Package/usbip/install
        $(CP) \
                $(PKG_INSTALL_DIR)/usr/lib/libusbip.so.* \
                $(1)/usr/lib/
-       $(INSTALL_DIR) $(1)/usr/share/hwdata
+       $(INSTALL_DIR) $(1)/usr/share/usbip
        $(CP) \
                $(PKG_INSTALL_DIR)/usr/share/usbip/usb.ids \
-               $(1)/usr/share/hwdata/
+               $(1)/usr/share/usbip/
 endef
 
 define Package/usbip-client/install
diff --git a/net/usbip/patches/000-upstream_svn_152.patch b/net/usbip/patches/000-upstream_svn_152.patch
deleted file mode 100644 (file)
index e7135a6..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
---- 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 *);
diff --git a/net/usbip/patches/001-upstream_svn_r99.diff b/net/usbip/patches/001-upstream_svn_r99.diff
new file mode 100644 (file)
index 0000000..aa193e1
--- /dev/null
@@ -0,0 +1,11 @@
+Index: trunk/src/cmd/Makefile.am
+===================================================================
+--- trunk/src/cmd/Makefile.am  (revision 98)
++++ trunk/src/cmd/Makefile.am  (revision 99)
+@@ -17,5 +17,5 @@
+ INCLUDES = -I$(top_srcdir)/lib
+ LDADD = ../lib/libusbip.la @PACKAGE_LIBS@
+ EXTRA_CFLAGS = @EXTRA_CFLAGS@
+-AM_CFLAGS = -Wall -W -Wstrict-prototypes -std=gnu99 $(EXTRA_CFLAGS) @PACKAGE_CFLAGS@
++AM_CFLAGS = -Wall -W -Wstrict-prototypes -std=gnu99 $(EXTRA_CFLAGS) @PACKAGE_CFLAGS@ -DUSBIDS_FILE='"@USBIDS_DIR@/usb.ids"'
diff --git a/net/usbip/patches/002-upstream_svn_r152.patch b/net/usbip/patches/002-upstream_svn_r152.patch
new file mode 100644 (file)
index 0000000..e7135a6
--- /dev/null
@@ -0,0 +1,229 @@
+--- 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 *);