Bug 3854

Summary: Система виснет при загрузке модуля usb-ohci
Product: Sisyphus Reporter: Yury Aliaev <mutabor>
Component: kernel-image-std-upAssignee: Sergey Vlasov <vsu>
Status: CLOSED WORKSFORME QA Contact: qa-sisyphus
Severity: critical    
Priority: P2 CC: mike
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
lspci -vv output
none
lspci -vv output for kernel 2.2.22
none
cat /proc/interrupts output at 2.4.25
none
cat /proc/interrupts output at 2.2 series kernel (see comments)
none
lsmod output at 2.2.19 kernel
none
A fragment of dmesg output for 2.2.22
none
cat /proc/bus/usb/devices output
none
dmesg from 2.2.22 kernel (after usb modules loaded and usbdevfs mounted)
none
dmesg from 2.4.25 kernel
none
dmesg output from 2.6.5 kernel
none
lspci -vv output under 2.6.5 kernel runned
none
cat /proc/bus/usb/devices output with 2.6.5 kernel run and usbdevfs mounted
none
PIRQ table dumper
none
Output of the above script at kernel 2.2.22
none
the same for 2.4.22 and 2.6.5 kernels (no difference)
none
lspci -vv -xxx -s ... result at 2.2.22 kernel
none
the same for 2.6.5 kernel
none
2.6.5, "setpci" command applied
none
dmesg from 2.6.5 kernel after "setpci" command implementation, ohci-hcd loading and usbdevfs mounting
none
01_pci-ali-m1533-check-pirqs.patch
none
dmesg от пропатченного 2.6.16
none
Вывод lspci от пропатченного 2.6.16 none

Description Yury Aliaev 2004-03-23 12:47:15 MSK
При выполнении команды modprobe usb-ohci (или service usb start) происходит
полное зависание системы. Никаких диагностических сообщений не выводится, даже
если все сообщения ядра перенаправлены на текущую консоль. Клавиатура и мышь
отключаются полностью, курсор в framebuffer'ной консоли перестаёт мигать.
Перезагрузка возможна только с помощью кнопки "Reset". Ошибка присутствует в
ядрах серии 2.4 начиная, по крайней мере, с 2.4.20 (проверялись 2.4.20, 2.4.22 и
2.4.25) и отсутсвует в ядрах серии 2.2.

Steps to Reproduce:
1. Исполнить команду modprobe usb-ohci на системе, в состав которой входит
материнская плата на базе чипсета Ali Aladdin V.

Actual Results:  
Полное зависание системы.

Expected Results:  
Нормальная работа подсистемы usb.
Comment 1 Yury Aliaev 2004-03-23 12:51:43 MSK
Created attachment 361 [details]
lspci -vv output

Вывод команды lspci -vv системы, на которой проявляется ошибка.
Comment 2 Sergey Vlasov 2004-03-23 13:42:02 MSK
А в BIOS есть какие-нибудь опции по поводу USB?

Отличается ли вывод lspci -vv для 2.2 и 2.4? Что в /proc/interrupts?

Опция pci=biosirq не меняет ситуацию?
Comment 3 Yury Aliaev 2004-03-26 13:33:45 MSK
Created attachment 367 [details]
lspci -vv output for kernel 2.2.22
Comment 4 Yury Aliaev 2004-03-26 13:37:09 MSK
Created attachment 368 [details]
cat /proc/interrupts output at 2.4.25
Comment 5 Yury Aliaev 2004-03-26 13:42:02 MSK
Created attachment 369 [details]
cat /proc/interrupts output at 2.2 series kernel (see comments)
Comment 6 Yury Aliaev 2004-03-26 13:57:17 MSK
Created attachment 370 [details]
lsmod output at 2.2.19 kernel

1) Содержимое /proc/interrupts для ядер серии 2.2 получено слегка нечестно:
установленное ядро 2.2.22 не имеет модулей usb (на момент его компиляции они
мне были не нужны), а времени скомпилировать их пока не было. Поэтому был взят
вывод cat /proc/interrupts для 2.2.22 и добавлена строчка про usb из
содержимого /proc/interrupts для ядра 2.2.19, запускающегося при инсталляции
Junior 1.1. Если надо, я могу скомпилировать модули usb для 2.2.22 и проверить.

