[Hardware] USB и прерывания

Olvin olvin на rambler.ru
Пт Май 19 19:54:00 MSD 2006


Начал выходить из строя набортный USB, так я его отключил и купил 
внешний, на PCI. Но вот проблема: невозможно одновременно активно 
использовать видео и USB (например, смотреть фильм с USB-IDE или 
копировать с USB и играть в 3D) - машина виснет намертво. Не помогает ни 
кнопка питания (по ней у меня ОС переходит в runlevel 0), ни 
Alt+SysRQ+... В логи даже ничего доложить не может - пусто в них.

Подробности:

Soft:
ALM2.4+updates2006.04.21
lsmod|grep usb:
usb-uhci               21708   0  (unused)
usbcore                58528   1  [usb-uhci]
lsmod|grep hci:
usb-uhci               21708   0  (unused)
usbcore                58528   1  [usb-uhci]

Hard:

MB на чипсете Via K7VTA3/KT333 V5.0 (пишу то, что на материнской плате 
мануала нет).
Видео NV GF4 MX440 AGP 8x 64Mb 128bit TV-out марки Palit
драйвера из мастера или его апдейтов.
PCI-USB, купленный мною, на чипе Via VT6212L, видимо, noname, 
четырёхпортовый контроллер.

Теперь самое вкусное, собственно, по сути вопроса.

cat /proc/interrupts:

работает только встроенный USB, всё в норме, проблем особых нет:

            CPU0
   0:      14057    IO-APIC-edge  timer
   1:        179    IO-APIC-edge  keyboard
   4:        440    IO-APIC-edge  serial
   8:          2    IO-APIC-edge  rtc
   9:          0   IO-APIC-level  acpi
  12:        489    IO-APIC-edge  PS/2 Mouse
  14:      10549    IO-APIC-edge  ide0
  15:          6    IO-APIC-edge  ide1
  16:      12970   IO-APIC-level  nvidia
  17:          0   IO-APIC-level  CMI8738-MC6
  19:        388   IO-APIC-level  eth0
  21:          0   IO-APIC-level  usb-uhci, usb-uhci, usb-uhci, ehci_hcd
NMI:          0
LOC:      14010
ERR:          0
MIS:          0

работает встроенный USB и внешний, вышеозначенная проблема присутствует 
во всей красе:

            CPU0
   0:      16472    IO-APIC-edge  timer
   1:        325    IO-APIC-edge  keyboard
   4:        503    IO-APIC-edge  serial
   8:          2    IO-APIC-edge  rtc
   9:          0   IO-APIC-level  acpi
  12:        625    IO-APIC-edge  PS/2 Mouse
  14:      14685    IO-APIC-edge  ide0
  15:          6    IO-APIC-edge  ide1
  16:      15270   IO-APIC-level  ehci_hcd, nvidia
  17:          0   IO-APIC-level  CMI8738-MC6
  18:          0   IO-APIC-level  usb-uhci
  19:        448   IO-APIC-level  usb-uhci, eth0
  21:          0   IO-APIC-level  usb-uhci, usb-uhci, usb-uhci, ehci_hcd
NMI:          0
LOC:      16426
ERR:          0
MIS:          0

Делаем rmmod ehci_hcd:

            CPU0
   0:      18268    IO-APIC-edge  timer
   1:        536    IO-APIC-edge  keyboard
   4:        566    IO-APIC-edge  serial
   6:          5    IO-APIC-edge  floppy
   8:          2    IO-APIC-edge  rtc
   9:          0   IO-APIC-level  acpi
  12:        625    IO-APIC-edge  PS/2 Mouse
  14:      14782    IO-APIC-edge  ide0
  15:         63    IO-APIC-edge  ide1
  16:      17705   IO-APIC-level  nvidia
  17:          0   IO-APIC-level  CMI8738-MC6
  18:          0   IO-APIC-level  usb-uhci
  19:        543   IO-APIC-level  usb-uhci, eth0
  21:          0   IO-APIC-level  usb-uhci, usb-uhci, usb-uhci
NMI:          0
LOC:      18221
ERR:          0
MIS:          0

Зависаний нет, но и USB2.0 - тоже, т.е. скорость передачи данных 
800-900Kbyte/sec

Получается как бы конфликт по прерываниям. Отсюда вопрос: как в linux 
разнести разные (заранее известные) устройства на разные прерывания?

Или по-другому: как не меняя оборудования решить проблему?




Подробная информация о списке рассылки Hardware