[PATCH 13/18] staging: usbip: userspace: increase version to 2.0

2014-03-08 Thread Valentina Manea
Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 drivers/staging/usbip/userspace/configure.ac | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/usbip/userspace/configure.ac 
b/drivers/staging/usbip/userspace/configure.ac
index 25bf160..607d05c 100644
--- a/drivers/staging/usbip/userspace/configure.ac
+++ b/drivers/staging/usbip/userspace/configure.ac
@@ -1,7 +1,7 @@
 dnl Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT([usbip-utils], [1.1.1], [linux-usb@vger.kernel.org])
+AC_INIT([usbip-utils], [2.0], [linux-usb@vger.kernel.org])
 AC_DEFINE([USBIP_VERSION], [0x0111], [binary-coded decimal version number])
 
 CURRENT=0
-- 
1.8.1.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 18/18] staging: usbip: userspace: add hwdata as optional dependency in README

2014-03-08 Thread Valentina Manea
This is an optional dependency since USB/IP can fully work without
it. However, it is needed to display device information such as
vendor.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 drivers/staging/usbip/userspace/README | 4 
 1 file changed, 4 insertions(+)

diff --git a/drivers/staging/usbip/userspace/README 
b/drivers/staging/usbip/userspace/README
index 6ead290..f528ba4 100644
--- a/drivers/staging/usbip/userspace/README
+++ b/drivers/staging/usbip/userspace/README
@@ -19,6 +19,10 @@
 
 - libtool, automake = 1.9, autoconf = 2.5.0, pkg-config
 
+[Optional]
+- hwdata
+Contains USB device identification data.
+
 
 [Install]
 0. Generate configuration scripts.
-- 
1.8.1.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 15/18] staging: usbip: trigger driver probing after unbinding from usbip-host

2014-03-08 Thread Valentina Manea
A sysfs attribute is used to announce kernel space that a
new driver probing session should be triggered for the just
unbinded device.

In order to have the address of struct device associated to this
USB device, a new member has been added to struct bus_id_priv.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 drivers/staging/usbip/stub.h   |  1 +
 drivers/staging/usbip/stub_dev.c   |  1 +
 drivers/staging/usbip/stub_main.c  | 39 ++
 drivers/staging/usbip/userspace/src/usbip_unbind.c | 17 --
 4 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/usbip/stub.h b/drivers/staging/usbip/stub.h
index 82e539a..266e2b0 100644
--- a/drivers/staging/usbip/stub.h
+++ b/drivers/staging/usbip/stub.h
@@ -86,6 +86,7 @@ struct bus_id_priv {
char status;
int interf_count;
struct stub_device *sdev;
+   struct usb_device *udev;
char shutdown_busid;
 };
 
diff --git a/drivers/staging/usbip/stub_dev.c b/drivers/staging/usbip/stub_dev.c
index 1bd13cf..ee899f0 100644
--- a/drivers/staging/usbip/stub_dev.c
+++ b/drivers/staging/usbip/stub_dev.c
@@ -386,6 +386,7 @@ static int stub_probe(struct usb_device *udev)
/* set private data to usb_device */
dev_set_drvdata(udev-dev, sdev);
busid_priv-sdev = sdev;
+   busid_priv-udev = udev;
 
