Page 1 of 4

2 акт. обработчика PCI IRQ на разных линиях вешают систему

Posted: Thu Jul 21, 2011 11:33 am
by Serge
Народ, а можете потестить работу в паре со звуком ? Я столкнулся с тем, что два активных обработчика PCI IRQ на разных линиях вешают систему. По отдельности всё работает как надо. Выглядит примерно так:

ставится обработчик для устройства А на irq5
обрабатывается прерывание на irq5
ставится обработчик для устройства В на irq10
запрос прерывания по линии 10
???
FAIL.


Тема выделена из Тестируем USB OHCI controller

Re: Тестируем USB OHCI controller

Posted: Thu Jul 21, 2011 12:21 pm
by Mario
Т.е. запустить на проигрывание плеер и начать активно использовать USB устройства?

Re: Тестируем USB OHCI controller

Posted: Thu Jul 21, 2011 12:28 pm
by art_zh
Serge wrote:ставится обработчик для устройства А на irq5
обрабатывается прерывание на irq5
ставится обработчик для устройства В на irq10
запрос прерывания по линии 10
???
FAIL.

[Вопрос снят - как-то сразу не въехал о чем речь :oops: ]

Re: Тестируем USB OHCI controller

Posted: Thu Jul 21, 2011 12:45 pm
by SoUrcerer
Проверил на edubook,плейер +мышь,вроде проблем не замечаю.

Re: Тестируем USB OHCI controller

Posted: Thu Jul 21, 2011 12:49 pm
by Serge
Пример не совсем точный.
Подозреваю что всё виснет если линии подключены к одному контроллеру master или slave.

Re: Тестируем USB OHCI controller

Posted: Thu Jul 21, 2011 1:08 pm
by Mario
Ну, так предложи правильную методику тестирования, а то гадания на кофейной гуще.

Re: Тестируем USB OHCI controller

Posted: Thu Jul 21, 2011 1:15 pm
by Serge
Какая методика ? Надо статистику собрать виснет - не виснет, какие линии используются.

Re: Тестируем USB OHCI controller

Posted: Thu Jul 21, 2011 1:31 pm
by yogev_ezra
Serge wrote:Какая методика ? Надо статистику собрать виснет - не виснет, какие линии используются.
В смысле, скажи как проверить, чтобы
Serge wrote:линии подключены к одному контроллеру master или slave.

Re: Тестируем USB OHCI controller

Posted: Thu Jul 21, 2011 2:11 pm
by Serge
yogev_ezra

Не важно, это только предположение.

Предлагаемый метод научного тыка:
Взять таблицу PCIDEV с dev_id контроллеров и номерами irq.
Подключить как можно больше usв мышек и клавиатур, так чтобы на каждой линии было по устройству. Если два контроллера делят одну линию достаточно занять только один. Какие линии заняты можно посмотреть в диспетчере устройств.
Загрузить Колибри и посмотреть как всё это работает.

Re: Тестируем USB OHCI controller

Posted: Thu Jul 21, 2011 3:52 pm
by Serge
Сделал тесты со своим драйвером

Code: Select all

контроллер устройство   IRQ
24D5     нет              5
24D2     мышь Genius      5
2dD4     клавиатура       4
24D7     мышь LS1         11
AC97     звук             3
Условия для теста идеальные. Четыре контроллера занимают три линии и не делят их с другими устройствами.
Загружаю драйвер, все работает, курсор ползает клавиатура печатает.
Запускаю mp3 плеер, двигаю мышь 24D2_irq5, система останавливается. Реально встаёт на паузу, даже звук останавливается. Клавиатура никак не влияет на состояние системы. Двигаю мышь 24D7_irq11 система продолжает работу. WTF ???
Предполагаю что глухо виснет master (может теряется EOI ?) если одновременно есть два активных сигнала irq3 и irq5. С работающим звуком на это больше шансов. Сигнал irq11 на ведомом имеет самый высокий приоритет и каким-то образом разблокирует систему.

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Fri Jul 22, 2011 5:35 pm
by Serge
Так и не смог понять в чём дело. Поэтому запустил APIC, за что большое спасибо Илье Михайлову, забил номера irq в дрова и всё заработало. В ближайшее время сделаю бранч kolibri-acpi пригодным для продвинутого пользователя, а пока смотрю видео с выводом через блиттер, чего и вам желаю.

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Fri Jul 22, 2011 6:10 pm
by CleverMouse
Интересно, что IRQ0, приходящее 100 раз в секунду, звуку, судя по отзывам, не мешает. Когда пользователь что-то набирает на PS/2 клавиатуре с IRQ1 при работающем звуке, вообще довольно вероятно появление трёх запросов одновременно, но на зависание при этом вроде никто не жаловался. Если это проявляется только с видео, может, это какие-то тонкие эффекты с обработчиком прерывания от видео?

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Fri Jul 22, 2011 8:07 pm
by Serge
CleverMouse

IRQ0 и 1 прерывания ISA. А проблема с PCI. На 8259 они заводятся через роутер который преобразует сигнал PCI из "активный низкий" в "активный высокий", а два регистра ELCR (порты 0x4D0-0x4D1) кодируют тип сигнала - по уровню(PCI) или по фронту (ISA). Может это персональный баг чипсета, я не знаю, но видео здесь точно не причем, потому что я столкнулся с этой проблемой ещё зимой когда делал usb клавиатуру. Звук не работал вместе с UHCI если один из обработчиков стоял на Irq7. Тогда я посчитал что эта проблема как-то связана со spurious interrupt на 8259 и обошёлся тем, что перераспределил прерывания. (Я провёл кучу тестов, заменил наш код для 8259 на "железобетонный" линуксовый код. Маскировал все линии на входе в обработчик и восстанавливал необходимые на выходе. Всё без толку). Звуковой драйвер я тоже проверял, специально отключив вызов Infinity из обработчика. Сам обработчик там простейший места для таких тонких ошибок нет.

Сейчас в режиме APIC звук и видео работают без изменения драйверов (я только записал свои фиксированные номера Irq). Вызов обработчиков в ядре тоже не менялся, кроме завершающего EOI. Получается то, что не работает через PIC, работает на ура через APIC c минимальной модификацией кода.
Завтра добавлю свои uhci, подключу PS/2, нагружу usb контроллеры и проведу acid test. Посмотрю что получится.

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Mon Jul 25, 2011 1:26 pm
by CleverMouse
Если тот же Linux загрузить, добавив noapic noacpi к загрузочным опциям ядра, тоже будет виснуть при активном использовании?

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Mon Jul 25, 2011 2:54 pm
by Serge
CleverMouse

Спасибо за совет. Проверил
noapic noacpi - чёрный экран. Система зависла намертво.
noacpi - аналогично.
noapic - система загрузилась, но работала с тормозами. Звук проигрывался со щелчками. Посмотрел лог ядра
irq 3: nobody cared (try booting with the irqpoll option) это звук
irq 5: nobody cared (try booting with the irqpoll option) это usb
Ядро замаскировало линии и перевело обработку прерываний этих устройств в режим опроса. Отсюда рывки и щелчки звука. Так что это явно "железный баг".