Народ, а можете потестить работу в паре со звуком ? Я столкнулся с тем, что два активных обработчика PCI IRQ на разных линиях вешают систему. По отдельности всё работает как надо. Выглядит примерно так:
ставится обработчик для устройства А на irq5
обрабатывается прерывание на irq5
ставится обработчик для устройства В на irq10
запрос прерывания по линии 10
???
FAIL.
Тема выделена из Тестируем USB OHCI controller
2 акт. обработчика PCI IRQ на разных линиях вешают систему
Т.е. запустить на проигрывание плеер и начать активно использовать USB устройства?
Serge wrote:ставится обработчик для устройства А на irq5
обрабатывается прерывание на irq5
ставится обработчик для устройства В на irq10
запрос прерывания по линии 10
???
FAIL.
[Вопрос снят - как-то сразу не въехал о чем речь ]
Проверил на edubook,плейер +мышь,вроде проблем не замечаю.
Пример не совсем точный.
Подозреваю что всё виснет если линии подключены к одному контроллеру master или slave.
Подозреваю что всё виснет если линии подключены к одному контроллеру master или slave.
Ну, так предложи правильную методику тестирования, а то гадания на кофейной гуще.
Какая методика ? Надо статистику собрать виснет - не виснет, какие линии используются.
В смысле, скажи как проверить, чтобыSerge wrote:Какая методика ? Надо статистику собрать виснет - не виснет, какие линии используются.
Serge wrote:линии подключены к одному контроллеру master или slave.
yogev_ezra
Не важно, это только предположение.
Предлагаемый метод научного тыка:
Взять таблицу PCIDEV с dev_id контроллеров и номерами irq.
Подключить как можно больше usв мышек и клавиатур, так чтобы на каждой линии было по устройству. Если два контроллера делят одну линию достаточно занять только один. Какие линии заняты можно посмотреть в диспетчере устройств.
Загрузить Колибри и посмотреть как всё это работает.
Не важно, это только предположение.
Предлагаемый метод научного тыка:
Взять таблицу PCIDEV с dev_id контроллеров и номерами irq.
Подключить как можно больше usв мышек и клавиатур, так чтобы на каждой линии было по устройству. Если два контроллера делят одну линию достаточно занять только один. Какие линии заняты можно посмотреть в диспетчере устройств.
Загрузить Колибри и посмотреть как всё это работает.
Сделал тесты со своим драйвером
Условия для теста идеальные. Четыре контроллера занимают три линии и не делят их с другими устройствами.
Загружаю драйвер, все работает, курсор ползает клавиатура печатает.
Запускаю mp3 плеер, двигаю мышь 24D2_irq5, система останавливается. Реально встаёт на паузу, даже звук останавливается. Клавиатура никак не влияет на состояние системы. Двигаю мышь 24D7_irq11 система продолжает работу. WTF ???
Предполагаю что глухо виснет master (может теряется EOI ?) если одновременно есть два активных сигнала irq3 и irq5. С работающим звуком на это больше шансов. Сигнал irq11 на ведомом имеет самый высокий приоритет и каким-то образом разблокирует систему.
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 на ведомом имеет самый высокий приоритет и каким-то образом разблокирует систему.
Так и не смог понять в чём дело. Поэтому запустил APIC, за что большое спасибо Илье Михайлову, забил номера irq в дрова и всё заработало. В ближайшее время сделаю бранч kolibri-acpi пригодным для продвинутого пользователя, а пока смотрю видео с выводом через блиттер, чего и вам желаю.
Интересно, что IRQ0, приходящее 100 раз в секунду, звуку, судя по отзывам, не мешает. Когда пользователь что-то набирает на PS/2 клавиатуре с IRQ1 при работающем звуке, вообще довольно вероятно появление трёх запросов одновременно, но на зависание при этом вроде никто не жаловался. Если это проявляется только с видео, может, это какие-то тонкие эффекты с обработчиком прерывания от видео?
Сделаем мир лучше!
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. Посмотрю что получится.
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. Посмотрю что получится.
Если тот же Linux загрузить, добавив noapic noacpi к загрузочным опциям ядра, тоже будет виснуть при активном использовании?
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
Ядро замаскировало линии и перевело обработку прерываний этих устройств в режим опроса. Отсюда рывки и щелчки звука. Так что это явно "железный баг".
Спасибо за совет. Проверил
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
Ядро замаскировало линии и перевело обработку прерываний этих устройств в режим опроса. Отсюда рывки и щелчки звука. Так что это явно "железный баг".
Who is online
Users browsing this forum: No registered users and 1 guest