Apa yang berubah dengan driver USB di 4.0 dan kernel Linux yang lebih baru?

8

Dengan kernel hingga 3,19, semua perangkat USB saya berfungsi dengan baik.

Saat memutakhirkan ke 4.0 atau lebih baru, beberapa perangkat USB saya berhenti bekerja dan kernel menghasilkan kesalahan seperti ini:

[    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

Contoh khusus itu hanya pembaca kartu memori USB murah .... Saya tidak terlalu peduli tentang itu.

Masalah yang lebih penting bagi saya adalah bahwa penerima Quad DVB-T pada kotak backend mythtv saya juga mengalami masalah yang sama, jadi saya tidak dapat memutakhirkan mesin yang melewati 3,19 saat ini. Ini adalah kartu PCI-e, yang terlihat seperti semacam pci-e to usb bridge, dan tuner DVB terpasang melalui usb. Saya tidak sepenuhnya yakin tetapi saya pikir itu mungkin sebenarnya PCIe -> PCI -> kartu USB.

Berikut adalah detail kartu pada kernel 3.19 yang berfungsi:

# 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

Jadi, apa yang berubah pada driver USB kernel baru-baru ini? Apakah ini bug, atau ini masalah konfigurasi?

Beberapa versi kernel yang lalu (3.8), USB berubah sehingga ehci-hcdharus dimuat sebelumnya ehci-pci. initramfs-toolssejak itu telah ditingkatkan untuk menangani hal itu secara otomatis, tetapi saya masih memiliki sisa-sisa solusi yang dikomentari dalam /etc/modulesfile saya :

# 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

Apakah ini situasi yang serupa, yang dapat ditangani oleh memuat driver dalam urutan tertentu atau dengan memasukkan daftar hitam driver usang tertentu?


Beberapa perincian perangkat keras dan lunak:

Ini telah terjadi pada beberapa mesin termasuk:

  • Motherboard Asus M4A89TD PRO USB3 dengan Prosesor AMD Phenom II X6 1090T (workstation)
  • Asus M5A97 dengan Prosesor AMD Phenom II X6 1090T (frontend mitos)
  • Asus Sabertooth 990FX dengan Prosesor AMD Phenom II X6 1090T (workstation dan server)
  • Asus Sabertooth 990FX dengan AMD FX (tm) -8150 Prosesor Delapan-Inti (mitos backend)

Yang terakhir, dengan FX-8150 (yang merupakan tempat saya tergeletak ketika motherboard sebelumnya mati dan saya harus membangunnya kembali), adalah kotak mitos dengan DigitalNow Quad DVB-T Receiver. Yang pertama, M4A89TD Pro, adalah mesin dengan pembaca kartu memori USB yang murah.

Semua memiliki setidaknya 8GB RAM, dan semuanya memiliki nvidia GTX-750 (kotak mitos) atau GTX-560 atau GTX-560Ti GPU, menggunakan driver nvidia berpemilik. Semua menjalankan sisi Debian, dengan kernel baru-baru ini (4.2.x pada segalanya tetapi mitos backend karena hanya itu satu-satunya di mana USB penting untuk apa pun kecuali HID - USB kbd dan mouse dan bahkan tablet wacom berfungsi dengan baik, BTW, pada 4.0+ kernel).

Semua mesin boot dari 128-256GB SSD di RAID-1 menggunakan XFS untuk / dan ext4 untuk / boot. Backend mythtv juga menjalankan zfsonlinux untuk penyimpanan massal. Seperti halnya workstation / server gabungan.

Saya telah mencoba kernel stok debian, kernel liquorix, dan kernel yang dikompilasi khusus. Semua dengan hasil yang sama: hingga 3,19 baik-baik saja. 4.0 dan kemudian memecah penerima DVB-T dan pembaca kartu memori saya.


Harap dicatat: Saya tidak mengejar pengetahuan umum, atau informasi yang dapat ditemukan dalam lima menit dengan google. Saya mencari informasi spesifik tentang setiap regresi USB yang diketahui (atau kemungkinan terkait lainnya) di kernel 4.0+ dan, jika beruntung, patch atau solusi.

cas
sumber
Apakah Anda menjalankan kernel statis atau dinamis? Dinamis berarti dengan modul. Jika Anda menjalankan dinamis, coba boot ke sesuatu seperti lingkungan minimal (kernel + initramfs yang menawarkan prompt shell secara instan) dengan kernel yang sepenuhnya terkompilasi secara statis dan coba perangkat Anda. Jika masih gagal, ajukan bug di kernel bugzilla.
saya menggunakan modul. seperti yang jelas dari penyebutan saya tentang /etc/modules. menautkan modul ke kernel secara statis tidak akan membuat perbedaan dan kemungkinan akan memperburuk keadaan dengan memberi saya tidak ada kesempatan untuk mengubah urutan modul yang dimuat.
cas
pembaruan: Saya baru saja mencoba linux kernel 4.3 pada kotak dengan pembaca multi-kartu. tidak ada perubahan, masih rusak.
cas
Jika masih rusak pada 4.3 Anda dapat dengan aman berasumsi bahwa tidak ada yang melihat masalah atau melaporkan bug. Sebagian besar bug diperbaiki oleh rilis .3 dari siklus kernel utama. Jadi regresi sudah ada di dalam, dan tidak akan hilang tanpa seseorang meluangkan waktu untuk menyediakan semua data yang dibutuhkan pengemudi untuk mengatasi masalah tersebut, jika mereka dapat menyelesaikannya. Jika mereka tidak memiliki perangkat, Anda mungkin berada dalam masalah, karena sangat sulit untuk men-debug masalah perangkat keras ketika orang yang melakukan debug tidak memilikinya.
Lizardx
cas, apakah Anda benar-benar diminta untuk meningkatkan? Jika saya menghadapi masalah seperti itu yang sulit diselesaikan sekarang , saya hanya akan terjebak dengan kernel lama dan berfungsi. Masalah apa yang tersisa yang mendorong Anda untuk meningkatkan? (setelah membaca komentar di bawah jawaban Lizardx)

Jawaban:

1

Ini terdengar seperti regresi kernel di Linux 4.x, setidaknya untuk perangkat keras spesifik Anda.

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

Mungkin ada di komit ini, tetapi sulit untuk mengatakan karena Anda tidak memberikan informasi lebih lanjut tentang sistem Anda.

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

Beberapa sistem tampaknya mengalami masalah dengan setidaknya USB 3: https://lists.debian.org/debian-kernel/2015/08/msg00066.html

Jadi pertanyaan sebenarnya adalah, apa perangkat keras Anda, dan apa kernel 4.x terbaru yang Anda coba. Ini mungkin telah diselesaikan dalam rilis 4.x terbaru. Apakah masalah dengan usb 2 dan 3, atau hanya 3, atau tidak terkait dengan versi usb? Itu akan membantu mempersempitnya. Data Anda sepertinya hanya USB2 maks di sistem Anda.

Regresi kernel normal.

Seperti yang saya katakan kepada orang-orang ketika mereka mengajukan pertanyaan jenis ini, kernel linux baru memiliki beberapa hasil yang mungkin:

  1. sesuatu yang tidak berfungsi sebelum berhasil sekarang
  2. semuanya tetap sama di sistem Anda
  3. sesuatu yang berhasil sebelumnya, berhenti bekerja
  4. beberapa hal menjadi lebih baik, dan beberapa hal berhenti bekerja

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1455376 Itu adalah bug Ubuntu dengan penanganan usb.

Biasanya bug yang mempengaruhi hal-hal yang banyak orang gunakan akan diperbaiki secara relatif cepat, jadi ada baiknya memeriksa rilis terbaru dari kernel stabil terbaru, yang saya pikir saat ini berada pada 4.3.

Jika Anda menggunakan ubuntu, Anda dapat menjalankan kernel liquorix, setidaknya jika itu adalah ubuntu saat ini, bukan LTS, sama untuk rilis debian, yang tidak stabil.

Melihat: inxi -bxxx akan sangat membantu untuk menunjukkan dasar-dasar sistem Anda. inxi dapat diinstal dari kebanyakan repositori distro.

Berikut daftar perubahan USB Greg KH untuk 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 menunjukkan set perubahan penuh.

https://lkml.org/lkml/2015/6/26/511 itulah perubahan di USB untuk 4.2-rc1. Seperti yang Anda lihat, menanyakan 'apa yang telah berubah' mungkin bukan pertanyaan yang tepat, lebih berguna untuk menentukan apakah masalah telah dipecahkan untuk perangkat keras Anda dalam rilis terbaru.

Lizardx
sumber
1
Anda benar-benar tidak memberi tahu saya apa pun yang belum saya ketahui, ini semua hanya pengetahuan umum / hal-hal dasar googling. Saya membutuhkan informasi spesifik tentang perubahan / bug / regresi di 4.0 dan kernel yang lebih baru ... dan semoga pointer ke patch atau setidaknya solusi. Laporan bug launchpad jelas tentang masalah yang berbeda karena mengacu pada bug yang ada di 3.18 sedangkan tambang saya OK untuk semuanya hingga 3.19 tetapi tidak pada 4.0 atau lebih baru. Kernel terbaru yang saya coba adalah 4.2 pada Rabu 30 September. Ketika saya punya waktu untuk reboot kotak mitos saya, saya akan mencoba 4.3 tapi saya tidak mengharapkan perbaikan.
cas
OTOH, penyebutan bug PCI-e menarik dan layak ditindaklanjuti ... meskipun itu jauh di bulan April dan mungkin sudah di 4.2 (yang telah saya coba). Menurut github.com/ljalves/linux_media/issues/107 diperbaiki di git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/… untuk 4.16
cas