Что изменилось с драйверами USB в ядрах Linux 4.0 и новее?

8

С ядрами до 3.19 все мои USB-устройства работают отлично.

При обновлении до 4.0 или более поздней версии некоторые из моих USB-устройств перестают работать, и ядро ​​выдает следующие ошибки:

[    3.369436] usb 9-1: device descriptor read/64, error -62
[    3.593543] usb 9-1: new full-speed USB device number 4 using ohci-pci
[    3.997572] usb 9-1: device not accepting address 4, error -62
[    4.120602] usb 9-1: new full-speed USB device number 5 using ohci-pci
[    4.524792] usb 9-1: device not accepting address 5, error -62
[    4.524911] usb usb9-port1: unable to enumerate USB device
[   15.402105] usb 9-1: new full-speed USB device number 6 using ohci-pci
[   15.530135] usb 9-1: device descriptor read/64, error -62
[   15.759224] usb 9-1: device descriptor read/64, error -62
[   15.983312] usb 9-1: new full-speed USB device number 7 using ohci-pci
[   16.111309] usb 9-1: device descriptor read/64, error -62
[   16.340398] usb 9-1: device descriptor read/64, error -62
[   16.564378] usb 9-1: new full-speed USB device number 8 using ohci-pci
[   16.968454] usb 9-1: device not accepting address 8, error -62
[   17.091555] usb 9-1: new full-speed USB device number 9 using ohci-pci
[   17.495570] usb 9-1: device not accepting address 9, error -62
[   17.495603] usb usb9-port1: unable to enumerate USB device
[   17.673702] usb 9-1: new full-speed USB device number 10 using ohci-pci
[   17.801758] usb 9-1: device descriptor read/64, error -62
[   18.030814] usb 9-1: device descriptor read/64, error -62
[   18.254834] usb 9-1: new full-speed USB device number 11 using ohci-pci
[   18.382858] usb 9-1: device descriptor read/64, error -62
[   18.611902] usb 9-1: device descriptor read/64, error -62
[   18.835977] usb 9-1: new full-speed USB device number 12 using ohci-pci
[   19.240034] usb 9-1: device not accepting address 12, error -62
[   19.363101] usb 9-1: new full-speed USB device number 13 using ohci-pci
[   19.767182] usb 9-1: device not accepting address 13, error -62
[   19.767226] usb usb9-port1: unable to enumerate USB device

Этот конкретный пример был просто дешевым USB-устройством для чтения карт памяти ... Меня это не волнует.

Более важная проблема для меня заключается в том, что приемник Quad DVB-T на моем бэкэнд-боксе mythtv также подвержен той же проблеме, поэтому в данный момент я не могу обновить эту машину до версии 3.19. Это карта PCI-e, которая выглядит как мост от pci-e к usb, и DVB-тюнеры подключены через usb. Я не совсем уверен, но думаю, что это может быть карта PCIe -> PCI -> USB.

Вот детали карты на работающем ядре 3.19:

# lsusb | grep Leadtek
Bus 010 Device 005: ID 0413:6680 Leadtek Research, Inc. 
Bus 010 Device 004: ID 0413:6680 Leadtek Research, Inc. 
Bus 010 Device 003: ID 0413:6680 Leadtek Research, Inc. 
Bus 010 Device 002: ID 0413:6680 Leadtek Research, Inc. 

# dmesg | grep -i DigitalNow| grep pci
[    9.405568] input: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-1/rc/rc1/input17
[    9.405687] rc1: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-1/rc/rc1
[    9.475939] input: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-2/rc/rc2/input22
[    9.476049] rc2: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-2/rc/rc2
[    9.542441] input: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-3/rc/rc3/input24
[    9.542617] rc3: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-3/rc/rc3
[    9.609134] input: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-4/rc/rc4/input26
[    9.609289] rc4: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-4/rc/rc4

# lspci | grep '^0[45]:'
04:00.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI Express-to-PCI Bridge (rev aa)
05:00.0 USB controller: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller (rev 62)
05:00.1 USB controller: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller (rev 62)
05:00.2 USB controller: VIA Technologies, Inc. USB 2.0 (rev 65)

# lspci -vv -s 05:00
05:00.0 USB controller: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller (rev 62) (prog-if 00 [UHCI])
    Subsystem: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 32, Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 26
    Region 4: I/O ports at d020 [size=32]
    Capabilities: [80] Power Management version 2
        Flags: PMEClk+ DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold-)
        Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
    Kernel driver in use: uhci_hcd

    05:00.1 USB controller: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller (rev 62) (prog-if 00 [UHCI])
        Subsystem: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 32, Cache Line Size: 64 bytes
        Interrupt: pin B routed to IRQ 41
        Region 4: I/O ports at d000 [size=32]
        Capabilities: [80] Power Management version 2
            Flags: PMEClk+ DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold-)
            Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Kernel driver in use: uhci_hcd

    05:00.2 USB controller: VIA Technologies, Inc. USB 2.0 (rev 65) (prog-if 20 [EHCI])
        Subsystem: VIA Technologies, Inc. USB 2.0 Controller
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 32, Cache Line Size: 64 bytes
        Interrupt: pin C routed to IRQ 50
        Region 0: Memory at fe500000 (32-bit, non-prefetchable) [size=256]
        Capabilities: [80] Power Management version 2
            Flags: PMEClk+ DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold-)
            Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Kernel driver in use: ehci-pci

