Как внедрить прерывания в виртуальную машину KVM - PullRequest
0 голосов
/ 08 октября 2019

Я играю с KVM на Intel x86-64, пишу оболочку Python для API.

Я понял, что могу запустить 16-битный код в реальном режиме и выполнить in/out инструкции, а также MMIO для чтения и записи.

На следующем шаге я пытался настроить контроллер прерываний и ввести IRQ в гостевую систему, но ни одна из моих попыток сделать это, похоже, не работает.

Я пытался использовать KVM_CREATE_IRQCHIP и настраивать маршруты IRQ для перехода к PIC главного / подчиненного устройства, а также к APIC, но даже если я делаю это, выполнение KVM_IRQ_LINE, похоже, не перенаправляет поток выполнениядля обработчика прерываний, вместо этого гостевой код продолжает выполняться линейно.

То же поведение, если я не настраиваю APIC в ядре и использую KVM_INTERRUPT, и даже с KVM_NMI гость не выполняетпохоже, что это влияет каким-либо образом.

Я проверил, включен ли флаг разрешения прерываний в гостевом регистре EFLAGS.

Есть ли санкционированный способ настройки гостевой виртуальной машины таким образом, чтобыЯ могуввести прерывание в него через KVM? И если да, может кто-нибудь пролить свет на то, как это сделать? Я рад взять код C / C ++ и адаптировать его к моей среде Python, но я был бы признателен за пошаговое руководство!

Спасибо.

...