diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2011-04-13 01:32:56 +0200 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2011-05-02 09:38:35 -0300 |
commit | aa7f74d1199020a29c677bc80518df5267bfe73f (patch) | |
tree | 770a53ac9eca622e516735192b6ffc593cd38d5f /kvm-all.c | |
parent | ec6959d0466fb240fe4d94d5f525eebf9ba18b84 (diff) | |
download | qemu-aa7f74d1199020a29c677bc80518df5267bfe73f.tar.gz qemu-aa7f74d1199020a29c677bc80518df5267bfe73f.tar.bz2 qemu-aa7f74d1199020a29c677bc80518df5267bfe73f.zip |
kvm: Install specialized interrupt handler
KVM only requires to set the raised IRQ in CPUState and to kick the
receiving vcpu if it is remote. Installing a specialized handler allows
potential future changes to the TCG code path without risking KVM side
effects.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'kvm-all.c')
-rw-r--r-- | kvm-all.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -651,6 +651,15 @@ static CPUPhysMemoryClient kvm_cpu_phys_memory_client = { .log_stop = kvm_log_stop, }; +static void kvm_handle_interrupt(CPUState *env, int mask) +{ + env->interrupt_request |= mask; + + if (!qemu_cpu_is_self(env)) { + qemu_cpu_kick(env); + } +} + int kvm_init(void) { static const char upgrade_note[] = @@ -759,6 +768,8 @@ int kvm_init(void) s->many_ioeventfds = kvm_check_many_ioeventfds(); + cpu_interrupt_handler = kvm_handle_interrupt; + return 0; err: |