Итак, что изменилось в драйверах USB ядра в последнее время? Это ошибка или проблема конфигурации?

Несколько версий ядра назад (3.8) изменилось содержимое USB, так что ehci-hcdего нужно было загружать раньше ehci-pci. initramfs-toolsс тех пор был обновлен, чтобы обрабатывать это автоматически, но у меня все еще есть закомментированные остатки обходного пути в моем /etc/modulesфайле:

# make sure ehci-pci loads immediately after ehci-hcd for kernel 3.8
# (should be handled automagically by initramfs-tools 0.110 now)
#ehci-hcd
#ehci-pci

Является ли это аналогичной ситуацией, которая может быть обработана путем загрузки драйверов в определенном порядке или путем внесения в черный список определенных устаревших драйверов?


Еще некоторые детали аппаратного и программного обеспечения:

Это произошло на нескольких машинах, в том числе:

  • Материнская плата Asus M4A89TD PRO USB3 с процессором AMD Phenom II X6 1090T (рабочая станция)
  • Asus M5A97 с процессором AMD Phenom II X6 1090T (миф фронтэнд)
  • Asus Sabertooth 990FX с процессором AMD Phenom II X6 1090T (рабочая станция и сервер)
  • Asus Sabertooth 990FX с восьмиъядерным процессором AMD FX (tm) -8150 (бэкэнд-миф)

Последний, с FX-8150 (что я и лежал, когда умерла предыдущая материнская плата и мне пришлось ее перестраивать), это мифическая коробка с приемником DigitalNow Quad DVB-T. Первый, M4A89TD Pro, - это машина с дешевым USB-устройством для чтения карт памяти.

Все они имеют по крайней мере 8 ГБ ОЗУ, и все имеют либо nvidia GTX-750 (мифобоксы), либо GTX-560 или GTX-560Ti GPU с использованием проприетарного драйвера nvidia. Все работают под управлением Debian sid с последними ядрами (4.2.x на всем, кроме мифического бэкенда, поскольку это единственный, где USB важен для всего, кроме HID - USB kbd и мышь и даже планшет wacom отлично работают, BTW, на 4.0+ ядра).

Все машины загружаются с 128-256 ГБ SSD в RAID-1, используя XFS для / и ext4 для / boot. Серверная часть mythtv также использует zfsonlinux для массового хранения. Как это комбинированная рабочая станция / сервер.

Я пробовал стандартные ядра Debian, ядра liquorix и скомпилированные на заказ ядра. Все с одинаковым результатом: до 3.19 это нормально. 4.0 и позже ломает мой приемник DVB-T и мое устройство чтения карт памяти.


Обратите внимание: мне не нужны общие знания или информация, которую можно найти за пять минут с помощью Google. Мне нужна конкретная информация о любых известных USB (или других, возможно, связанных) регрессиях в ядрах 4.0+ и, если повезет, патче или обходном пути.

саз
источник
Вы запускаете статическое или динамическое ядро? Динамические средства с модулями. Если вы запускаете динамически, попробуйте загрузить что-то вроде минимальной среды (ядро + initramfs, которая предлагает мгновенное приглашение оболочки) с полностью статически скомпилированным ядром и попробуйте свои устройства. Если они все еще не работают, отправьте сообщение об ошибке в bugzilla ядра.
Я использую модули. как очевидно из моего упоминания /etc/modules. статическое соединение модулей с ядром не будет иметь никакого значения и, скорее всего, ухудшит ситуацию, поскольку у меня не будет возможности изменить порядок загрузки модулей.
Cas
обновление: я только что попробовал ядро ​​linux 4.3 на коробке с мультикартой. без изменений, все еще сломан.
Cas
Если он все еще не работает на 4.3, вы можете смело предположить, что никто не видит проблему или не сообщает об ошибке. Большинство ошибок исправлено .3 выпуском основного цикла ядра. Таким образом, регрессия встроена и не исчезнет, ​​если кто-то не выделит время, чтобы предоставить сопровождающему драйвера все данные, необходимые для решения проблемы, если они могут ее решить. Если у них нет устройства, у вас могут возникнуть проблемы, потому что очень трудно отладить аппаратные проблемы, когда у отладчика его нет.
Lizardx
cas, вам действительно нужно обновить? Если бы я столкнулся с такой проблемой, которую трудно решить прямо сейчас , я бы просто застрял со старым и работающим ядром. Какие оставшиеся проблемы подталкивают вас к обновлению? (только после прочтения комментариев под ответом Lizardx)

