Commit | Line | Data |
---|---|---|
26eef70c AK |
1 | #ifndef ARCH_X86_KVM_X86_H |
2 | #define ARCH_X86_KVM_X86_H | |
3 | ||
4 | #include <linux/kvm_host.h> | |
5 | ||
6 | static inline void kvm_clear_exception_queue(struct kvm_vcpu *vcpu) | |
7 | { | |
8 | vcpu->arch.exception.pending = false; | |
9 | } | |
10 | ||
937a7eae AK |
11 | static inline void kvm_queue_interrupt(struct kvm_vcpu *vcpu, u8 vector) |
12 | { | |
13 | vcpu->arch.interrupt.pending = true; | |
14 | vcpu->arch.interrupt.nr = vector; | |
15 | } | |
16 | ||
17 | static inline void kvm_clear_interrupt_queue(struct kvm_vcpu *vcpu) | |
18 | { | |
19 | vcpu->arch.interrupt.pending = false; | |
20 | } | |
21 | ||
fe4c7b19 GN |
22 | static inline u8 kvm_pop_irq(struct kvm_vcpu *vcpu) |
23 | { | |
24 | int word_index = __ffs(vcpu->arch.irq_summary); | |
25 | int bit_index = __ffs(vcpu->arch.irq_pending[word_index]); | |
26 | int irq = word_index * BITS_PER_LONG + bit_index; | |
27 | ||
28 | clear_bit(bit_index, &vcpu->arch.irq_pending[word_index]); | |
29 | if (!vcpu->arch.irq_pending[word_index]) | |
30 | clear_bit(word_index, &vcpu->arch.irq_summary); | |
31 | return irq; | |
32 | } | |
26eef70c | 33 | #endif |