Bug 212751

Summary: acm_port_activate - usb_submit_urb(ctrl irq) failed after kernel update
Product: Drivers Reporter: Johann Wilhelm (johann.wilhelm)
Component: USBAssignee: Default virtual assignee for Drivers/USB (drivers_usb)
Status: RESOLVED PATCH_ALREADY_AVAILABLE    
Severity: normal CC: alex.wellmann, m.mroz
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 5.10.30 Subsystem:
Regression: No Bisected commit-id:

Description Johann Wilhelm 2021-04-22 16:32:51 UTC
Something between 5.10.26 and 5.20.30 broke (at least) the USB CDC implementation by ST Microsystems on their STM32 devices.

On opending of the device following error occurs:
[ 1333.790160] cdc_acm 1-10:1.0: acm_port_activate - usb_submit_urb(ctrl irq) failed


5.10.26 works - 5.10.30 does not.

Tested on the 2 identical devices with 2 different firmware (read: different firmware from 2 different developers) on different ports (USB3&USB2) with and without hub.

Additionally, someone else reports similar problems here: https://forum.manjaro.org/t/usb-device-dev-ttyacm0-throws-i-o-error-on-connect/61385


lsusb dump under 5.10.30:

Bus 001 Device 016: ID 0483:5740 STMicroelectronics Virtual COM Port
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            2 Communications
  bDeviceSubClass         2 Abstract (modem)
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0483 STMicroelectronics
  idProduct          0x5740 Virtual COM Port
  bcdDevice            2.00
  iManufacturer           1 STMicroelectronics
  iProduct                2 STM32 Virtual ComPort
  iSerial                 3 204E37773453
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0043
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         2 Communications
      bInterfaceSubClass      2 Abstract (modem)
      bInterfaceProtocol      1 AT-commands (v.25ter)
      iInterface              0 
      CDC Header:
        bcdCDC               1.10
      CDC Call Management:
        bmCapabilities       0x00
        bDataInterface          1
      CDC ACM:
        bmCapabilities       0x02
          line coding and serial state
      CDC Union:
        bMasterInterface        0
        bSlaveInterface         1 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              16
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0001
  Self Powered
Comment 1 Johan Hovold 2021-04-23 08:31:52 UTC
On Thu, Apr 22, 2021 at 04:32:51PM +0000, bugzilla-daemon@bugzilla.kernel.org wrote:
> https://bugzilla.kernel.org/show_bug.cgi?id=212751
> 
>             Bug ID: 212751
>            Summary: acm_port_activate - usb_submit_urb(ctrl irq) failed
>                     after kernel update
>            Product: Drivers
>            Version: 2.5
>     Kernel Version: 5.10.30
>           Hardware: All
>                 OS: Linux
>               Tree: Mainline
>             Status: NEW
>           Severity: normal
>           Priority: P1
>          Component: USB
>           Assignee: drivers_usb@kernel-bugs.kernel.org
>           Reporter: johann.wilhelm@wilhelm.consulting
>         Regression: No
> 
> Something between 5.10.26 and 5.20.30 broke (at least) the USB CDC
> implementation by ST Microsystems on their STM32 devices.
> 
> On opending of the device following error occurs:
> [ 1333.790160] cdc_acm 1-10:1.0: acm_port_activate - usb_submit_urb(ctrl irq)
> failed
> 
> 
> 5.10.26 works - 5.10.30 does not.

This is likely due to commit 6069e3e927c8 ("USB: cdc-acm: untangle a
circular dependency between callback and softint") which had a bug that
was just fixed by commit a8b3b519618f ("USB: CDC-ACM: fix
poison/unpoison imbalance").

You can try applying the latter yourself but it will otherwise show up
in stable soon.

Johan
Comment 2 Johann Wilhelm 2021-04-23 10:25:37 UTC
I applied the patch to 5.10.30, and it works again!

Thanks,

Johann
Comment 3 alex.wellmann 2021-05-27 12:54:53 UTC
Can confirm the issue on 5.11.0-17 as well (Ubuntu)
Comment 4 Mateusz 2021-06-10 11:09:51 UTC
Found the same issue on ubuntu 18.04 : 4.15.0-144.
It started to work properly when tried running at 4.15.0-143.