Re: [PATCH v5 4/4] usb: usbip tool: Fix parse_status()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 05/22/2017 04:20 AM, Yuyang Du wrote:
> From: Yuyang Du <yuyang.du@xxxxxxxxx>
> 
> 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.opasiak@xxxxxxxxxxx>
> Signed-off-by: Yuyang Du <yuyang.du@xxxxxxxxx>

Acked-by: Shuah Khan <shuahkh@xxxxxxxxxxxxxxx>

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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux