2012-06-06 17 views
6

robię rzeczy na KVM i mam kilka pytań, które nie mogą się dowiedzieć.jak przerwać obsługę KVM

1> jak wiemy, normalnie zewnętrzne przerwanie spowoduje VMexit i hiperwizor wstrzykuje wirtualne przerwanie, jeśli jest dla gościa. Następnie, który irq zostanie wstrzyknięty (mam na myśli wektor przerwań do indeksowania gościa IDT)? W jaki sposób KVM dowie się o tym (powiązanie IRQ z hostem z wirtualnym IRQ)?

2> Jeśli dla przypisanego urządzenia do gościa, hiperwizor dostarczy to IRQ gościowi. śledząc kod, stwierdziłem, że IRQ hosta jest inne w przypadku gościa (mam na myśli wektor przerwań). jak KVM skonfigurować, który wektor przerwań powinien używać gość?

3> jeśli nie skonfigurujemy wyjścia na przerwanie zewnętrzne przez ustawienie pola w VMCS, co stanie się podczas przerwań fizycznych? czy procesor użyje gościa IDT do przerwania odpowiedzi? Jeśli tak, to czy KVM może przekierować procesor do użycia innego IDT dla gościa (zakładając modyfikację IDTR)?

4> Gdzie znajduje się gość IDT? to skonfigurowane przez qemu podczas inicjalizacji vcpu i rejestrów (w tym IDTR)?

Mam nadzieję, że ktoś może odpowiedzieć na moje pytania. Będę bardzo doceniony.

Dzięki

Odpowiedz

2

1- 2- Kod jest w irq_comm.c i bardzo skomplikowane. Dla wektora gościa hypervisor przechwytuje i monitoruje przestrzeń konfiguracyjną PCI gościa (jest to faktycznie wykonywane w QEMU - patrz na przykład kvm_msi_update - jednak systemowy moduł do KVM aktualizuje go z danymi).

3 Tak. Aby ustawić inne IDT - musisz zmienić pole IDTR w VMCS.

4- Gość IDT jest konfigurowany za pomocą kodu gościa. QEMU/KVM nie jest bezpośrednio zaangażowany w to. Musisz skonfigurować kontrolki wykonawcze do pułapki na LIDT, aby monitorować zmiany dla gościa IDTR.

Wygląda na to, że próbujesz wdrożyć ELI z ASPLOS'12. Skontaktuj się ze mną w trybie offline (drugi autor artykułu - NA).