Ответы:

1

Это похоже на регрессию ядра в 4.x Linux, по крайней мере для вашего конкретного оборудования.

http://archlinuxarm.org/forum/viewtopic.php?f=53&t=8798

Возможно, в этом коммите, но трудно сказать, так как вы не предоставили никакой дополнительной информации о вашей системе.

https://github.com/torvalds/linux/commit/a0b5cd4ac2d6542d524d8063961bf914b5df1efa

Некоторые системы, по-видимому, испытывают проблемы по крайней мере с USB 3: https://lists.debian.org/debian-kernel/2015/08/msg00066.html

Поэтому реальный вопрос в том, какое у вас оборудование и какое последнее ядро ​​4.x вы пробовали. Возможно, это было решено в недавнем выпуске 4.x. Проблема с usb 2 и 3, или просто 3, или не связана с версией usb? Это поможет сузить его. Ваши данные выглядят так, будто это всего лишь usb2 max в вашей системе.

Ядра регрессии нормальные.

Как я говорю людям, когда они задают этот тип вопросов, новое ядро ​​Linux имеет несколько возможных результатов:

  1. то, что раньше не работало
  2. все осталось в вашей системе
  3. то, что раньше работало, перестало работать
  4. некоторые вещи стали лучше, а некоторые перестали работать

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1455376 Это ошибка Ubuntu с обработкой usb.

Обычно ошибки, которые влияют на вещи, которые используют многие люди, исправляются относительно быстро, поэтому стоит проверить последнюю версию последнего стабильного ядра, которая, как мне кажется, на данный момент находится на уровне 4.3.

Если вы используете Ubuntu, вы можете запустить ядро ​​liquorix, по крайней мере, если это текущая версия Ubuntu, а не LTS, то же самое для нестабильных выпусков Debian.

Просмотр: inxi -bxxx будет полезен, чтобы показать основы вашей системы. INXI устанавливается из большинства дистрибутивов.

Вот список изменений USB от Greg KH для 4.0 / 3.20

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e29876723f7cb7728f0d6a674d23f92673e9f112

  usb: musb: fix device hotplug behind hub
  usb: dwc2: Fix a bug in reading the endpoint directions from reg.
  staging: emxx_udc: fix the build error
  usb: Retry port status check on resume to work around RH bugs
  Revert "usb: Reset USB-3 devices on USB-3 link bounce"
  uhci-hub: use HUB_CHAR_*
  usb: kconfig: replace PPC_OF with PPC
  ehci-pci: disable for Intel MID platforms (update)
  usb: gadget: Kconfig: use bool instead of boolean
  usb: musb: blackfin: remove incorrect __exit_p()
  USB: fix use-after-free bug in usb_hcd_unlink_urb()
  ehci-pci: disable for Intel MID platforms
  usb: host: pci_quirks: joing string literals
  USB: add flag for HCDs that can't receive wakeup requests (isp1760-hcd)
  USB: usbfs: allow URBs to be reaped after disconnection
  cdc-acm: kill unnecessary messages
  cdc-acm: add sanity checks
  usb: phy: phy-generic: Fix USB PHY gpio reset
  usb: dwc2: fix USB core dependencies
  usb: renesas_usbhs: fix NULL pointer dereference in dma_release_channel()

http://kernelnewbies.org/Linux_4.0 показывает полный набор изменений.

https://lkml.org/lkml/2015/6/26/511 это изменения в USB для 4.2-rc1. Как видите, вопрос «что изменилось», вероятно, не совсем правильный вопрос, более полезным было бы определить, была ли проблема решена для вашего оборудования еще в последних выпусках.

Lizardx
источник
1
Вы на самом деле не говорите мне ничего, чего я еще не знаю, это всего лишь общие знания / базовый поиск в Google. Мне нужна конкретная информация об изменениях / ошибках / регрессии в ядрах 4.0 и новее ... и, надеюсь, указатель на патч или хотя бы обходной путь. Отчет об ошибке панели запуска явно относится к другой проблеме, так как относится к ошибке, присутствующей в 3.18, тогда как у меня все в порядке до 3.19, но не в 4.0 или более поздней. Самое последнее ядро, которое я пробовал - 4.2 на Ср 30 сентября. Когда у меня будет время перезагрузить мой мифбокс, я попробую 4.3, но я не ожидаю каких-либо улучшений.
Cas
OTOH, упоминание об ошибке PCI-e интересно и заслуживает внимания ... хотя это еще в апреле и, вероятно, уже в 4.2 (который я пробовал). Согласно github.com/ljalves/linux_media/issues/107, это было исправлено в git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/… за 4.16
cas