2) опция pci=biosirq при загрузке ядер серии 2.4 ничего не меняет (всё как
висло, так и продолжает :( ).
3) как видно, вывод lspci для ядер 2.4.25 и 2.2.22 отличается. Главное, что я
заметил -- IRQ 0 для контроллера IDE в 2.2.22 вместо IRQ 5 в 2.4.25. Кстати,
для ядер серии 2.4 у меня наблюдалась ещё одна ошибка: происходило зависание (с
выбросом oops и миганием светодиодов клавиатуры) при загрузке модуля ALSA для
моей звуковой карты (причём в 2.2.22 было все нормально, при той же верии
ALSA). Её удалось устранить перестановкой зв. карты в соседний разъём PCI. При
этом её прерывание сменилось с 5(!) на 11.
Comment 7 Yury Aliaev 2004-04-01 12:14:10 MSD
Created attachment 374 [details]
A fragment of dmesg output for 2.2.22
Comment 8 Yury Aliaev 2004-04-01 12:20:13 MSD
Created attachment 375 [details]
cat /proc/bus/usb/devices output

Собрал модули USB для 2.2.22. Как и ожидал, они загрузились без проблем, причём
содеожимое /proc/interrupts полностью совпало с приведённым выше ("нечестным").
usbfs смонтировалась успешно, содержимое /proc/bus/usb/devices прилагается.

P.S. Пробовал следующую фишку: в BIOS'е запретил использование IRQ 5 для PCI, в
рез-те чего контроллер USB пересел на IRQ 9 (согласно табличке, выдаваемой при
включении машины), однако 2.4.25 продолжает виснуть при загрузке модуля
usb-ohci (равно как с pci=biosirq, так и без).
Comment 9 Sergey Vlasov 2004-04-01 13:20:36 MSD
А если запретить и IRQ9? Может быть, удастся загнать USB на какое-то из
работающих прерываний (если тут дело в прерываниях).

И давайте полный вывод dmesg от 2.2.22 и 2.4.25.

Ещё интерес представляет поведение ядер 2.6.x на этой машине.  В 2.6.x
предусмотрена защита от "залипших" прерываний: обработчики прерывания,
зарегистрированные драйверами, возвращают статус - действительно ли их
устройство выставляло прерывание; если запрос прерывания не обработал ни один
драйвер, после некоторого количества вызовов IRQ отключается полностью -
устройства, использовавшие эту линию, перестают работать, но хотя бы система
полностью не виснет.
Comment 10 Yury Aliaev 2004-04-05 14:02:53 MSD
Created attachment 378 [details]
dmesg from 2.2.22 kernel (after usb modules loaded and usbdevfs mounted)
Comment 11 Yury Aliaev 2004-04-05 14:07:29 MSD
Created attachment 379 [details]
dmesg from 2.4.25 kernel

Если запретить 5 и 9 прерывания в BIOS, USB садится на 10 (туда же, куда и SCSI
host adapter). При загрузке 2.4.25 в этом случае имеем мёртвый вис (машина
реагирует только на кнопочку "Reset") после строчки "ncr53c810-0: ID 7,
Fast-10, Parity Checking".
Comment 12 Yury Aliaev 2004-04-16 12:24:28 MSD
Created attachment 383 [details]
dmesg output from 2.6.5 kernel
Comment 13 Yury Aliaev 2004-04-16 12:28:03 MSD
Created attachment 384 [details]
lspci -vv output under 2.6.5 kernel runned
Comment 14 Yury Aliaev 2004-04-16 12:43:10 MSD
Created attachment 385 [details]
cat /proc/bus/usb/devices output with 2.6.5 kernel run and usbdevfs mounted

С ядром 2.6.5 наблюдается следующая картина:
modprobe ohci-hcd
<задержка на долю секунды>
disabling IRQ #5

При этом модули usbcore и ohci-hcd загружаются и usbdevfs монтируется. В dmesg
появляется некая трассировка вызовов (см.). Если в BIOS запретить IRQ5, usb
пересаживается на 9, ситуация остаётся той же с точностью до замены номера 5 на
9. Если заретить и 9, usb cадится на 10, туда же, куда и SCSI. При загрузке
ядра имеем красоту, аналогичную приведённую в dmesg, а за ней:
<0> Kernel panic: Fatal exception in interrupt
In interrupt handler - not syncing

