Получение нескольких прерываний мониторинга производительности на qemu - kvm - PullRequest
0 голосов
/ 04 мая 2018

Я следовал инструкциям и указаниям здесь и теперь могу получить прерывание переполнения счетчика один раз. Но я не могу получить это несколько раз. Что бы я ни справился, Iterrupt больше не срабатывает. Несмотря на то, что я забочусь о снятии маски прерывания.

1 Ответ

0 голосов
/ 04 мая 2018

Трудно сказать без какого-либо кода, но если вы уже получили первый PMI, то регистры счетчиков установлены правильно, и проблема, вероятно, находится на верхних уровнях 1 .

Я бы проверил:

  1. Чтобы отправить EOI в LAPIC.

    Я предполагаю, что вы настроили регистр PMI локальной APIC с фиксированным вектором.
    В этом случае вам необходимо отправить EOI в регистр EOI.
    Цитата Intel (глава 10.8.5, том 3)

    Для всех прерываний, кроме тех, которые поставляются с NMI, SMI, INIT, ExtINT, запуском или INIT-Deassert В этом режиме обработчик прерываний должен включать запись в регистр конца прерывания (EOI).

    Пример кода:

    mov DWORD [APIC_BASE+0xb0], eax
    


    Эффективный адрес для неперемещенного LAPIC: 0xfee000b0.
    Записанное значение не имеет значения, я взял регистр, чтобы кодировка инструкции была короткой.
    Конечно, вы должны правильно обращаться к LAPIC для вашего контекста.

  2. Чтобы установить флаг IF

    Очистить флаг IF - маловероятная гипотеза, но также довольно легко исключить.
    Поскольку шлюз прерывания (но не шлюз-ловушка) очищает IF, убедитесь, что выбранный вами способ выхода из ISR правильно восстанавливает IF.


1 Если я правильно помню, PMI не нужно менять.

...