On 05/22/2017 04:20 AM, Yuyang Du wrote:
> From: Yuyang Du <yuyang...@intel.com>
> 
> 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>

Acked-by: Shuah Khan <shua...@osg.samsung.com>

thanks,
-- Shuah

> ---
>  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 aa82c4b..f519c73 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) {
> 

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