И мёртвый вис...

Я подумал бы, что глючит железо, если бы не 2.2.22 -- оно нормально работает,
даже если usb сидит на IRQ10, причём в /proc/interrupts так и сказано:
IRQ10 ncr53c8xx, usb-ohci
Comment 15 Sergey Vlasov 2004-04-26 17:18:53 MSD
Created attachment 397 [details]
PIRQ table dumper

Нашёл программку для анализа PCI IRQ routing:

http://www.kernelnewbies.org/scripts/dump_pirq.pl

(её нужно немного подправить - lspci у нас лежит не в /sbin; прицеплен уже
исправленный вариант).

Попробуйте прогнать её под разными ядрами и покажите вывод.
Comment 16 Yury Aliaev 2004-05-21 16:09:46 MSD
Created attachment 408 [details]
Output of the above script at kernel 2.2.22
Comment 17 Yury Aliaev 2004-05-21 16:16:34 MSD
Created attachment 409 [details]
the same for 2.4.22 and 2.6.5 kernels (no difference)

Для ядер 2.4.22 и 2.6.5 вывод PIRQ table dumper'а идентичен. После загрузке
модуля usb-ohci (для ядра 2.2.22) или ohci-hcd (для 2.6.5) монтирования
usbdevfs ничего не меняется.
Comment 18 Sergey Vlasov 2004-05-21 17:13:25 MSD
OK, ещё представляет интерес вывод lspci -vv -xxx -s 00:07.0 для 2.2 и 2.6.

Также попробуйте на 2.6 перед modprobe ohci-hcd сделать
setpci -s 00:07.0 4a.b=00
Comment 19 Sergey Vlasov 2004-05-21 17:15:17 MSD
Да, lspci (и тем более setpci) необходимо запускать от root.
Comment 20 Yury Aliaev 2004-05-27 11:40:34 MSD
Created attachment 417 [details]
lspci -vv -xxx -s ... result at 2.2.22 kernel
Comment 21 Yury Aliaev 2004-05-27 11:42:00 MSD
Created attachment 418 [details]
the same for 2.6.5 kernel
Comment 22 Yury Aliaev 2004-05-27 11:43:35 MSD
Created attachment 419 [details]
2.6.5, "setpci" command applied
Comment 23 Yury Aliaev 2004-05-27 11:48:33 MSD
Created attachment 420 [details]
dmesg from 2.6.5 kernel after "setpci" command implementation, ohci-hcd loading and usbdevfs mounting

Итак, после прогона команды setpci с указанными параметрами при загрузке модуля
ohci-hcd перестали появляться сообщения "disabling IRQ" и сопровождающий их
вывод некоей трассировки в dmesg. Также и на ядре 2.4.22 после применения
команды setpci загрузка модулей стала происходить без зависания и каких-либо
сообщений об ошибках. Реальная работоспособность подсистемы USB ещё не
проверялась.
Comment 24 Yury Aliaev 2006-04-27 12:07:12 MSD
2.6.16 -- всё как было, так и осталось...
Comment 25 Sergey Vlasov 2006-04-27 16:21:25 MSD
Проблема в том, что BIOS содержит неверную таблицу прерываний PCI, где для
устройства 00:0f.0 (IDE) указано использование link 0x05 (INT5), в то время как
чип M1533 имеет только 4 входа для PCI IRQ (точнее, там есть и режим, в котором
поддерживается подключение 8 входов IRQ, но для этого требуются внешние
компоненты, и в данном случае такой режим не используется).

При этом собственно для USB прерывание указано правильно (link 0x59
соответствует младшим 4 битам регистра 0x74).

В принципе можно попробовать придумать по этому поводу какую-то проверку
(например, запретить установку векторов для link 5..8, если не включен режим
работы с использованием 8 входов PCI IRQ).
Comment 26 Sergey Vlasov 2006-04-27 17:34:53 MSD
Created attachment 1469 [details]
01_pci-ali-m1533-check-pirqs.patch

