Re: [PATCH v2 5/5] usb: xhci: Handle USB transaction error on address command
Hi, On 07/27/2017 03:55 PM, Felipe Balbi wrote: > Hi, > > Lu Baoluwrites: >> Xhci driver handles USB transaction errors on transfer events, >> but transaction errors are possible on address device command >> completion events as well. >> >> The xHCI specification (section 4.6.5) says: A USB Transaction >> Error Completion Code for an Address Device Command may be due >> to a Stall response from a device. Software should issue a Disable >> Slot Command for the Device Slot then an Enable Slot Command to >> recover from this error. >> >> This patch handles USB transaction errors on address command >> completion events. The related discussion threads can be found >> through below links. >> >> http://marc.info/?l=linux-usb=149362010728921=2 >> http://marc.info/?l=linux-usb=149252752825755=2 >> >> Suggested-by: Mathias Nyman >> Signed-off-by: Lu Baolu >> --- >> drivers/usb/host/xhci.c | 5 + >> 1 file changed, 5 insertions(+) >> >> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c >> index d6b728d..95780f8 100644 >> --- a/drivers/usb/host/xhci.c >> +++ b/drivers/usb/host/xhci.c >> @@ -3822,6 +3822,11 @@ static int xhci_setup_device(struct usb_hcd *hcd, >> struct usb_device *udev, >> break; >> case COMP_USB_TRANSACTION_ERROR: >> dev_warn(>dev, "Device not responding to setup %s.\n", >> act); >> + >> +ret = xhci_disable_slot(xhci, udev->slot_id); >> +if (!ret) >> +xhci_alloc_dev(hcd, udev); > aren't you leaking previously allocated virt_dev ? > When disable slot command completes, the command completion handler will release the previous allocated virt_dev. Best regards, Lu Baolu
Re: [PATCH v2 5/5] usb: xhci: Handle USB transaction error on address command
Hi, On 07/27/2017 03:55 PM, Felipe Balbi wrote: > Hi, > > Lu Baolu writes: >> Xhci driver handles USB transaction errors on transfer events, >> but transaction errors are possible on address device command >> completion events as well. >> >> The xHCI specification (section 4.6.5) says: A USB Transaction >> Error Completion Code for an Address Device Command may be due >> to a Stall response from a device. Software should issue a Disable >> Slot Command for the Device Slot then an Enable Slot Command to >> recover from this error. >> >> This patch handles USB transaction errors on address command >> completion events. The related discussion threads can be found >> through below links. >> >> http://marc.info/?l=linux-usb=149362010728921=2 >> http://marc.info/?l=linux-usb=149252752825755=2 >> >> Suggested-by: Mathias Nyman >> Signed-off-by: Lu Baolu >> --- >> drivers/usb/host/xhci.c | 5 + >> 1 file changed, 5 insertions(+) >> >> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c >> index d6b728d..95780f8 100644 >> --- a/drivers/usb/host/xhci.c >> +++ b/drivers/usb/host/xhci.c >> @@ -3822,6 +3822,11 @@ static int xhci_setup_device(struct usb_hcd *hcd, >> struct usb_device *udev, >> break; >> case COMP_USB_TRANSACTION_ERROR: >> dev_warn(>dev, "Device not responding to setup %s.\n", >> act); >> + >> +ret = xhci_disable_slot(xhci, udev->slot_id); >> +if (!ret) >> +xhci_alloc_dev(hcd, udev); > aren't you leaking previously allocated virt_dev ? > When disable slot command completes, the command completion handler will release the previous allocated virt_dev. Best regards, Lu Baolu
Re: [PATCH v2 5/5] usb: xhci: Handle USB transaction error on address command
Hi, Lu Baoluwrites: > Xhci driver handles USB transaction errors on transfer events, > but transaction errors are possible on address device command > completion events as well. > > The xHCI specification (section 4.6.5) says: A USB Transaction > Error Completion Code for an Address Device Command may be due > to a Stall response from a device. Software should issue a Disable > Slot Command for the Device Slot then an Enable Slot Command to > recover from this error. > > This patch handles USB transaction errors on address command > completion events. The related discussion threads can be found > through below links. > > http://marc.info/?l=linux-usb=149362010728921=2 > http://marc.info/?l=linux-usb=149252752825755=2 > > Suggested-by: Mathias Nyman > Signed-off-by: Lu Baolu > --- > drivers/usb/host/xhci.c | 5 + > 1 file changed, 5 insertions(+) > > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c > index d6b728d..95780f8 100644 > --- a/drivers/usb/host/xhci.c > +++ b/drivers/usb/host/xhci.c > @@ -3822,6 +3822,11 @@ static int xhci_setup_device(struct usb_hcd *hcd, > struct usb_device *udev, > break; > case COMP_USB_TRANSACTION_ERROR: > dev_warn(>dev, "Device not responding to setup %s.\n", > act); > + > + ret = xhci_disable_slot(xhci, udev->slot_id); > + if (!ret) > + xhci_alloc_dev(hcd, udev); aren't you leaking previously allocated virt_dev ? -- balbi signature.asc Description: PGP signature
Re: [PATCH v2 5/5] usb: xhci: Handle USB transaction error on address command
Hi, Lu Baolu writes: > Xhci driver handles USB transaction errors on transfer events, > but transaction errors are possible on address device command > completion events as well. > > The xHCI specification (section 4.6.5) says: A USB Transaction > Error Completion Code for an Address Device Command may be due > to a Stall response from a device. Software should issue a Disable > Slot Command for the Device Slot then an Enable Slot Command to > recover from this error. > > This patch handles USB transaction errors on address command > completion events. The related discussion threads can be found > through below links. > > http://marc.info/?l=linux-usb=149362010728921=2 > http://marc.info/?l=linux-usb=149252752825755=2 > > Suggested-by: Mathias Nyman > Signed-off-by: Lu Baolu > --- > drivers/usb/host/xhci.c | 5 + > 1 file changed, 5 insertions(+) > > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c > index d6b728d..95780f8 100644 > --- a/drivers/usb/host/xhci.c > +++ b/drivers/usb/host/xhci.c > @@ -3822,6 +3822,11 @@ static int xhci_setup_device(struct usb_hcd *hcd, > struct usb_device *udev, > break; > case COMP_USB_TRANSACTION_ERROR: > dev_warn(>dev, "Device not responding to setup %s.\n", > act); > + > + ret = xhci_disable_slot(xhci, udev->slot_id); > + if (!ret) > + xhci_alloc_dev(hcd, udev); aren't you leaking previously allocated virt_dev ? -- balbi signature.asc Description: PGP signature
[PATCH v2 5/5] usb: xhci: Handle USB transaction error on address command
Xhci driver handles USB transaction errors on transfer events, but transaction errors are possible on address device command completion events as well. The xHCI specification (section 4.6.5) says: A USB Transaction Error Completion Code for an Address Device Command may be due to a Stall response from a device. Software should issue a Disable Slot Command for the Device Slot then an Enable Slot Command to recover from this error. This patch handles USB transaction errors on address command completion events. The related discussion threads can be found through below links. http://marc.info/?l=linux-usb=149362010728921=2 http://marc.info/?l=linux-usb=149252752825755=2 Suggested-by: Mathias NymanSigned-off-by: Lu Baolu --- drivers/usb/host/xhci.c | 5 + 1 file changed, 5 insertions(+) diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index d6b728d..95780f8 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -3822,6 +3822,11 @@ static int xhci_setup_device(struct usb_hcd *hcd, struct usb_device *udev, break; case COMP_USB_TRANSACTION_ERROR: dev_warn(>dev, "Device not responding to setup %s.\n", act); + + ret = xhci_disable_slot(xhci, udev->slot_id); + if (!ret) + xhci_alloc_dev(hcd, udev); + ret = -EPROTO; break; case COMP_INCOMPATIBLE_DEVICE_ERROR: -- 2.7.4
[PATCH v2 5/5] usb: xhci: Handle USB transaction error on address command
Xhci driver handles USB transaction errors on transfer events, but transaction errors are possible on address device command completion events as well. The xHCI specification (section 4.6.5) says: A USB Transaction Error Completion Code for an Address Device Command may be due to a Stall response from a device. Software should issue a Disable Slot Command for the Device Slot then an Enable Slot Command to recover from this error. This patch handles USB transaction errors on address command completion events. The related discussion threads can be found through below links. http://marc.info/?l=linux-usb=149362010728921=2 http://marc.info/?l=linux-usb=149252752825755=2 Suggested-by: Mathias Nyman Signed-off-by: Lu Baolu --- drivers/usb/host/xhci.c | 5 + 1 file changed, 5 insertions(+) diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index d6b728d..95780f8 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -3822,6 +3822,11 @@ static int xhci_setup_device(struct usb_hcd *hcd, struct usb_device *udev, break; case COMP_USB_TRANSACTION_ERROR: dev_warn(>dev, "Device not responding to setup %s.\n", act); + + ret = xhci_disable_slot(xhci, udev->slot_id); + if (!ret) + xhci_alloc_dev(hcd, udev); + ret = -EPROTO; break; case COMP_INCOMPATIBLE_DEVICE_ERROR: -- 2.7.4