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

Internal structure and you change requests/suggestions
  • Т.е. запустить на проигрывание плеер и начать активно использовать USB устройства?
  • Serge wrote:ставится обработчик для устройства А на irq5
    обрабатывается прерывание на irq5
    ставится обработчик для устройства В на irq10
    запрос прерывания по линии 10
    ???
    FAIL.

    [Вопрос снят - как-то сразу не въехал о чем речь :oops: ]
  • Проверил на edubook,плейер +мышь,вроде проблем не замечаю.
  • Пример не совсем точный.
    Подозреваю что всё виснет если линии подключены к одному контроллеру master или slave.
  • Ну, так предложи правильную методику тестирования, а то гадания на кофейной гуще.
  • Какая методика ? Надо статистику собрать виснет - не виснет, какие линии используются.
  • Serge wrote:Какая методика ? Надо статистику собрать виснет - не виснет, какие линии используются.
    В смысле, скажи как проверить, чтобы
    Serge wrote:линии подключены к одному контроллеру master или slave.
  • yogev_ezra

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

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

    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. Посмотрю что получится.
  • Если тот же 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
    Ядро замаскировало линии и перевело обработку прерываний этих устройств в режим опроса. Отсюда рывки и щелчки звука. Так что это явно "железный баг".
  • Who is online

    Users browsing this forum: No registered users and 3 guests