From: jow Date: Sun, 5 Feb 2012 16:33:23 +0000 (+0000) Subject: [packages_10.03.2] usbip: merge r27745, r27746, r28512 X-Git-Url: http://207.154.207.93/?a=commitdiff_plain;h=ab2f99fdd17885f500d267ca91652c2b59ea2b38;p=10.03%2Fpackages.git [packages_10.03.2] usbip: merge r27745, r27746, r28512 git-svn-id: svn://svn.openwrt.org/openwrt/branches/packages_10.03.2@30277 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- diff --git a/net/usbip/Makefile b/net/usbip/Makefile index 9251857..7748ca7 100644 --- a/net/usbip/Makefile +++ b/net/usbip/Makefile @@ -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 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 index e7135a6..0000000 --- a/net/usbip/patches/000-upstream_svn_152.patch +++ /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 index 0000000..aa193e1 --- /dev/null +++ b/net/usbip/patches/001-upstream_svn_r99.diff @@ -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 index 0000000..e7135a6 --- /dev/null +++ b/net/usbip/patches/002-upstream_svn_r152.patch @@ -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 *);