Например, можно попробовать такой патч (для 2.6.16, но ложится и на 2.6.14).  У
вас есть возможность собрать локально ядро с этим патчем для тестирования, или
мне где-то выложить собранную версию?
Comment 27 Michael Shigorin 2006-07-18 20:36:55 MSD
Юр, это всё та же причудливая мамка?
Comment 28 Yury Aliaev 2006-09-04 14:09:54 MSD
Сорри за несвоевременную реакцию! В ближайшее время попробую приложить патч к
альтовскому 2.6.16 (есть 2.6.16-wks26-up-alt3, думаю, что если заработает на
нём, то и на alt8, а также std26-up-alt9 тоже должно) и проверю.

Отвечаю Мише: да, мамка у меня аж с 2000 года, и в общем-то пока устраивает :)
Если ещё usb на 2.6 заработает -- совсем хокей будет.
Comment 29 Yury Aliaev 2006-09-11 11:53:08 MSD
Created attachment 1618 [details]
dmesg от пропатченного 2.6.16

С патчем не виснет, но и не работает. Модули загружаются, но если подключить
usb-устройство, то ядро жалуется на обрубленное прерывание (см. dmesg), и
дальше этого ничего не идёт. В то же время если произнести заклинание
"setpci... ", и дальше грузить модули usb, то устройства работают нормально
(проверял на флэшке, файлы читаются и пишутся с нормальной скоростью).
Comment 30 Sergey Vlasov 2006-09-11 17:21:22 MSD
(In reply to comment #29)
> С патчем не виснет, но и не работает.

А что выдаёт lspci -vv -xxx -s 00:07.0 на пропатченном ядре (без setpci)?
Comment 31 Yury Aliaev 2006-09-18 11:42:05 MSD
Created attachment 1633 [details]
Вывод lspci от пропатченного 2.6.16

Это вывод lspci от пропатченного 2.6.16(-wks26-up-alt3). Он оказался ровно
таким же, как и от непропатченного ядра после прокатывания команды setpci.
Другое дело, что на непропатченном ядре после setpci usb начинает работать...
Comment 32 Michael Shigorin 2006-12-18 14:28:07 MSK
(In reply to comment #28)
> Отвечаю Мише: да, мамка у меня аж с 2000 года, и в общем-то пока устраивает :)
Просто мне кажется, что она уже больше времени съела, чем стоит.  Может, тебе
KT133+Duron 800 посадить на поезд?
Comment 33 Yury Aliaev 2006-12-19 12:16:56 MSK
Знаешь, я ничего не хочу менять в своей машинке чисто из эстетических
соображений :-) (Вроде АТ'шного корпуса образца 9х года, к которому привык как к
родному) К тому же вырабатывается полезная привычка не пользоваться жирным
тормозным софтом... а для остального она меня устраивает на 100%! И, главное,
сразу видно, в какую сторону изменилось то или иное приложение после очередного
обновления. А так, проапгрейдиться я мог бы давно кучу раз практически на
холяву... но не хочу! Вот такой я, северный олень! ;-D
Comment 34 Michael Shigorin 2006-12-31 20:49:00 MSK
Знаешь, тогда это IMHO INVALID. :) (не, я помню, что 2.2.22 нормально работает
-- вот как вариант и :)
Comment 35 Michael Shigorin 2007-06-27 11:11:11 MSD
(я понимаю, что на НГ ты багзилу не читал, но -- му-та-бор! :)
Comment 36 Yury Aliaev 2007-06-27 18:04:29 MSD
Я уже давно подставил рекомендованный костылик в виде запуска setpci перед
hotplug и с тех пор счастлив настолько, что даже забыл про существование
костыля. А лезть самому в ядро с каждым днём хочется всё меньше. Кстати, если бы
в 2.2.22 работало всё, что мне нужно (или не нужно, но приходится ставить, чтобы
не отставать от моды), то я, пожалуй был бы ещё более счастлив, прямо как слон
после ведёрной клизЬмы.
Comment 37 Michael Shigorin 2007-11-10 22:44:30 MSK
Ну вот и аюшки, предлагаю WORKSFORME. :)
Comment 38 Yury Aliaev 2007-11-21 16:28:43 MSK
Ладушки, если будет время и дойдут руки, то попробую что-нибудь предпринять в
этом направлении... хотя бы потрепать нервы kernel.org'у ;-D А раз ни у кого не
вылезло, значит, действительно это мнуспецифичное дело.