err = stub_add_files(udev-dev);
if (err) {
diff --git a/drivers/staging/usbip/stub_main.c 
b/drivers/staging/usbip/stub_main.c
index bd7b83a..9c5832a 100644
--- a/drivers/staging/usbip/stub_main.c
+++ b/drivers/staging/usbip/stub_main.c
@@ -19,6 +19,7 @@
 
 #include linux/string.h
 #include linux/module.h
+#include linux/device.h
 
 #include usbip_common.h
 #include stub.h
@@ -187,6 +188,34 @@ static ssize_t store_match_busid(struct device_driver 
*dev, const char *buf,
 static DRIVER_ATTR(match_busid, S_IRUSR | S_IWUSR, show_match_busid,
   store_match_busid);
 
+static ssize_t rebind_store(struct device_driver *dev, const char *buf,
+size_t count)
+{
+   int ret;
+   int len;
+   struct bus_id_priv *bid;
+
+   /* buf length should be less that BUSID_SIZE */
+   len = strnlen(buf, BUSID_SIZE);
+
+   if (!(len  BUSID_SIZE))
+   return -EINVAL;
+
+   bid = get_busid_priv(buf);
+   if (!bid)
+   return -ENODEV;
+
+   ret = device_attach(bid-udev-dev);
+   if (ret  0) {
+   dev_err(bid-udev-dev, rebind failed\n);
+   return ret;
+   }
+
+   return count;
+}
+
+static DRIVER_ATTR_WO(rebind);
+
 static struct stub_priv *stub_priv_pop_from_listhead(struct list_head 
*listhead)
 {
struct stub_priv *priv, *tmp;
@@ -267,6 +296,13 @@ static int __init usbip_host_init(void)
goto err_create_file;
}
 
+   ret = driver_create_file(stub_driver.drvwrap.driver,
+driver_attr_rebind);
+   if (ret) {
+   pr_err(driver_create_file failed\n);
+   goto err_create_file;
+   }
+
pr_info(DRIVER_DESC  v USBIP_VERSION \n);
return ret;
 
@@ -282,6 +318,9 @@ static void __exit usbip_host_exit(void)
driver_remove_file(stub_driver.drvwrap.driver,
   driver_attr_match_busid);
 
+   driver_remove_file(stub_driver.drvwrap.driver,
+  driver_attr_rebind);
+
/*
 * deregister() calls stub_disconnect() for all devices. Device
 * specific data is cleared in stub_disconnect().
diff --git a/drivers/staging/usbip/userspace/src/usbip_unbind.c 
b/drivers/staging/usbip/userspace/src/usbip_unbind.c
index 7180dbe..a4a496c 100644
--- a/drivers/staging/usbip/userspace/src/usbip_unbind.c
+++ b/drivers/staging/usbip/userspace/src/usbip_unbind.c
@@ -44,8 +44,10 @@ static int unbind_device(char *busid)
char bus_type[] = usb;
int rc, ret = -1;
 
-   char attr_name[] = unbind;
+   char unbind_attr_name[] = unbind;
char unbind_attr_path[SYSFS_PATH_MAX];
+   char rebind_attr_name[] = rebind;
+   char rebind_attr_path[SYSFS_PATH_MAX];
 
struct udev *udev;
struct udev_device *dev;
@@ -71,7 +73,7 @@ static int unbind_device(char *busid)
/* Unbind device from driver. */
snprintf(unbind_attr_path, sizeof(unbind_attr_path), 
%s/%s/%s/%s/%s/%s,
 SYSFS_MNT_PATH, SYSFS_BUS_NAME, bus_type, SYSFS_DRIVERS_NAME,
-USBIP_HOST_DRV_NAME, attr_name);
+USBIP_HOST_DRV_NAME, unbind_attr_name);
 
rc = write_sysfs_attribute(unbind_attr_path, busid, strlen(busid));
if (rc  0) {
@@ -86,6 +88,17 @@ static int unbind_device(char *busid)
goto err_close_udev;
}
 
+   /* Trigger new probing. */
+   snprintf(rebind_attr_path, sizeof(unbind_attr_path), 
%s/%s/%s/%s/%s/%s,
+ 

[PATCH 17/18] staging: usbip: userspace: don't throw error when trying to read configuration specific attributes

2014-03-08 Thread Valentina Manea
When a device has just been bound to usbip-host but the client hasn't
set a configuration on it, certain attributes will not exist. Don't
treat this as an error.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 drivers/staging/usbip/userspace/libsrc/usbip_common.c | 17 +++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/usbip/userspace/libsrc/usbip_common.c 
b/drivers/staging/usbip/userspace/libsrc/usbip_common.c
index 998c11c..238bf5b 100644
--- a/drivers/staging/usbip/userspace/libsrc/usbip_common.c
+++ b/drivers/staging/usbip/userspace/libsrc/usbip_common.c
@@ -127,10 +127,23 @@ int read_attr_value(struct udev_device *dev, const char 
*name,
goto err;
}
 
+   /* The client chooses the device configuration
+* when attaching it so right after being bound
+* to usbip-host on the server the device will
+* have no configuration.
+* Therefore, attributes such as bConfigurationValue
+* and bNumInterfaces will not exist and sscanf will
+* fail. Check for these cases and don't treat them
+* as errors.
+*/
+
ret = sscanf(attr, format, num);
if (ret  1) {
-   err(sscanf failed);
-   goto err;
+   if (strcmp(name, bConfigurationValue) 
+   strcmp(name, bNumInterfaces)) {
+   err(sscanf failed for attribute %s, name);
+   goto err;
+   }
}
 
 err:
-- 
1.8.1.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 16/18] staging: usbip: claim ports used by shared devices

2014-03-08 Thread Valentina Manea
A device should not be able to be used concurrently both by
the server and the client. Claiming the port used by the
shared device ensures no interface drivers bind to it and
that it is not usable from the server.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
Acked-by: Alan Stern st...@rowland.harvard.edu
---
 drivers/staging/usbip/stub_dev.c | 22 ++
 drivers/usb/core/hub.c   |  2 ++
 drivers/usb/core/usb.h   |  4 
 include/linux/usb.h  |  7 +++
 4 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/usbip/stub_dev.c b/drivers/staging/usbip/stub_dev.c
index ee899f0..952743c 100644
--- a/drivers/staging/usbip/stub_dev.c
+++ b/drivers/staging/usbip/stub_dev.c
@@ -339,6 +339,7 @@ static int stub_probe(struct usb_device *udev)
const char *udev_busid = dev_name(udev-dev);
int err = 0;
struct bus_id_priv *busid_priv;
+   int rc;
 
dev_dbg(udev-dev, Enter\n);
 
@@ -388,6 +389,18 @@ static int stub_probe(struct usb_device *udev)
busid_priv-sdev = sdev;
busid_priv-udev = udev;
 
+   /*
+* Claim this hub port.
+* It doesn't matter what value we pass as owner
+* (struct dev_state) as long as it is unique.
+*/
+   rc = usb_hub_claim_port(udev-parent, udev-portnum,
+   (struct dev_state *) udev);
+   if (rc) {
+   dev_dbg(udev-dev, unable to claim port\n);
+   return rc;
+   }
+
err = stub_add_files(udev-dev);
if (err) {
dev_err(udev-dev, stub_add_files for %s\n, udev_busid);
@@ -424,6 +437,7 @@ static void stub_disconnect(struct usb_device *udev)
struct stub_device *sdev;
const char *udev_busid = dev_name(udev-dev);
struct bus_id_priv *busid_priv;
+   int rc;
 
dev_dbg(udev-dev, Enter\n);
 
@@ -448,6 +462,14 @@ static void stub_disconnect(struct usb_device *udev)
 */
stub_remove_files(udev-dev);
 
+   /* release port */
+   rc = usb_hub_release_port(udev-parent, udev-portnum,
+ (struct dev_state *) udev);
+   if (rc) {
+   dev_dbg(udev-dev, unable to release port\n);
+   return;
+   }
+
/* If usb reset is called from event handler */
if (busid_priv-sdev-ud.eh == current)
return;
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 64ea219..e484933 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -1819,6 +1819,7 @@ int usb_hub_claim_port(struct usb_device *hdev, unsigned 
port1,
*powner = owner;
return rc;
 }
+EXPORT_SYMBOL_GPL(usb_hub_claim_port);
 
 int usb_hub_release_port(struct usb_device *hdev, unsigned port1,
 struct dev_state *owner)
@@ -1834,6 +1835,7 @@ int usb_hub_release_port(struct usb_device *hdev, 
unsigned port1,
*powner = NULL;
return rc;
 }
+EXPORT_SYMBOL_GPL(usb_hub_release_port);
 
 void usb_hub_release_all_ports(struct usb_device *hdev, struct dev_state 
*owner)
 {
diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h
index 8238577..222bbd2 100644
--- a/drivers/usb/core/usb.h
+++ b/drivers/usb/core/usb.h
@@ -57,10 +57,6 @@ extern int usb_match_device(struct usb_device *dev,
 extern void usb_forced_unbind_intf(struct usb_interface *intf);
 extern void usb_rebind_intf(struct usb_interface *intf);
 
-extern int usb_hub_claim_port(struct usb_device *hdev, unsigned port,
-   struct dev_state *owner);
-extern int usb_hub_release_port(struct usb_device *hdev, unsigned port,
-   struct dev_state *owner);
 extern void usb_hub_release_all_ports(struct usb_device *hdev,
struct dev_state *owner);
 extern bool usb_device_is_owned(struct usb_device *udev);
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 22de4af..140a6a3 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -366,6 +366,8 @@ struct usb_bus {
 #endif
 };
 
+struct dev_state;
+
 /* --- */
 
 struct usb_tt;
@@ -749,6 +751,11 @@ extern struct usb_host_interface *usb_find_alt_setting(
unsigned int iface_num,
unsigned int alt_num);
 
+/* port claiming functions */
+int usb_hub_claim_port(struct usb_device *hdev, unsigned port1,
+   struct dev_state *owner);
+int usb_hub_release_port(struct usb_device *hdev, unsigned port1,
+   struct dev_state *owner);
 
 /**
  * usb_make_path - returns stable device path in the usb tree
-- 
1.8.1.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 14/18] staging: usbip: let client choose device configuration

2014-03-08 Thread Valentina Manea
Since usbip-host is now a device driver and the client
has full access to the shared device, it makes sense to
let the client choose device configuration.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 drivers/staging/usbip/stub_dev.c | 10 +-
 drivers/staging/usbip/stub_rx.c  | 26 +++---
 2 files changed, 8 insertions(+), 28 deletions(-)

diff --git a/drivers/staging/usbip/stub_dev.c b/drivers/staging/usbip/stub_dev.c
index 60a3e3f..1bd13cf 100644
--- a/drivers/staging/usbip/stub_dev.c
+++ b/drivers/staging/usbip/stub_dev.c
@@ -337,7 +337,7 @@ static int stub_probe(struct usb_device *udev)
 {
struct stub_device *sdev = NULL;
const char *udev_busid = dev_name(udev-dev);
-   int err = 0, config;
+   int err = 0;
struct bus_id_priv *busid_priv;
 
dev_dbg(udev-dev, Enter\n);
@@ -383,14 +383,6 @@ static int stub_probe(struct usb_device *udev)
 
busid_priv-shutdown_busid = 0;
 
-   config = usb_choose_configuration(udev);
-   if (config = 0) {
-   err = usb_set_configuration(udev, config);
-   if (err  err != -ENODEV)
-   dev_err(udev-dev, can't set config #%d, error %d\n,
-   config, err);
-   }
-
/* set private data to usb_device */
dev_set_drvdata(udev-dev, sdev);
busid_priv-sdev = sdev;
diff --git a/drivers/staging/usbip/stub_rx.c b/drivers/staging/usbip/stub_rx.c
index 76e44d9..e0b6d6b 100644
--- a/drivers/staging/usbip/stub_rx.c
+++ b/drivers/staging/usbip/stub_rx.c
@@ -142,31 +142,19 @@ static int tweak_set_interface_cmd(struct urb *urb)
 
 static int tweak_set_configuration_cmd(struct urb *urb)
 {
+   struct stub_priv *priv = (struct stub_priv *) urb-context;
+   struct stub_device *sdev = priv-sdev;
struct usb_ctrlrequest *req;
__u16 config;
+   int err;
 
req = (struct usb_ctrlrequest *) urb-setup_packet;
config = le16_to_cpu(req-wValue);
 
-   /*
-* I have never seen a multi-config device. Very rare.
-* For most devices, this will be called to choose a default
-* configuration only once in an initialization phase.
-*
-* set_configuration may change a device configuration and its device
-* drivers will be unbound and assigned for a new device configuration.
-* This means this usbip driver will be also unbound when called, then
-* eventually reassigned to the device as far as driver matching
-* condition is kept.
-*
-* Unfortunately, an existing usbip connection will be dropped
-* due to this driver unbinding. So, skip here.
-* A user may need to set a special configuration value before
-* exporting the device.
-*/
-   dev_info(urb-dev-dev, usb_set_configuration %d to %s... skip!\n,
-config, dev_name(urb-dev-dev));
-
+   err = usb_set_configuration(sdev-udev, config);
+   if (err  err != -ENODEV)
+   dev_err(sdev-udev-dev, can't set config #%d, error %d\n,
+   config, err);
return 0;
 }
 
-- 
1.8.1.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 12/18] staging: usbip: userspace: update dependencies in README

2014-03-08 Thread Valentina Manea
Add libudev as dependency and remove libsysfs.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 drivers/staging/usbip/userspace/README | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/usbip/userspace/README 
b/drivers/staging/usbip/userspace/README
index 00a1658..6ead290 100644
--- a/drivers/staging/usbip/userspace/README
+++ b/drivers/staging/usbip/userspace/README
@@ -9,8 +9,8 @@
 - USB/IP device drivers
Found in the staging directory of the Linux kernel.
 
-- sysfsutils = 2.0.0
-   sysfsutils library
+- libudev = 2.0
+   libudev library
 
 - libwrap0-dev
tcp wrapper library
-- 
1.8.1.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 11/18] staging: usbip: userspace: remove libsysfs flag and autoconf check

2014-03-08 Thread Valentina Manea
libsysfs is now completely removed from USB/IP.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 drivers/staging/usbip/userspace/configure.ac | 6 --
 1 file changed, 6 deletions(-)

diff --git a/drivers/staging/usbip/userspace/configure.ac 
b/drivers/staging/usbip/userspace/configure.ac
index a5193c6..25bf160 100644
--- a/drivers/staging/usbip/userspace/configure.ac
+++ b/drivers/staging/usbip/userspace/configure.ac
@@ -44,12 +44,6 @@ AC_FUNC_REALLOC
 AC_CHECK_FUNCS([memset mkdir regcomp socket strchr strerror strstr dnl
strtoul])
 
-AC_CHECK_HEADER([sysfs/libsysfs.h],
-   [AC_CHECK_LIB([sysfs], [sysfs_open_directory_list],
- [LIBS=$LIBS -lsysfs],
- [AC_MSG_ERROR([Missing sysfs2 library!])])],
-   [AC_MSG_ERROR([Missing /usr/include/sysfs/libsysfs.h])])
-
 AC_CHECK_HEADER([libudev.h],
[AC_CHECK_LIB([udev], [udev_new],
  [LIBS=$LIBS -ludev],
-- 
1.8.1.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 07/18] staging: usbip: userspace: move sysfs_utils to libsrc

2014-03-08 Thread Valentina Manea
Since it offers a API to both usbip tools and libusbip,
it is more appropriate to be place in the library.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 drivers/staging/usbip/userspace/libsrc/Makefile.am |  3 ++-
 .../staging/usbip/userspace/libsrc/sysfs_utils.c   | 31 ++
 .../staging/usbip/userspace/libsrc/sysfs_utils.h   |  8 ++
 drivers/staging/usbip/userspace/src/Makefile.am|  4 +--
 drivers/staging/usbip/userspace/src/sysfs_utils.c  | 31 --
 drivers/staging/usbip/userspace/src/sysfs_utils.h  |  8 --
 6 files changed, 42 insertions(+), 43 deletions(-)
 create mode 100644 drivers/staging/usbip/userspace/libsrc/sysfs_utils.c
 create mode 100644 drivers/staging/usbip/userspace/libsrc/sysfs_utils.h
 delete mode 100644 drivers/staging/usbip/userspace/src/sysfs_utils.c
 delete mode 100644 drivers/staging/usbip/userspace/src/sysfs_utils.h

diff --git a/drivers/staging/usbip/userspace/libsrc/Makefile.am 
b/drivers/staging/usbip/userspace/libsrc/Makefile.am
index 4921189..7c8f8a4 100644
--- a/drivers/staging/usbip/userspace/libsrc/Makefile.am
+++ b/drivers/staging/usbip/userspace/libsrc/Makefile.am
@@ -4,4 +4,5 @@ libusbip_la_LDFLAGS  = -version-info @LIBUSBIP_VERSION@
 
 lib_LTLIBRARIES := libusbip.la
 libusbip_la_SOURCES := names.c names.h usbip_host_driver.c usbip_host_driver.h 
\
-  usbip_common.c usbip_common.h vhci_driver.c vhci_driver.h
+  usbip_common.c usbip_common.h vhci_driver.c 
vhci_driver.h \
+  sysfs_utils.c sysfs_utils.h
diff --git a/drivers/staging/usbip/userspace/libsrc/sysfs_utils.c 
b/drivers/staging/usbip/userspace/libsrc/sysfs_utils.c
new file mode 100644
index 000..36ac88e
--- /dev/null
+++ b/drivers/staging/usbip/userspace/libsrc/sysfs_utils.c
@@ -0,0 +1,31 @@
+#include sys/types.h
+#include sys/stat.h
+#include fcntl.h
+#include errno.h
+
+#include sysfs_utils.h
+#include usbip_common.h
+
+int write_sysfs_attribute(const char *attr_path, const char *new_value,
+ size_t len)
+{
+   int fd;
+   int length;
+
+   fd = open(attr_path, O_WRONLY);
+   if (fd  0) {
+   dbg(error opening attribute %s, attr_path);
+   return -1;
+   }
+
+   length = write(fd, new_value, len);
+   if (length  0) {
+   dbg(error writing to attribute %s, attr_path);
+   close(fd);
+   return -1;
+   }
+
+   close(fd);
+
+   return 0;
+}
diff --git a/drivers/staging/usbip/userspace/libsrc/sysfs_utils.h 
b/drivers/staging/usbip/userspace/libsrc/sysfs_utils.h
new file mode 100644
index 000..32ac1d1
--- /dev/null
+++ b/drivers/staging/usbip/userspace/libsrc/sysfs_utils.h
@@ -0,0 +1,8 @@
+
+#ifndef __SYSFS_UTILS_H
+#define __SYSFS_UTILS_H
+
+int write_sysfs_attribute(const char *attr_path, const char *new_value,
+ size_t len);
+
+#endif
diff --git a/drivers/staging/usbip/userspace/src/Makefile.am 
b/drivers/staging/usbip/userspace/src/Makefile.am
index 6c91bcb..e81a4eb 100644
--- a/drivers/staging/usbip/userspace/src/Makefile.am
+++ b/drivers/staging/usbip/userspace/src/Makefile.am
@@ -6,8 +6,6 @@ sbin_PROGRAMS := usbip usbipd
 
 usbip_SOURCES := usbip.h utils.h usbip.c utils.c usbip_network.c \
 usbip_attach.c usbip_detach.c usbip_list.c \
-usbip_bind.c usbip_unbind.c usbip_port.c \
-sysfs_utils.c
-
+usbip_bind.c usbip_unbind.c usbip_port.c
 
 usbipd_SOURCES := usbip_network.h usbipd.c usbip_network.c
diff --git a/drivers/staging/usbip/userspace/src/sysfs_utils.c 
b/drivers/staging/usbip/userspace/src/sysfs_utils.c
deleted file mode 100644
index 36ac88e..000
--- a/drivers/staging/usbip/userspace/src/sysfs_utils.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include sys/types.h
-#include sys/stat.h
-#include fcntl.h
-#include errno.h
-
-#include sysfs_utils.h
-#include usbip_common.h
-
-int write_sysfs_attribute(const char *attr_path, const char *new_value,
- size_t len)
-{
-   int fd;
-   int length;
-
-   fd = open(attr_path, O_WRONLY);
-   if (fd  0) {
-   dbg(error opening attribute %s, attr_path);
-   return -1;
-   }
-
-   length = write(fd, new_value, len);
-   if (length  0) {
-   dbg(error writing to attribute %s, attr_path);
-   close(fd);
-   return -1;
-   }
-
-   close(fd);
-
-   return 0;
-}
diff --git a/drivers/staging/usbip/userspace/src/sysfs_utils.h 
b/drivers/staging/usbip/userspace/src/sysfs_utils.h
deleted file mode 100644
index 32ac1d1..000
--- a/drivers/staging/usbip/userspace/src/sysfs_utils.h
+++ /dev/null
@@ -1,8 +0,0 @@
-
-#ifndef __SYSFS_UTILS_H
-#define __SYSFS_UTILS_H
-
-int write_sysfs_attribute(const char *attr_path, const char *new_value,
- size_t len);
-
-#endif
-- 
1.8.1.2

--
To unsubscribe from 

[PATCH 05/18] staging: usbip: userspace: re-add interface information listing

2014-03-08 Thread Valentina Manea
This was deleted in the driver conversion patch. It didn't need
to be deleted; showing more information is ok.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
Reviewed-by: Shuah Khan shuah...@samsung.com
---
 drivers/staging/usbip/userspace/src/usbip_list.c | 20 +++-
 drivers/staging/usbip/userspace/src/usbipd.c | 16 +++-
 2 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/usbip/userspace/src/usbip_list.c 
b/drivers/staging/usbip/userspace/src/usbip_list.c
index 54178b7..d5ce34a 100644
--- a/drivers/staging/usbip/userspace/src/usbip_list.c
+++ b/drivers/staging/usbip/userspace/src/usbip_list.c
@@ -52,8 +52,9 @@ static int get_exported_devices(char *host, int sockfd)
struct op_devlist_reply reply;
uint16_t code = OP_REP_DEVLIST;
struct usbip_usb_device udev;
+   struct usbip_usb_interface uintf;
unsigned int i;
-   int rc;
+   int rc, j;
 
rc = usbip_net_send_op_common(sockfd, OP_REQ_DEVLIST, 0);
if (rc  0) {
@@ -103,6 +104,23 @@ static int get_exported_devices(char *host, int sockfd)
printf(%11s: %s\n, , udev.path);
printf(%11s: %s\n, , class_name);
 
+   for (j = 0; j  udev.bNumInterfaces; j++) {
+   rc = usbip_net_recv(sockfd, uintf, sizeof(uintf));
+   if (rc  0) {
+   err(usbip_net_recv failed: usbip_usb_intf[%d],
+   j);
+
+   return -1;
+   }
+   usbip_net_pack_usb_interface(0, uintf);
+
+   usbip_names_get_class(class_name, sizeof(class_name),
+   uintf.bInterfaceClass,
+   uintf.bInterfaceSubClass,
+   uintf.bInterfaceProtocol);
+   printf(%11s: %2d - %s\n, , j, class_name);
+   }
+
printf(\n);
}
 
diff --git a/drivers/staging/usbip/userspace/src/usbipd.c 
b/drivers/staging/usbip/userspace/src/usbipd.c
index c2b3ced..771d6c2 100644
--- a/drivers/staging/usbip/userspace/src/usbipd.c
+++ b/drivers/staging/usbip/userspace/src/usbipd.c
@@ -159,8 +159,9 @@ static int send_reply_devlist(int connfd)
 {
struct usbip_exported_device *edev;
struct usbip_usb_device pdu_udev;
+   struct usbip_usb_interface pdu_uinf;
struct op_devlist_reply reply;
-   int rc;
+   int rc, i;
 
reply.ndev = 0;
/* number of exported devices */
@@ -194,6 +195,19 @@ static int send_reply_devlist(int connfd)
dbg(usbip_net_send failed: pdu_udev);
return -1;
}
+
+   for (i = 0; i  edev-udev.bNumInterfaces; i++) {
+   dump_usb_interface(edev-uinf[i]);
+   memcpy(pdu_uinf, edev-uinf[i], sizeof(pdu_uinf));
+   usbip_net_pack_usb_interface(1, pdu_uinf);
+
+   rc = usbip_net_send(connfd, pdu_uinf,
+   sizeof(pdu_uinf));
+   if (rc  0) {
+   err(usbip_net_send failed: pdu_uinf);
+   return -1;
+   }
+   }
}
 
return 0;
-- 
1.8.1.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 08/18] staging: usbip: userspace: migrate usbip_host_driver to libudev

2014-03-08 Thread Valentina Manea
This patch modifies usbip_host_driver to use libudev.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
Reviewed-by: Shuah Khan shuah...@samsung.com
---
 .../staging/usbip/userspace/libsrc/usbip_common.c  |  76 ++
 .../staging/usbip/userspace/libsrc/usbip_common.h  |   5 +-
 .../usbip/userspace/libsrc/usbip_host_driver.c | 285 ++---
 .../usbip/userspace/libsrc/usbip_host_driver.h |   7 +-
 .../staging/usbip/userspace/libsrc/vhci_driver.c   |  22 +-
 drivers/staging/usbip/userspace/src/usbipd.c   |  14 +-
 6 files changed, 145 insertions(+), 264 deletions(-)

diff --git a/drivers/staging/usbip/userspace/libsrc/usbip_common.c 
b/drivers/staging/usbip/userspace/libsrc/usbip_common.c
index 6620d18..998c11c 100644
--- a/drivers/staging/usbip/userspace/libsrc/usbip_common.c
+++ b/drivers/staging/usbip/userspace/libsrc/usbip_common.c
@@ -2,6 +2,7 @@
  * Copyright (C) 2005-2007 Takahiro Hirofuchi
  */
 
+#include libudev.h
 #include usbip_common.h
 #include names.h
 
@@ -12,6 +13,8 @@ int usbip_use_syslog;
 int usbip_use_stderr;
 int usbip_use_debug;
 
+extern struct udev *udev_context;
+
 struct speed_string {
int num;
char *speed;
@@ -111,75 +114,48 @@ void dump_usb_device(struct usbip_usb_device *udev)
 }
 
 
-int read_attr_value(struct sysfs_device *dev, const char *name,
+int read_attr_value(struct udev_device *dev, const char *name,
const char *format)
 {
-   char attrpath[SYSFS_PATH_MAX];
-   struct sysfs_attribute *attr;
+   const char *attr;
int num = 0;
int ret;
 
-   snprintf(attrpath, sizeof(attrpath), %s/%s, dev-path, name);
-
-   attr = sysfs_open_attribute(attrpath);
+   attr = udev_device_get_sysattr_value(dev, name);
if (!attr) {
-   dbg(sysfs_open_attribute failed: %s, attrpath);
-   return 0;
-   }
-
-   ret = sysfs_read_attribute(attr);
-   if (ret  0) {
-   dbg(sysfs_read_attribute failed);
+   err(udev_device_get_sysattr_value failed);
goto err;
}
 
-   ret = sscanf(attr-value, format, num);
+   ret = sscanf(attr, format, num);
if (ret  1) {
-   dbg(sscanf failed);
+   err(sscanf failed);
goto err;
}
 
 err:
-   sysfs_close_attribute(attr);
 
return num;
 }
 
 
-int read_attr_speed(struct sysfs_device *dev)
+int read_attr_speed(struct udev_device *dev)
 {
-   char attrpath[SYSFS_PATH_MAX];
-   struct sysfs_attribute *attr;
-   char speed[100];
-   int ret;
-
-   snprintf(attrpath, sizeof(attrpath), %s/%s, dev-path, speed);
-
-   attr = sysfs_open_attribute(attrpath);
-   if (!attr) {
-   dbg(sysfs_open_attribute failed: %s, attrpath);
-   return 0;
-   }
+   const char *speed;
 
-   ret = sysfs_read_attribute(attr);
-   if (ret  0) {
-   dbg(sysfs_read_attribute failed);
+   speed = udev_device_get_sysattr_value(dev, speed);
+   if (!speed) {
+   err(udev_device_get_sysattr_value failed);
goto err;
}
 
-   ret = sscanf(attr-value, %99s\n, speed);
-   if (ret  1) {
-   dbg(sscanf failed);
-   goto err;
-   }
-err:
-   sysfs_close_attribute(attr);
-
for (int i = 0; speed_strings[i].speed != NULL; i++) {
if (!strcmp(speed, speed_strings[i].speed))
return speed_strings[i].num;
}
 
+err:
+
return USB_SPEED_UNKNOWN;
 }
 
@@ -190,9 +166,10 @@ err:
} while (0)
 
 
-int read_usb_device(struct sysfs_device *sdev, struct usbip_usb_device *udev)
+int read_usb_device(struct udev_device *sdev, struct usbip_usb_device *udev)
 {
uint32_t busnum, devnum;
+   const char *path, *name;
 
READ_ATTR(udev, uint8_t,  sdev, bDeviceClass,   %02x\n);
READ_ATTR(udev, uint8_t,  sdev, bDeviceSubClass,%02x\n);
@@ -209,10 +186,13 @@ int read_usb_device(struct sysfs_device *sdev, struct 
usbip_usb_device *udev)
READ_ATTR(udev, uint8_t,  sdev, devnum, %d\n);
udev-speed = read_attr_speed(sdev);
 
-   strncpy(udev-path,  sdev-path,  SYSFS_PATH_MAX);
-   strncpy(udev-busid, sdev-name, SYSFS_BUS_ID_SIZE);
+   path = udev_device_get_syspath(sdev);
+   name = udev_device_get_sysname(sdev);
 
-   sscanf(sdev-name, %u-%u, busnum, devnum);
+   strncpy(udev-path,  path,  SYSFS_PATH_MAX);
+   strncpy(udev-busid, name, SYSFS_BUS_ID_SIZE);
+
+   sscanf(name, %u-%u, busnum, devnum);
udev-busnum = busnum;
 
return 0;
@@ -222,13 +202,13 @@ int read_usb_interface(struct usbip_usb_device *udev, int 
i,
   struct usbip_usb_interface *uinf)
 {
char busid[SYSFS_BUS_ID_SIZE];
-   struct sysfs_device *sif;
+   struct udev_device *sif;
 
sprintf(busid, %s:%d.%d, 

[PATCH 10/18] staging: usbip: userspace: migrate vhci_driver to libudev

2014-03-08 Thread Valentina Manea
This patch migrates vhci_driver to libudev.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
Reviewed-by: Shuah Khan shuah...@samsung.com
---
 .../staging/usbip/userspace/libsrc/usbip_common.h  |   1 -
 .../staging/usbip/userspace/libsrc/vhci_driver.c   | 154 ++---
 .../staging/usbip/userspace/libsrc/vhci_driver.h   |   5 +-
 3 files changed, 44 insertions(+), 116 deletions(-)

diff --git a/drivers/staging/usbip/userspace/libsrc/usbip_common.h 
b/drivers/staging/usbip/userspace/libsrc/usbip_common.h
index ed9b43b..23be848 100644
--- a/drivers/staging/usbip/userspace/libsrc/usbip_common.h
+++ b/drivers/staging/usbip/userspace/libsrc/usbip_common.h
@@ -5,7 +5,6 @@
 #ifndef __USBIP_COMMON_H
 #define __USBIP_COMMON_H
 
-#include sysfs/libsysfs.h
 #include libudev.h
 
 #include stdint.h
diff --git a/drivers/staging/usbip/userspace/libsrc/vhci_driver.c 
b/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
index fa68bed..8901fcb 100644
--- a/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
+++ b/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
@@ -7,6 +7,7 @@
 #include limits.h
 #include netdb.h
 #include libudev.h
+#include sysfs_utils.h
 
 #undef  PROGNAME
 #define PROGNAME libusbip
@@ -36,7 +37,7 @@ err:
 
 
 
-static int parse_status(char *value)
+static int parse_status(const char *value)
 {
int ret = 0;
char *c;
@@ -108,42 +109,33 @@ static int parse_status(char *value)
 
 static int refresh_imported_device_list(void)
 {
-   struct sysfs_attribute *attr_status;
+   const char *attr_status;
 
-
-   attr_status = sysfs_get_device_attr(vhci_driver-hc_device, status);
+   attr_status = udev_device_get_sysattr_value(vhci_driver-hc_device,
+  status);
if (!attr_status) {
-   dbg(sysfs_get_device_attr(\status\) failed: %s,
-   vhci_driver-hc_device-name);
+   err(udev_device_get_sysattr_value failed);
return -1;
}
 
-   dbg(name: %s  path: %s  len: %d  method: %d  value: %s,
-   attr_status-name, attr_status-path, attr_status-len,
-   attr_status-method, attr_status-value);
-
-   return parse_status(attr_status-value);
+   return parse_status(attr_status);
 }
 
 static int get_nports(void)
 {
char *c;
int nports = 0;
-   struct sysfs_attribute *attr_status;
+   const char *attr_status;
 
-   attr_status = sysfs_get_device_attr(vhci_driver-hc_device, status);
+   attr_status = udev_device_get_sysattr_value(vhci_driver-hc_device,
+  status);
if (!attr_status) {
-   dbg(sysfs_get_device_attr(\status\) failed: %s,
-   vhci_driver-hc_device-name);
+   err(udev_device_get_sysattr_value failed);
return -1;
}
 
-   dbg(name: %s  path: %s  len: %d  method: %d  value: %s,
-   attr_status-name, attr_status-path, attr_status-len,
-   attr_status-method, attr_status-value);
-
/* skip a header line */
-   c = strchr(attr_status-value, '\n');
+   c = strchr(attr_status, '\n');
if (!c)
return 0;
c++;
@@ -160,50 +152,6 @@ static int get_nports(void)
return nports;
 }
 
-static int get_hc_busid(char *sysfs_mntpath, char *hc_busid)
-{
-   struct sysfs_driver *sdriver;
-   char sdriver_path[SYSFS_PATH_MAX];
-
-   struct sysfs_device *hc_dev;
-   struct dlist *hc_devs;
-
-   int found = 0;
-
-   snprintf(sdriver_path, SYSFS_PATH_MAX, %s/%s/%s/%s/%s, sysfs_mntpath,
-   SYSFS_BUS_NAME, USBIP_VHCI_BUS_TYPE, SYSFS_DRIVERS_NAME,
-   USBIP_VHCI_DRV_NAME);
-
-   sdriver = sysfs_open_driver_path(sdriver_path);
-   if (!sdriver) {
-   dbg(sysfs_open_driver_path failed: %s, sdriver_path);
-   dbg(make sure  USBIP_CORE_MOD_NAME .ko and 
-   USBIP_VHCI_DRV_NAME .ko are loaded!);
-   return -1;
-   }
-
-   hc_devs = sysfs_get_driver_devices(sdriver);
-   if (!hc_devs) {
-   dbg(sysfs_get_driver failed);
-   goto err;
-   }
-
-   /* assume only one vhci_hcd */
-   dlist_for_each_data(hc_devs, hc_dev, struct sysfs_device) {
-   strncpy(hc_busid, hc_dev-bus_id, SYSFS_BUS_ID_SIZE);
-   found = 1;
-   }
-
-err:
-   sysfs_close_driver(sdriver);
-
-   if (found)
-   return 0;
-
-   dbg(%s not found, hc_busid);
-   return -1;
-}
-
 /*
  * Read the given port's record.
  *
@@ -215,7 +163,6 @@ err:
  */
 static int read_record(int rhport, char *host, unsigned long host_len,
char *port, unsigned long port_len, char *busid)
-
 {
int part;
FILE *file;
@@ -272,36 +219,21 @@ static int read_record(int rhport, char *host, unsigned 
long host_len,
 
 int usbip_vhci_driver_open(void)
 {
-   int ret;
-   

[PATCH 03/18] staging: usbip: userspace: migrate usbip_unbind to libudev

2014-03-08 Thread Valentina Manea
This patch modifies usbip_unbind to use libudev.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
Reviewed-by: Shuah Khan shuah...@samsung.com
---
 drivers/staging/usbip/userspace/src/usbip_unbind.c | 93 +++---
 1 file changed, 29 insertions(+), 64 deletions(-)

diff --git a/drivers/staging/usbip/userspace/src/usbip_unbind.c 
b/drivers/staging/usbip/userspace/src/usbip_unbind.c
index cace878..7180dbe 100644
--- a/drivers/staging/usbip/userspace/src/usbip_unbind.c
+++ b/drivers/staging/usbip/userspace/src/usbip_unbind.c
@@ -16,7 +16,7 @@
  * along with this program. If not, see http://www.gnu.org/licenses/.
  */
 
-#include sysfs/libsysfs.h
+#include libudev.h
 
 #include errno.h
 #include stdio.h
@@ -27,6 +27,7 @@
 #include usbip_common.h
 #include utils.h
 #include usbip.h
+#include sysfs_utils.h
 
 static const char usbip_unbind_usage_string[] =
usbip unbind args\n
@@ -41,92 +42,56 @@ void usbip_unbind_usage(void)
 static int unbind_device(char *busid)
 {
char bus_type[] = usb;
-   struct sysfs_driver *usbip_host_drv;
-   struct sysfs_device *dev;
-   struct dlist *devlist;
-   int verified = 0;
int rc, ret = -1;
 
char attr_name[] = unbind;
-   char sysfs_mntpath[SYSFS_PATH_MAX];
char unbind_attr_path[SYSFS_PATH_MAX];
-   struct sysfs_attribute *unbind_attr;
-
-   /* verify the busid device is using usbip-host */
-   usbip_host_drv = sysfs_open_driver(bus_type, USBIP_HOST_DRV_NAME);
-   if (!usbip_host_drv) {
-   err(could not open %s driver: %s, USBIP_HOST_DRV_NAME,
-   strerror(errno));
-   return -1;
-   }
 
-   devlist = sysfs_get_driver_devices(usbip_host_drv);
-   if (!devlist) {
-   err(%s is not in use by any devices, USBIP_HOST_DRV_NAME);
-   goto err_close_usbip_host_drv;
-   }
+   struct udev *udev;
+   struct udev_device *dev;
+   const char *driver;
 
-   dlist_for_each_data(devlist, dev, struct sysfs_device) {
-   if (!strncmp(busid, dev-name, strlen(busid)) 
-   !strncmp(dev-driver_name, USBIP_HOST_DRV_NAME,
-strlen(USBIP_HOST_DRV_NAME))) {
-   verified = 1;
-   break;
-   }
-   }
+   /* Create libudev context. */
+   udev = udev_new();
 
-   if (!verified) {
-   err(device on busid %s is not using %s, busid,
-   USBIP_HOST_DRV_NAME);
-   goto err_close_usbip_host_drv;
+   /* Check whether the device with this bus ID exists. */
+   dev = udev_device_new_from_subsystem_sysname(udev, usb, busid);
+   if (!dev) {
+   err(device with the specified bus ID does not exist);
+   goto err_close_udev;
}
 
-   /*
-* NOTE: A read and write of an attribute value of the device busid
-* refers to must be done to start probing. That way a rebind of the
-* default driver for the device occurs.
-*
-* This seems very hackish and adds a lot of pointless code. I think it
-* should be done in the kernel by the driver after del_match_busid is
-* finished!
-*/
-
-   rc = sysfs_get_mnt_path(sysfs_mntpath, SYSFS_PATH_MAX);
-   if (rc  0) {
-   err(sysfs must be mounted: %s, strerror(errno));
-   return -1;
+   /* Check whether the device is using usbip-host driver. */
+   driver = udev_device_get_driver(dev);
+   if (!driver || strcmp(driver, usbip-host)) {
+   err(device is not bound to usbip-host driver);
+   goto err_close_udev;
}
 
+   /* Unbind device from driver. */
snprintf(unbind_attr_path, sizeof(unbind_attr_path), 
%s/%s/%s/%s/%s/%s,
-sysfs_mntpath, SYSFS_BUS_NAME, bus_type, SYSFS_DRIVERS_NAME,
+SYSFS_MNT_PATH, SYSFS_BUS_NAME, bus_type, SYSFS_DRIVERS_NAME,
 USBIP_HOST_DRV_NAME, attr_name);
 
-   /* read a device attribute */
-   unbind_attr = sysfs_open_attribute(unbind_attr_path);
-   if (!unbind_attr) {
-   err(could not open %s/%s: %s, busid, attr_name,
-   strerror(errno));
-   return -1;
+   rc = write_sysfs_attribute(unbind_attr_path, busid, strlen(busid));
+   if (rc  0) {
+   err(error unbinding device %s from driver, busid);
+   goto err_close_udev;
}
 
-   /* notify driver of unbind */
+   /* Notify driver of unbind. */
rc = modify_match_busid(busid, 0);
if (rc  0) {
err(unable to unbind device on %s, busid);
+   goto err_close_udev;
}
 
-   rc = sysfs_write_attribute(unbind_attr, busid,
-  SYSFS_BUS_ID_SIZE);
-   if (rc  0) {
-   dbg(bind driver at %s failed, busid);
-  

[PATCH 09/18] staging: usbip: userspace: remove class device infrastructure in vhci_driver

2014-03-08 Thread Valentina Manea
The class device lists were used only when being initialized,
being populated and being destroyed. They had no real meaning
and thus the code was useless.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 .../staging/usbip/userspace/libsrc/vhci_driver.c   | 178 -
 .../staging/usbip/userspace/libsrc/vhci_driver.h   |   9 --
 2 files changed, 187 deletions(-)

diff --git a/drivers/staging/usbip/userspace/libsrc/vhci_driver.c 
b/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
index acdcb13..fa68bed 100644
--- a/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
+++ b/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
@@ -28,26 +28,6 @@ imported_device_init(struct usbip_imported_device *idev, 
char *busid)
read_usb_device(sudev, idev-udev);
udev_device_unref(sudev);
 
-   /* add class devices of this imported device */
-   struct usbip_class_device *cdev;
-   dlist_for_each_data(vhci_driver-cdev_list, cdev,
-   struct usbip_class_device) {
-   if (!strncmp(cdev-dev_path, idev-udev.path,
-strlen(idev-udev.path))) {
-   struct usbip_class_device *new_cdev;
-   /*
-* alloc and copy because dlist is linked
-* from only one list
-*/
-   new_cdev = calloc(1, sizeof(*new_cdev));
-   if (!new_cdev)
-   goto err;
-
-   memcpy(new_cdev, cdev, sizeof(*new_cdev));
-   dlist_unshift(idev-cdev_list, (void *) new_cdev);
-   }
-   }
-
return idev;
 
 err:
@@ -103,12 +83,6 @@ static int parse_status(char *value)
idev-busnum= (devid  16);
idev-devnum= (devid  0x);
 
-   idev-cdev_list = dlist_new(sizeof(struct 
usbip_class_device));
-   if (!idev-cdev_list) {
-   dbg(dlist_new failed);
-   return -1;
-   }
-
if (idev-status != VDEV_ST_NULL
 idev-status != VDEV_ST_NOTASSIGNED) {
idev = imported_device_init(idev, lbusid);
@@ -132,118 +106,6 @@ static int parse_status(char *value)
return 0;
 }
 
-
-static int check_usbip_device(struct sysfs_class_device *cdev)
-{
-   /* /sys/class/video4linux/video0/device */
-   char class_path[SYSFS_PATH_MAX];
-   /* /sys/devices/platform/vhci_hcd/usb6/6-1:1.1 */
-   char dev_path[SYSFS_PATH_MAX];
-   int ret;
-   struct usbip_class_device *usbip_cdev;
-
-   snprintf(class_path, sizeof(class_path), %s/device, cdev-path);
-
-   ret = sysfs_get_link(class_path, dev_path, sizeof(dev_path));
-   if (ret == 0) {
-   if (!strncmp(dev_path, vhci_driver-hc_device-path,
-strlen(vhci_driver-hc_device-path))) {
-   /* found usbip device */
-   usbip_cdev = calloc(1, sizeof(*usbip_cdev));
-   if (!usbip_cdev) {
-   dbg(calloc failed);
-   return -1;
-   }
-   dlist_unshift(vhci_driver-cdev_list, usbip_cdev);
-   strncpy(usbip_cdev-class_path, class_path,
-   sizeof(usbip_cdev-class_path));
-   strncpy(usbip_cdev-dev_path, dev_path,
-   sizeof(usbip_cdev-dev_path));
-   dbg(found: %s %s, class_path, dev_path);
-   }
-   }
-
-   return 0;
-}
-
-
-static int search_class_for_usbip_device(char *cname)
-{
-   struct sysfs_class *class;
-   struct dlist *cdev_list;
-   struct sysfs_class_device *cdev;
-   int ret = 0;
-
-   class = sysfs_open_class(cname);
-   if (!class) {
-   dbg(sysfs_open_class failed);
-   return -1;
-   }
-
-   dbg(class: %s, class-name);
-
-   cdev_list = sysfs_get_class_devices(class);
-   if (!cdev_list)
-   /* nothing */
-   goto out;
-
-   dlist_for_each_data(cdev_list, cdev, struct sysfs_class_device) {
-   dbg(cdev: %s, cdev-name);
-   ret = check_usbip_device(cdev);
-   if (ret  0)
-   goto out;
-   }
-
-out:
-   sysfs_close_class(class);
-
-   return ret;
-}
-
-
-static int refresh_class_device_list(void)
-{
-   int ret;
-   struct dlist *cname_list;
-   char *cname;
-   char sysfs_mntpath[SYSFS_PATH_MAX];
-   char class_path[SYSFS_PATH_MAX];
-
-   ret = sysfs_get_mnt_path(sysfs_mntpath, SYSFS_PATH_MAX);
-   if (ret  0) {
-   dbg(sysfs_get_mnt_path failed);
-   return -1;

[PATCH 06/18] staging: usbip: userspace: add new list API

2014-03-08 Thread Valentina Manea
Take the linked list implementation from the Linux Kernel
and strip it down to what it is needed.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 drivers/staging/usbip/userspace/libsrc/list.h | 136 ++
 1 file changed, 136 insertions(+)
 create mode 100644 drivers/staging/usbip/userspace/libsrc/list.h

diff --git a/drivers/staging/usbip/userspace/libsrc/list.h 
b/drivers/staging/usbip/userspace/libsrc/list.h
new file mode 100644
index 000..8d0c936
--- /dev/null
+++ b/drivers/staging/usbip/userspace/libsrc/list.h
@@ -0,0 +1,136 @@
+#ifndef _LIST_H
+#define _LIST_H
+
+/* Stripped down implementation of linked list taken
+ * from the Linux Kernel.
+ */
+
+/*
+ * Simple doubly linked list implementation.
+ *
+ * Some of the internal functions (__xxx) are useful when
+ * manipulating whole lists rather than single entries, as
+ * sometimes we already know the next/prev entries and we can
+ * generate better code by using them directly rather than
+ * using the generic single-entry routines.
+ */
+
+struct list_head {
+   struct list_head *next, *prev;
+};
+
+#define LIST_HEAD_INIT(name) { (name), (name) }
+
+#define LIST_HEAD(name) \
+   struct list_head name = LIST_HEAD_INIT(name)
+
+static inline void INIT_LIST_HEAD(struct list_head *list)
+{
+   list-next = list;
+   list-prev = list;
+}
+
+/*
+ * Insert a new entry between two known consecutive entries.
+ *
+ * This is only for internal list manipulation where we know
+ * the prev/next entries already!
+ */
+static inline void __list_add(struct list_head *new,
+ struct list_head *prev,
+ struct list_head *next)
+{
+   next-prev = new;
+   new-next = next;
+   new-prev = prev;
+   prev-next = new;
+}
+
+/**
+ * list_add - add a new entry
+ * @new: new entry to be added
+ * @head: list head to add it after
+ *
+ * Insert a new entry after the specified head.
+ * This is good for implementing stacks.
+ */
+static inline void list_add(struct list_head *new, struct list_head *head)
+{
+   __list_add(new, head, head-next);
+}
+
+/*
+ * Delete a list entry by making the prev/next entries
+ * point to each other.
+ *
+ * This is only for internal list manipulation where we know
+ * the prev/next entries already!
+ */
+static inline void __list_del(struct list_head * prev, struct list_head * next)
+{
+   next-prev = prev;
+   prev-next = next;
+}
+
+#define POISON_POINTER_DELTA 0
+#define LIST_POISON1  ((void *) 0x00100100 + POISON_POINTER_DELTA)
+#define LIST_POISON2  ((void *) 0x00200200 + POISON_POINTER_DELTA)
+
+/**
+ * list_del - deletes entry from list.
+ * @entry: the element to delete from the list.
+ * Note: list_empty() on entry does not return true after this, the entry is
+ * in an undefined state.
+ */
+static inline void __list_del_entry(struct list_head *entry)
+{
+   __list_del(entry-prev, entry-next);
+}
+
+static inline void list_del(struct list_head *entry)
+{
+   __list_del(entry-prev, entry-next);
+   entry-next = LIST_POISON1;
+   entry-prev = LIST_POISON2;
+}
+
+/**
+ * list_entry - get the struct for this entry
+ * @ptr:   the struct list_head pointer.
+ * @type:  the type of the struct this is embedded in.
+ * @member:the name of the list_struct within the struct.
+ */
+#define list_entry(ptr, type, member) \
+   container_of(ptr, type, member)
+/**
+ * list_for_each   -   iterate over a list
+ * @pos:   the struct list_head to use as a loop cursor.
+ * @head:  the head for your list.
+ */
+#define list_for_each(pos, head) \
+   for (pos = (head)-next; pos != (head); pos = pos-next)
+
+/**
+ * list_for_each_safe - iterate over a list safe against removal of list entry
+ * @pos:   the struct list_head to use as a loop cursor.
+ * @n: another struct list_head to use as temporary storage
+ * @head:  the head for your list.
+ */
+#define list_for_each_safe(pos, n, head) \
+   for (pos = (head)-next, n = pos-next; pos != (head); \
+   pos = n, n = pos-next)
+
+#define offsetof(TYPE, MEMBER) ((size_t) ((TYPE *)0)-MEMBER)
+
+/**
+ * container_of - cast a member of a structure out to the containing structure
+ * @ptr:   the pointer to the member.
+ * @type:  the type of the container struct this is embedded in.
+ * @member:the name of the member within the struct.
+ *
+ */
+#define container_of(ptr, type, member) ({ \
+   const typeof( ((type *)0)-member ) *__mptr = (ptr);\
+   (type *)( (char *)__mptr - offsetof(type,member) );})
+
+#endif
-- 
1.8.1.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 04/18] staging: usbip: userspace: migrate usbip_list to libudev

2014-03-08 Thread Valentina Manea
This patch modifies usbip_list to use libudev.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 drivers/staging/usbip/userspace/src/usbip_list.c | 133 +--
 1 file changed, 50 insertions(+), 83 deletions(-)

diff --git a/drivers/staging/usbip/userspace/src/usbip_list.c 
b/drivers/staging/usbip/userspace/src/usbip_list.c
index 8864fa2..54178b7 100644
--- a/drivers/staging/usbip/userspace/src/usbip_list.c
+++ b/drivers/staging/usbip/userspace/src/usbip_list.c
@@ -17,7 +17,7 @@
  */
 
 #include sys/types.h
-#include sysfs/libsysfs.h
+#include libudev.h
 
 #include errno.h
 #include stdbool.h
@@ -133,8 +133,8 @@ static int list_exported_devices(char *host)
return 0;
 }
 
-static void print_device(char *busid, char *vendor, char *product,
-bool parsable)
+static void print_device(const char *busid, const char *vendor,
+const char *product, bool parsable)
 {
if (parsable)
printf(busid=%s#usbid=%.4s:%.4s#, busid, vendor, product);
@@ -148,106 +148,73 @@ static void print_product_name(char *product_name, bool 
parsable)
printf(   %s\n, product_name);
 }
 
-static void print_interface(char *busid, char *driver, bool parsable)
-{
-   if (parsable)
-   printf(%s=%s#, busid, driver);
-   else
-   printf(%9s%s - %s\n, , busid, driver);
-}
-
-static int is_device(void *x)
-{
-   struct sysfs_attribute *devpath;
-   struct sysfs_device *dev = x;
-   int ret = 0;
-
-   devpath = sysfs_get_device_attr(dev, devpath);
-   if (devpath  *devpath-value != '0')
-   ret = 1;
-
-   return ret;
-}
-
-static int devcmp(void *a, void *b)
-{
-   return strcmp(a, b);
-}
-
 static int list_devices(bool parsable)
 {
-   char bus_type[] = usb;
-   char busid[SYSFS_BUS_ID_SIZE];
+   struct udev *udev;
+   struct udev_enumerate *enumerate;
+   struct udev_list_entry *devices, *dev_list_entry;
+   struct udev_device *dev;
+   const char *path;
+   const char *idVendor;
+   const char *idProduct;
+   const char *bConfValue;
+   const char *bNumIntfs;
+   const char *busid;
char product_name[128];
-   struct sysfs_bus *ubus;
-   struct sysfs_device *dev;
-   struct sysfs_device *intf;
-   struct sysfs_attribute *idVendor;
-   struct sysfs_attribute *idProduct;
-   struct sysfs_attribute *bConfValue;
-   struct sysfs_attribute *bNumIntfs;
-   struct dlist *devlist;
-   int i;
int ret = -1;
 
-   ubus = sysfs_open_bus(bus_type);
-   if (!ubus) {
-   err(could not open %s bus: %s, bus_type, strerror(errno));
-   return -1;
-   }
-
-   devlist = sysfs_get_bus_devices(ubus);
-   if (!devlist) {
-   err(could not get %s bus devices: %s, bus_type,
-   strerror(errno));
-   goto err_out;
-   }
-
-   /* remove interfaces and root hubs from device list */
-   dlist_filter_sort(devlist, is_device, devcmp);
-
-   if (!parsable) {
-   printf(Local USB devices\n);
-   printf(=\n);
-   }
-   dlist_for_each_data(devlist, dev, struct sysfs_device) {
-   idVendor   = sysfs_get_device_attr(dev, idVendor);
-   idProduct  = sysfs_get_device_attr(dev, idProduct);
-   bConfValue = sysfs_get_device_attr(dev, bConfigurationValue);
-   bNumIntfs  = sysfs_get_device_attr(dev, bNumInterfaces);
+   /* Create libudev context. */
+   udev = udev_new();
+
+   /* Create libudev device enumeration. */
+   enumerate = udev_enumerate_new(udev);
+
+   /* Take only USB devices that are not hubs and do not have
+* the bInterfaceNumber attribute, i.e. are not interfaces.
+*/
+   udev_enumerate_add_match_subsystem(enumerate, usb);
+   udev_enumerate_add_nomatch_sysattr(enumerate, bDeviceClass, 09);
+   udev_enumerate_add_nomatch_sysattr(enumerate, bInterfaceNumber, NULL);
+   udev_enumerate_scan_devices(enumerate);
+
+   devices = udev_enumerate_get_list_entry(enumerate);
+
+   /* Show information about each device. */
+   udev_list_entry_foreach(dev_list_entry, devices) {
+   path = udev_list_entry_get_name(dev_list_entry);
+   dev = udev_device_new_from_syspath(udev, path);
+
+   /* Get device information. */
+   idVendor = udev_device_get_sysattr_value(dev, idVendor);
+   idProduct = udev_device_get_sysattr_value(dev, idProduct);
+   bConfValue = udev_device_get_sysattr_value(dev, 
bConfigurationValue);
+   bNumIntfs = udev_device_get_sysattr_value(dev, 
bNumInterfaces);
+   busid = udev_device_get_sysname(dev);
if (!idVendor || !idProduct || !bConfValue || !bNumIntfs) {
err(problem getting 

[PATCH 01/18] staging: usbip: userspace: migrate usbip_bind to libudev

2014-03-08 Thread Valentina Manea
This patch adds autoconf check for libudev and migrates
usbip_bind to the new library.

libsysfs will still be used until all userspace is modified.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
Reviewed-by: Shuah Khan shuah...@samsung.com
---
 drivers/staging/usbip/userspace/configure.ac   |   6 +
 .../staging/usbip/userspace/libsrc/usbip_common.h  |   9 ++
 drivers/staging/usbip/userspace/src/Makefile.am|   3 +-
 drivers/staging/usbip/userspace/src/sysfs_utils.c  |  31 +
 drivers/staging/usbip/userspace/src/sysfs_utils.h  |   8 ++
 drivers/staging/usbip/userspace/src/usbip_bind.c   | 149 -
 drivers/staging/usbip/userspace/src/utils.c|  48 ++-
 7 files changed, 127 insertions(+), 127 deletions(-)
 create mode 100644 drivers/staging/usbip/userspace/src/sysfs_utils.c
 create mode 100644 drivers/staging/usbip/userspace/src/sysfs_utils.h

diff --git a/drivers/staging/usbip/userspace/configure.ac 
b/drivers/staging/usbip/userspace/configure.ac
index 0ee5d92..a5193c6 100644
--- a/drivers/staging/usbip/userspace/configure.ac
+++ b/drivers/staging/usbip/userspace/configure.ac
@@ -50,6 +50,12 @@ AC_CHECK_HEADER([sysfs/libsysfs.h],
  [AC_MSG_ERROR([Missing sysfs2 library!])])],
[AC_MSG_ERROR([Missing /usr/include/sysfs/libsysfs.h])])
 
+AC_CHECK_HEADER([libudev.h],
+   [AC_CHECK_LIB([udev], [udev_new],
+ [LIBS=$LIBS -ludev],
+ [AC_MSG_ERROR([Missing udev library!])])],
+   [AC_MSG_ERROR([Missing /usr/include/libudev.h])])
+
 # Checks for libwrap library.
 AC_MSG_CHECKING([whether to use the libwrap (TCP wrappers) library])
 AC_ARG_WITH([tcp-wrappers],
diff --git a/drivers/staging/usbip/userspace/libsrc/usbip_common.h 
b/drivers/staging/usbip/userspace/libsrc/usbip_common.h
index 5af59d4..d313e12 100644
--- a/drivers/staging/usbip/userspace/libsrc/usbip_common.h
+++ b/drivers/staging/usbip/userspace/libsrc/usbip_common.h
@@ -30,6 +30,15 @@
 #define USBIP_HOST_DRV_NAMEusbip-host
 #define USBIP_VHCI_DRV_NAMEvhci_hcd
 
+/* sysfs constants */
+#define SYSFS_MNT_PATH /sys
+#define SYSFS_BUS_NAME bus
+#define SYSFS_BUS_TYPE usb
+#define SYSFS_DRIVERS_NAME drivers
+
+#define SYSFS_PATH_MAX 256
+#define SYSFS_BUS_ID_SIZE  32
+
 extern int usbip_use_syslog;
 extern int usbip_use_stderr;
 extern int usbip_use_debug ;
diff --git a/drivers/staging/usbip/userspace/src/Makefile.am 
b/drivers/staging/usbip/userspace/src/Makefile.am
index b4f8c4b..6c91bcb 100644
--- a/drivers/staging/usbip/userspace/src/Makefile.am
+++ b/drivers/staging/usbip/userspace/src/Makefile.am
@@ -6,7 +6,8 @@ sbin_PROGRAMS := usbip usbipd
 
 usbip_SOURCES := usbip.h utils.h usbip.c utils.c usbip_network.c \
 usbip_attach.c usbip_detach.c usbip_list.c \
-usbip_bind.c usbip_unbind.c usbip_port.c
+usbip_bind.c usbip_unbind.c usbip_port.c \
+sysfs_utils.c
 
 
 usbipd_SOURCES := usbip_network.h usbipd.c usbip_network.c
diff --git a/drivers/staging/usbip/userspace/src/sysfs_utils.c 
b/drivers/staging/usbip/userspace/src/sysfs_utils.c
new file mode 100644
index 000..36ac88e
--- /dev/null
+++ b/drivers/staging/usbip/userspace/src/sysfs_utils.c
@@ -0,0 +1,31 @@
+#include sys/types.h
+#include sys/stat.h
+#include fcntl.h
+#include errno.h
+
+#include sysfs_utils.h
+#include usbip_common.h
+
+int write_sysfs_attribute(const char *attr_path, const char *new_value,
+ size_t len)
+{
+   int fd;
+   int length;
+
+   fd = open(attr_path, O_WRONLY);
+   if (fd  0) {
+   dbg(error opening attribute %s, attr_path);
+   return -1;
+   }
+
+   length = write(fd, new_value, len);
+   if (length  0) {
+   dbg(error writing to attribute %s, attr_path);
+   close(fd);
+   return -1;
+   }
+
+   close(fd);
+
+   return 0;
+}
diff --git a/drivers/staging/usbip/userspace/src/sysfs_utils.h 
b/drivers/staging/usbip/userspace/src/sysfs_utils.h
new file mode 100644
index 000..32ac1d1
--- /dev/null
+++ b/drivers/staging/usbip/userspace/src/sysfs_utils.h
@@ -0,0 +1,8 @@
+
+#ifndef __SYSFS_UTILS_H
+#define __SYSFS_UTILS_H
+
+int write_sysfs_attribute(const char *attr_path, const char *new_value,
+ size_t len);
+
+#endif
diff --git a/drivers/staging/usbip/userspace/src/usbip_bind.c 
b/drivers/staging/usbip/userspace/src/usbip_bind.c
index 8cfd2db..fa46141 100644
--- a/drivers/staging/usbip/userspace/src/usbip_bind.c
+++ b/drivers/staging/usbip/userspace/src/usbip_bind.c
@@ -16,7 +16,7 @@
  * along with this program. If not, see http://www.gnu.org/licenses/.
  */
 
-#include sysfs/libsysfs.h
+#include libudev.h
 
 #include errno.h
 #include stdio.h
@@ -28,6 +28,7 @@
 #include usbip_common.h
 #include utils.h
 #include usbip.h
+#include sysfs_utils.h

[PATCH 02/18] staging: usbip: userspace: remove useless libsysfs includes

2014-03-08 Thread Valentina Manea
This patch removes useless libsysfs.h includes in various
userspace files.

Signed-off-by: Valentina Manea valentina.mane...@gmail.com
---
 drivers/staging/usbip/userspace/src/usbip_attach.c  | 1 -
 drivers/staging/usbip/userspace/src/usbip_detach.c  | 2 --
 drivers/staging/usbip/userspace/src/usbip_network.h | 1 -
 3 files changed, 4 deletions(-)

diff --git a/drivers/staging/usbip/userspace/src/usbip_attach.c 
b/drivers/staging/usbip/userspace/src/usbip_attach.c
index 0858411..716a79e 100644
--- a/drivers/staging/usbip/userspace/src/usbip_attach.c
+++ b/drivers/staging/usbip/userspace/src/usbip_attach.c
@@ -17,7 +17,6 @@
  */
 
 #include sys/stat.h
-#include sysfs/libsysfs.h
 
 #include limits.h
 #include stdint.h
diff --git a/drivers/staging/usbip/userspace/src/usbip_detach.c 
b/drivers/staging/usbip/userspace/src/usbip_detach.c
index 13308df..05c6d15 100644
--- a/drivers/staging/usbip/userspace/src/usbip_detach.c
+++ b/drivers/staging/usbip/userspace/src/usbip_detach.c
@@ -16,8 +16,6 @@
  * along with this program. If not, see http://www.gnu.org/licenses/.
  */
 
-#include sysfs/libsysfs.h
-
 #include ctype.h
 #include limits.h
 #include stdint.h
diff --git a/drivers/staging/usbip/userspace/src/usbip_network.h 
b/drivers/staging/usbip/userspace/src/usbip_network.h
index f19ae19..c1e875c 100644
--- a/drivers/staging/usbip/userspace/src/usbip_network.h
+++ b/drivers/staging/usbip/userspace/src/usbip_network.h
@@ -10,7 +10,6 @@
 #endif
 
 #include sys/types.h
-#include sysfs/libsysfs.h
 
 #include stdint.h
 
-- 
1.8.1.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 00/18] Resend of usbip-utils migration patches and various other fixes

2014-03-08 Thread Valentina Manea
This is a resend of the patches sent a few days ago, including
the migration of USB/IP userspace side to use libudev instead
of libsysfs and various other fixes, all ordered in a big patch
series.

The patches have been modified according to received feedback.

Valentina Manea (18):
  staging: usbip: userspace: migrate usbip_bind to libudev
  staging: usbip: userspace: remove useless libsysfs includes
  staging: usbip: userspace: migrate usbip_unbind to libudev
  staging: usbip: userspace: migrate usbip_list to libudev
  staging: usbip: userspace: re-add interface information listing
  staging: usbip: userspace: add new list API
  staging: usbip: userspace: move sysfs_utils to libsrc
  staging: usbip: userspace: migrate usbip_host_driver to libudev
  staging: usbip: userspace: remove class device infrastructure in
vhci_driver
  staging: usbip: userspace: migrate vhci_driver to libudev
  staging: usbip: userspace: remove libsysfs flag and autoconf check
  staging: usbip: userspace: update dependencies in README
  staging: usbip: userspace: increase version to 2.0
  staging: usbip: let client choose device configuration
  staging: usbip: trigger driver probing after unbinding from usbip-host
  staging: usbip: claim ports used by shared devices
  staging: usbip: userspace: don't throw error when trying to read
configuration specific attributes
  staging: usbip: userspace: add hwdata as optional dependency in README

 drivers/staging/usbip/stub.h   |   1 +
 drivers/staging/usbip/stub_dev.c   |  33 +-
 drivers/staging/usbip/stub_main.c  |  39 +++
 drivers/staging/usbip/stub_rx.c|  26 +-
 drivers/staging/usbip/userspace/README |   8 +-
 drivers/staging/usbip/userspace/configure.ac   |  12 +-
 drivers/staging/usbip/userspace/libsrc/Makefile.am |   3 +-
 drivers/staging/usbip/userspace/libsrc/list.h  | 136 
 .../staging/usbip/userspace/libsrc/sysfs_utils.c   |  31 ++
 .../staging/usbip/userspace/libsrc/sysfs_utils.h   |   8 +
 .../staging/usbip/userspace/libsrc/usbip_common.c  |  91 +++---
 .../staging/usbip/userspace/libsrc/usbip_common.h  |  15 +-
 .../usbip/userspace/libsrc/usbip_host_driver.c | 285 +
 .../usbip/userspace/libsrc/usbip_host_driver.h |   7 +-
 .../staging/usbip/userspace/libsrc/vhci_driver.c   | 346 -
 .../staging/usbip/userspace/libsrc/vhci_driver.h   |  14 +-
 drivers/staging/usbip/userspace/src/Makefile.am|   1 -
 drivers/staging/usbip/userspace/src/usbip_attach.c |   1 -
 drivers/staging/usbip/userspace/src/usbip_bind.c   | 149 -
 drivers/staging/usbip/userspace/src/usbip_detach.c |   2 -
 drivers/staging/usbip/userspace/src/usbip_list.c   | 153 -
 .../staging/usbip/userspace/src/usbip_network.h|   1 -
 drivers/staging/usbip/userspace/src/usbip_unbind.c | 110 +++
 drivers/staging/usbip/userspace/src/usbipd.c   |  30 +-
 drivers/staging/usbip/userspace/src/utils.c|  48 +--
 drivers/usb/core/hub.c |   2 +
 drivers/usb/core/usb.h |   4 -
 include/linux/usb.h|   7 +
 28 files changed, 676 insertions(+), 887 deletions(-)
 create mode 100644 drivers/staging/usbip/userspace/libsrc/list.h
 create mode 100644 drivers/staging/usbip/userspace/libsrc/sysfs_utils.c
 create mode 100644 drivers/staging/usbip/userspace/libsrc/sysfs_utils.h

-- 
1.8.1.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


xHCI oops in 3.13

2014-03-08 Thread Steinar H. Gunderson
Hi,

I'm using a Sundtek DVB-C USB stick (with their userspace driver which works
over usbfs, as I understand it), and when I w_scan, after ~10 minutes or so
this happens:

  Mar  8 14:22:47 gruessi kernel: [ 2429.016860] xhci_hcd :00:14.0: WARN 
Event TRB for slot 1 ep 2 with no TDs queued?
  Mar  8 14:23:28 gruessi kernel: [ 2470.115318] BUG: unable to handle kernel 
paging request at 00020efd
  Mar  8 14:23:28 gruessi kernel: [ 2470.115320] IP: [a01a50ec] 
xhci_find_new_dequeue_state+0x8c/0x2f0 [xhci_hcd]
  Mar  8 14:23:28 gruessi kernel: [ 2470.115326] PGD d799d067 PUD 0
  Mar  8 14:23:28 gruessi kernel: [ 2470.115328] Oops:  [#1] SMP
  Mar  8 14:23:28 gruessi kernel: [ 2470.115330] Modules linked in: bnep rfcomm 
bluetooth cpufreq_powersave cpufreq_stats cpufreq_userspace 
cpufreq_conservative binfmt_misc uinput fuse snd_pcm_oss snd_mixer_oss loop 
parport_pc ppdev lp parport x86_pkg_temp_thermal intel_powerclamp coretemp kvm 
crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel aesni_intel 
snd_hda_codec_hdmi snd_hda_codec_realtek aes_x86_64 lrw gf128mul iTCO_wdt 
iTCO_vendor_support eeepc_wmi snd_hda_intel snd_hda_codec mxm_wmi glue_helper 
asus_wmi ablk_helper sparse_keymap evdev rfkill psmouse pcspkr cryptd i2c_i801 
i2c_core lpc_ich video button processor snd_hwdep snd_pcm wmi mfd_core 
snd_page_alloc serio_raw snd_seq snd_seq_device snd_timer snd mei_me mei 
soundcore ext4 crc16 mbcache jbd2 sg sd_mod crc_t10dif crct10dif_common ahci 
libahci ehci_pci xhci_hcd ehci_hcd libata scsi_mod e1000e ptp pps_core usbcore 
usb_common thermal fan thermal_sys
  Mar  8 14:23:28 gruessi kernel: [ 2470.115356] CPU: 0 PID: 3219 Comm: 
mediasrv Not tainted 3.13-1-amd64 #1 Debian 3.13.5-1
  Mar  8 14:23:28 gruessi kernel: [ 2470.115358] Hardware name: ASUS All 
Series/GRYPHON Z87, BIOS 0801 04/19/2013
  Mar  8 14:23:28 gruessi kernel: [ 2470.115359] task: 8800d3211800 ti: 
8800d32a8000 task.ti: 8800d32a8000
  Mar  8 14:23:28 gruessi kernel: [ 2470.115359] RIP: 0010:[a01a50ec] 
 [a01a50ec] xhci_find_new_dequeue_state+0x8c/0x2f0 [xhci_hcd]
  Mar  8 14:23:28 gruessi kernel: [ 2470.115363] RSP: 0018:8800d32a9cf8  
EFLAGS: 00010096
  Mar  8 14:23:28 gruessi kernel: [ 2470.115364] RAX: 880036c2 RBX: 
880116ea4000 RCX: 8800d3250c60
  Mar  8 14:23:28 gruessi kernel: [ 2470.115364] RDX: 8800d3250c60 RSI: 
00020b01 RDI: 00020ef1
  Mar  8 14:23:28 gruessi kernel: [ 2470.115365] RBP: 8800365d4000 R08: 
8800365d41f0 R09: 8800d32a9d38
  Mar  8 14:23:28 gruessi kernel: [ 2470.115366] R10: 0079 R11: 
0175 R12: 880117f31300
  Mar  8 14:23:28 gruessi kernel: [ 2470.115367] R13: 8800d3090540 R14: 
8800d32a9d38 R15: 0002
  Mar  8 14:23:28 gruessi kernel: [ 2470.115368] FS:  7f18b5479700() 
GS:88011ec0() knlGS:
  Mar  8 14:23:28 gruessi kernel: [ 2470.115369] CS:  0010 DS:  ES:  
CR0: 80050033
  Mar  8 14:23:28 gruessi kernel: [ 2470.115369] CR2: 00020efd CR3: 
d835b000 CR4: 001407f0
  Mar  8 14:23:28 gruessi kernel: [ 2470.115370] DR0:  DR1: 
 DR2: 
  Mar  8 14:23:28 gruessi kernel: [ 2470.115371] DR3:  DR6: 
fffe0ff0 DR7: 0400
  Mar  8 14:23:28 gruessi kernel: [ 2470.115371] Stack:
  Mar  8 14:23:28 gruessi kernel: [ 2470.115372]  0002d32a9d78 
880116ea4000 0002 8800365d41f8
  Mar  8 14:23:28 gruessi kernel: [ 2470.115374]  8800367f 
0002 0296 a019dd00
  Mar  8 14:23:28 gruessi kernel: [ 2470.115375]  a01a4aca 
dead00100100 8801 880116ea4000
  Mar  8 14:23:28 gruessi kernel: [ 2470.115377] Call Trace:
  Mar  8 14:23:28 gruessi kernel: [ 2470.115382]  [a019dd00] ? 
xhci_cleanup_stalled_ring+0x60/0x200 [xhci_hcd]
  Mar  8 14:23:28 gruessi kernel: [ 2470.115386]  [a01a4aca] ? 
queue_command+0x6a/0xc0 [xhci_hcd]
  Mar  8 14:23:28 gruessi kernel: [ 2470.115390]  [a019dfb6] ? 
xhci_endpoint_reset+0x116/0x190 [xhci_hcd]
  Mar  8 14:23:28 gruessi kernel: [ 2470.115396]  [a00346e5] ? 
usb_enable_endpoint+0x85/0x90 [usbcore]
  Mar  8 14:23:28 gruessi kernel: [ 2470.115401]  [a0034729] ? 
usb_enable_interface+0x39/0x50 [usbcore]
  Mar  8 14:23:28 gruessi kernel: [ 2470.115405]  [a0034934] ? 
usb_set_interface+0x1f4/0x2d0 [usbcore]
  Mar  8 14:23:28 gruessi kernel: [ 2470.115410]  [a003de9b] ? 
usbdev_do_ioctl+0xa0b/0x1050 [usbcore]
  Mar  8 14:23:28 gruessi kernel: [ 2470.115414]  [a003e4f5] ? 
usbdev_ioctl+0x5/0x10 [usbcore]
  Mar  8 14:23:28 gruessi kernel: [ 2470.115417]  [8118b5bf] ? 
do_vfs_ioctl+0x2cf/0x4a0
  Mar  8 14:23:28 gruessi kernel: [ 2470.115419]  [811793b5] ? 
vfs_read+0xe5/0x160
  Mar  8 14:23:28 gruessi kernel: [ 2470.115420]  

Re: [GIT PULL 00/28] PHY for 3.15

2014-03-08 Thread Greg KH
On Sat, Mar 08, 2014 at 02:59:01PM +0530, Kishon Vijay Abraham I wrote:
 Hi Greg,
 
 Here's the PULL REQUEST for 3.15 merge window.
 More users are starting to use the generic PHY framework including USB and
 SATA PHY in exynos, USB in sunxi and multi-purpose PHY (currently only SATA)
 in APM. There is also a patch to adapt USB3 PHY driver (PIPE3) used in OMAP
 to generic PHY framework and use the same driver for SATA.
 It also includes few fixes and cleanups.
 
 Please let me know if you want me to make any changes.
 
 Cheers
 Kishon
 
 The following changes since commit cfbf8d4857c26a8a307fb7cd258074c9dcd8c691:
 
   Linux 3.14-rc4 (2014-02-23 17:40:03 -0800)
 
 are available in the git repository at:
 
   git://git.kernel.org/pub/scm/linux/kernel/git/kishon/linux-phy.git 
 tags/for_3.15
 
 for you to fetch changes up to 303fd52cda953d14dc82ac82b570761599eb9ab2:
 
   PHY: add APM X-Gene SoC 15Gbps Multi-purpose PHY driver (2014-03-08 
 12:39:51 +0530)

When merging this with my usb-next tree, I get the following merge
issue, which I don't know how to resolve:
CONFLICT (modify/delete): Documentation/devicetree/bindings/usb/usb-phy.txt 
deleted in HEAD and modified in a0100026249158ec7aae606b553efae7cb37f616. 
Version a0100026249158ec7aae606b553efae7cb37f616 of 
Documentation/devicetree/bindings/usb/usb-phy.txt left in tree.

Any suggestions as to what I should do here?

thanks,

greg k-h

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] u_ether: move hardware transmit to RX workqueue

2014-03-08 Thread Greg Kroah-Hartman
On Sat, Mar 08, 2014 at 03:39:48PM +0800, clanlab.proj wrote:
 Hi Dave and Greg,
 
 On Fri, Mar 7, 2014 at 12:04 AM, Felipe Balbi ba...@ti.com wrote:
  Hi,
 
  On Thu, Mar 06, 2014 at 11:42:49PM +0800, Weinn Jheng wrote:
  In order to reduce the interrupt times in the embedded system,
  a receiving workqueue is introduced.
  This modification also enhanced the overall throughput as the
  benefits of reducing interrupt occurrence.
 
  Signed-off-by: Weinn Jheng clanlab.p...@gmail.com
  Cc: David Brownell dbrown...@users.sourceforge.net
  Cc: David S. Miller da...@davemloft.net
 
  Dave, does this look ok from NAPI point of view ?
 
 I've found the another patch NAPI version has been taken by Greg.

I did?  What git commit id is it?

 But I didn't remembered I've seen the further comment from Dave.
 Since the performance will be a little bit slower then work queue
 according to my experiment before.
 Could someone please give me the comment about the decisions of pros and cons?
 Because I have no idea if there will be further improvement is needed
 for patching NAPI version to work queue.

thanks,

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v5 00/14] usb: phy: msm: Fixes, cleanups and DT support

2014-03-08 Thread Ivan T. Ivanov
Hi,

On 03/08/2014 02:15 AM, Felipe Balbi wrote:
 On Wed, Mar 05, 2014 at 05:54:03PM -0800, Tim Bird wrote:
 Ivan,

 I'm still unsuccessful at getting this patch set to work on my kernel.
 See regs in dmesg log



snip

 never got any reply to this, nor got a response to Sergei's comments.
 Not looking good, too late for v3.15.
 

I am working with Tim to resolve this issue. Sergei's comment have
been answered already :-)

It will be nice if you could pick up first several patches, which are
just cleanups.

Regards,
Ivan
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] u_ether: move hardware transmit to RX workqueue

2014-03-08 Thread clanlab.proj
Hi Greg, Dave and Felipe,

On Sun, Mar 9, 2014 at 12:45 AM, Greg Kroah-Hartman
gre...@linuxfoundation.org wrote:
 On Sat, Mar 08, 2014 at 03:39:48PM +0800, clanlab.proj wrote:
 Hi Dave and Greg,

  Signed-off-by: Weinn Jheng clanlab.p...@gmail.com
  Cc: David Brownell dbrown...@users.sourceforge.net
  Cc: David S. Miller da...@davemloft.net
 
  Dave, does this look ok from NAPI point of view ?

 I've found the another patch NAPI version has been taken by Greg.

 I did?  What git commit id is it?

Ha! I found I saw before should be the merge notice.

The patch may be actually taken by Felipe
commit 808855f0615b2a5c8fd916e4988f3b9e748aac73 (patch)
tree 7911e8bed2a7b99bbc5950d9cc67724999be7f13
has been applied to my tree and can be found at:
http://bit.ly/1oxoXwd


And the merge notice was as follows which I read before was
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-next branch.
Which I thought Greg has taken the patch. :-p

 But I didn't remembered I've seen the further comment from Dave.
 Since the performance will be a little bit slower then work queue
 according to my experiment before.
 Could someone please give me the comment about the decisions of pros and 
 cons?
 Because I have no idea if there will be further improvement is needed
 for patching NAPI version to work queue.


 thanks,

 greg k-h

Ha, sorry for bothering you for misunderstanding the announcement. :p
Thanks

Best regards,
Weinn Jheng
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] u_ether: move hardware transmit to RX workqueue

2014-03-08 Thread Greg Kroah-Hartman
On Sun, Mar 09, 2014 at 01:27:48AM +0800, clanlab.proj wrote:
 Hi Greg, Dave and Felipe,
 
 On Sun, Mar 9, 2014 at 12:45 AM, Greg Kroah-Hartman
 gre...@linuxfoundation.org wrote:
  On Sat, Mar 08, 2014 at 03:39:48PM +0800, clanlab.proj wrote:
  Hi Dave and Greg,
 
   Signed-off-by: Weinn Jheng clanlab.p...@gmail.com
   Cc: David Brownell dbrown...@users.sourceforge.net
   Cc: David S. Miller da...@davemloft.net
  
   Dave, does this look ok from NAPI point of view ?
 
  I've found the another patch NAPI version has been taken by Greg.
 
  I did?  What git commit id is it?
 
 Ha! I found I saw before should be the merge notice.
 
 The patch may be actually taken by Felipe
 commit 808855f0615b2a5c8fd916e4988f3b9e748aac73 (patch)
 tree 7911e8bed2a7b99bbc5950d9cc67724999be7f13
 has been applied to my tree and can be found at:
 http://bit.ly/1oxoXwd
 

Neither of those commits are in my USB tree, sorry.
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[GIT PULL] USB fixes for 3.14-rc6

2014-03-08 Thread Greg KH
The following changes since commit 0414855fdc4a40da05221fc6062cccbc0c30f169:

  Linux 3.14-rc5 (2014-03-02 18:56:16 -0800)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git/ 
tags/usb-3.14-rc6

for you to fetch changes up to 469d417b68958a064c09e7875646c97c6e783dfc:

  Revert USBNET: ax88179_178a: enable tso if usb host supports sg dma 
(2014-03-07 11:48:13 -0800)


USB fixes for 3.14-rc6

Here are 4 USB fixes for your current tree.

Two of them are reverts to hopefully resolve the nasty XHCI regressions
we have been having on some types of devices.  The other two are quirks
for some Logitech video devices.

Signed-off-by: Greg Kroah-Hartman gre...@linuxfoundation.org


Julius Werner (2):
  usb: Add device quirk for Logitech HD Pro Webcams C920 and C930e
  usb: Make DELAY_INIT quirk wait 100ms between Get Configuration requests

Mathias Nyman (2):
  Revert xhci 1.0: Limit arbitrarily-aligned scatter gather.
  Revert USBNET: ax88179_178a: enable tso if usb host supports sg dma

 drivers/net/usb/ax88179_178a.c |  8 
 drivers/usb/core/config.c  |  4 
 drivers/usb/core/quirks.c  |  4 
 drivers/usb/host/xhci.c| 14 +++---
 4 files changed, 11 insertions(+), 19 deletions(-)
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/18] Resend of usbip-utils migration patches and various other fixes

2014-03-08 Thread Greg KH
On Sat, Mar 08, 2014 at 02:53:18PM +0200, Valentina Manea wrote:
 This is a resend of the patches sent a few days ago, including
 the migration of USB/IP userspace side to use libudev instead
 of libsysfs and various other fixes, all ordered in a big patch
 series.

Very nice work, thanks so much for doing all of this, it looks great.

Now applied to my tree, you should have gotten the emails about it
already.

thanks,

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [GIT PULL 00/28] PHY for 3.15

2014-03-08 Thread Kishon Vijay Abraham I

Hi Greg,

On Saturday 08 March 2014 10:12 PM, Greg KH wrote:

On Sat, Mar 08, 2014 at 02:59:01PM +0530, Kishon Vijay Abraham I wrote:

Hi Greg,

Here's the PULL REQUEST for 3.15 merge window.
More users are starting to use the generic PHY framework including USB and
SATA PHY in exynos, USB in sunxi and multi-purpose PHY (currently only SATA)
in APM. There is also a patch to adapt USB3 PHY driver (PIPE3) used in OMAP
to generic PHY framework and use the same driver for SATA.
It also includes few fixes and cleanups.

Please let me know if you want me to make any changes.

Cheers
Kishon

The following changes since commit cfbf8d4857c26a8a307fb7cd258074c9dcd8c691:

   Linux 3.14-rc4 (2014-02-23 17:40:03 -0800)

are available in the git repository at:

   git://git.kernel.org/pub/scm/linux/kernel/git/kishon/linux-phy.git 
tags/for_3.15

for you to fetch changes up to 303fd52cda953d14dc82ac82b570761599eb9ab2:

   PHY: add APM X-Gene SoC 15Gbps Multi-purpose PHY driver (2014-03-08 12:39:51 
+0530)


When merging this with my usb-next tree, I get the following merge
issue, which I don't know how to resolve:
CONFLICT (modify/delete): Documentation/devicetree/bindings/usb/usb-phy.txt 
deleted in HEAD and modified in a0100026249158ec7aae606b553efae7cb37f616. 
Version a0100026249158ec7aae606b553efae7cb37f616 of 
Documentation/devicetree/bindings/usb/usb-phy.txt left in tree.

Any suggestions as to what I should do here?


There were 3 patches that modified usb-phy.txt but the file was moved to 
phy/ti-phy.txt in balbi's branch. I've resent the patches that modified 
this file and have also updated tags/for_3.15.


Let me know If I have to resend the PULL request.

Sorry for the hassle.

Thanks
Kishon
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html