I/O APIC - нет прерываний

Тема в разделе "WASM.OS.DEVEL", создана пользователем grindars, 24 июл 2009.

  1. grindars

    grindars New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2009
    Сообщения:
    2
    Пишу небольшую ОС'ку, сделал PIC, Local APIC, а с I/O APIC'ом проблема.

    Если использовать PIC или LAPIC в режиме Virtual Wire - прерывания от PIT и RTC доходят, если отключить на LAPIC LINT0 и использовать I/O APIC - либо доходит только одно прерывание, либо ни одного. На QEMU, VirtualBox и Bochs I/O APIC работает. Подскажите, в чем может быть дело?

    В аттаче исходники, имеющие отношение к апику (на C++).
     
  2. Vic3Dexe

    Vic3Dexe New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2009
    Сообщения:
    53
    Встречный вопрос (в частности автору топика): как вырубить PIC-mode на qemu?

    Поясняю - IMCR у него нет (в коде во вложении, кстати, его наличие не проверяется, но порты используются - не случится ли конфуза?), поэтому он как бы сразу в virtual wire.

    Но.

    Баним LINT0/1 в LVT BSP (они, кстати, у qemu забанены по умолчанию) - прерывания приходят. Баним весь LAPIC в SVR - прерывания приходят. Баним LAPIC в MSR - прерывания приходят. Выставляем DM = InitIPI - продолжает приходить IRQ0. Вывод - qemu в PIC mode.

    Вмварь работает корректно во всех этих случаях, в случае DM = InitIPI BSP ребутится как и положено (да, я знаю, что там нельзя DM = IIPI, это для теста), LINT0/1 в LVT BSP по умолчанию разбанены, на AP забанены - т.е. сразу virtual wire.

    Пробовал все же выставить в несуществующем IMCR единицу - не помогает. Во всех случаях на всех AP выполнено cli, отключено NMI, все AP подняты в long mode.

    зы используется qemu 0.9.0 под виндами (0.10.х не нашел), код х64.

    ззы а вообще qemu (по крайней мере эта версия) жжот не по детски. Не выставляет #UD по lock с левой инструкцией, по invlpg [] сбрасывает, по-видимому, весь TLB, т.к. я подставлял в скобки _любые_ компилируемые значения - и оно работало, тогда как ВМварь исправно падал. Может еще чего есть, чего я еще не нашел.

    В общем, по PIC mode - поможите, кто чем может =)
     
  3. grindars

    grindars New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2009
    Сообщения:
    2
    У меня в QEMU 0.10.5 прерывания перестают приходить, если запретить LINT0.
    А с TLB - чистая правда.