In parse_status(), all nports number of idev's are initiated to
0 by memset(), it is simply wrong, because parse_status() reads
the status sys file one by one, therefore, it can only update the
according vhci_driver->idev's for it to parse.

Reviewed-by: Krzysztof Opasiak <k.opas...@samsung.com>
Signed-off-by: Yuyang Du <yuyang...@intel.com>
---
 tools/usb/usbip/libsrc/vhci_driver.c | 38 ++++++++++++++----------------------
 tools/usb/usbip/src/usbip_attach.c   |  2 ++
 2 files changed, 17 insertions(+), 23 deletions(-)

diff --git a/tools/usb/usbip/libsrc/vhci_driver.c 
b/tools/usb/usbip/libsrc/vhci_driver.c
index ed2eba9..af88447 100644
--- a/tools/usb/usbip/libsrc/vhci_driver.c
+++ b/tools/usb/usbip/libsrc/vhci_driver.c
@@ -36,18 +36,11 @@ imported_device_init(struct usbip_imported_device *idev, 
char *busid)
        return NULL;
 }
 
-
-
 static int parse_status(const char *value)
 {
        int ret = 0;
        char *c;
 
-
-       for (int i = 0; i < vhci_driver->nports; i++)
-               memset(&vhci_driver->idev[i], 0, sizeof(vhci_driver->idev[i]));
-
-
        /* skip a header line */
        c = strchr(value, '\n');
        if (!c)
@@ -58,6 +51,7 @@ static int parse_status(const char *value)
                int port, status, speed, devid;
                unsigned long socket;
                char lbusid[SYSFS_BUS_ID_SIZE];
+               struct usbip_imported_device *idev;
 
                ret = sscanf(c, "%d %d %d %x %lx %31s\n",
                                &port, &status, &speed,
@@ -72,30 +66,28 @@ static int parse_status(const char *value)
                                port, status, speed, devid);
                dbg("socket %lx lbusid %s", socket, lbusid);
 
-
                /* if a device is connected, look at it */
-               {
-                       struct usbip_imported_device *idev = 
&vhci_driver->idev[port];
+               idev = &vhci_driver->idev[port];
 
-                       idev->port      = port;
-                       idev->status    = status;
+               memset(idev, 0, sizeof(*idev));
 
-                       idev->devid     = devid;
+               idev->port      = port;
+               idev->status    = status;
 
-                       idev->busnum    = (devid >> 16);
-                       idev->devnum    = (devid & 0x0000ffff);
+               idev->devid     = devid;
 
-                       if (idev->status != VDEV_ST_NULL
-                           && idev->status != VDEV_ST_NOTASSIGNED) {
-                               idev = imported_device_init(idev, lbusid);
-                               if (!idev) {
-                                       dbg("imported_device_init failed");
-                                       return -1;
-                               }
+               idev->busnum    = (devid >> 16);
+               idev->devnum    = (devid & 0x0000ffff);
+
+               if (idev->status != VDEV_ST_NULL
+                   && idev->status != VDEV_ST_NOTASSIGNED) {
+                       idev = imported_device_init(idev, lbusid);
+                       if (!idev) {
+                               dbg("imported_device_init failed");
+                               return -1;
                        }
                }
 
-
                /* go to the next line */
                c = strchr(c, '\n');
                if (!c)
diff --git a/tools/usb/usbip/src/usbip_attach.c 
b/tools/usb/usbip/src/usbip_attach.c
index 70a6b50..62a297f 100644
--- a/tools/usb/usbip/src/usbip_attach.c
+++ b/tools/usb/usbip/src/usbip_attach.c
@@ -108,6 +108,8 @@ static int import_device(int sockfd, struct 
usbip_usb_device *udev)
                return -1;
        }
 
+       dbg("got free port %d", port);
+
        rc = usbip_vhci_attach_device(port, sockfd, udev->busnum,
                                      udev->devnum, udev->speed);
        if (rc < 0) {
-- 
2.7.4

--
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

Reply via email to