Add maintainers

*********  ***** 
BRs, 
Pei Zhang


> -----Original Message-----
> From: Zhang, Pei
> Sent: Wednesday, December 6, 2017 11:41 AM
> To: linux-kernel@vger.kernel.org; usbip-de...@lists.sourceforge.net
> Cc: Zhang, Pei <pei.zh...@intel.com>
> Subject: [PATCH] usbip: vhci-hcd: return correct port ENABLE status
> 
> USB system will clear port's ENABLE feature for some USB devices when
> vdev is already assigned port address. This cause getPortStatus reports
> to system that this device is not enabled, client OS will failed to use
> this usb device.
> 
> The failure devices include a SAMSUNG SSD storage, and a Logitech webcam.
> 
> Signed-off-by: Pei Zhang <pei.zh...@intel.com>
> ---
>  drivers/usb/usbip/vhci_hcd.c | 38 +++++++++++++++++++++++--------------
> -
>  1 file changed, 23 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
> index e4cb9f0..7b8cf70 100644
> --- a/drivers/usb/usbip/vhci_hcd.c
> +++ b/drivers/usb/usbip/vhci_hcd.c
> @@ -350,24 +350,32 @@ static int vhci_hub_control(struct usb_hcd *hcd,
> u16 typeReq, u16 wValue,
>                       dum->re_timeout = 0;
>               }
> 
> -             if ((dum->port_status[rhport] & (1 << USB_PORT_FEAT_RESET)) !=
> -                 0 && time_after(jiffies, dum->re_timeout)) {
> -                     dum->port_status[rhport] |=
> -                             (1 << USB_PORT_FEAT_C_RESET);
> -                     dum->port_status[rhport] &=
> -                             ~(1 << USB_PORT_FEAT_RESET);
> -                     dum->re_timeout = 0;
> -
> -                     if (dum->vdev[rhport].ud.status ==
> -                         VDEV_ST_NOTASSIGNED) {
> -                             usbip_dbg_vhci_rh(
> -                                     " enable rhport %d (status %u)\n",
> -                                     rhport,
> -                                     dum->vdev[rhport].ud.status);
> +             if (dum->port_status[rhport] & (1 << USB_PORT_FEAT_RESET)) {
> +                 if (time_after(jiffies, dum->re_timeout)) {
>                               dum->port_status[rhport] |=
> -                                     USB_PORT_STAT_ENABLE;
> +                                     (1 << USB_PORT_FEAT_C_RESET);
> +                             dum->port_status[rhport] &=
> +                                     ~(1 << USB_PORT_FEAT_RESET);
> +                             dum->re_timeout = 0;
> +
> +                             if (dum->vdev[rhport].ud.status ==
> +                                     VDEV_ST_NOTASSIGNED) {
> +                                     usbip_dbg_vhci_rh(
> +                                             " enable rhport %d (status 
> %u)\n",
> +                                             rhport,
> +                                             dum->vdev[rhport].ud.status);
> +                                     dum->port_status[rhport] |=
> +                                             USB_PORT_STAT_ENABLE;
> +                             }
>                       }
> +             } else {
> +                     /* Port would be disabled by clearing FEAT_ENABLE bit,
> +                      * make it enabled here. No more thing should be done.
> */
> +                     if (dum->vdev[rhport].ud.status == VDEV_ST_USED)
> +                                     dum->port_status[rhport] |=
> +                                             USB_PORT_STAT_ENABLE;
>               }
> +
>               ((__le16 *) buf)[0] = cpu_to_le16(dum->port_status[rhport]);
>               ((__le16 *) buf)[1] =
>                       cpu_to_le16(dum->port_status[rhport] >> 16);
> --
> 2.7.4

Reply via email to