diff options
Diffstat (limited to 'virt/kvm/ioapic.c')
-rw-r--r-- | virt/kvm/ioapic.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c index dcaf272c26c..26fd54dc459 100644 --- a/virt/kvm/ioapic.c +++ b/virt/kvm/ioapic.c | |||
@@ -254,13 +254,17 @@ static void __kvm_ioapic_update_eoi(struct kvm_ioapic *ioapic, int vector, | |||
254 | } | 254 | } |
255 | } | 255 | } |
256 | 256 | ||
257 | bool kvm_ioapic_handles_vector(struct kvm *kvm, int vector) | ||
258 | { | ||
259 | struct kvm_ioapic *ioapic = kvm->arch.vioapic; | ||
260 | smp_rmb(); | ||
261 | return test_bit(vector, ioapic->handled_vectors); | ||
262 | } | ||
263 | |||
257 | void kvm_ioapic_update_eoi(struct kvm *kvm, int vector, int trigger_mode) | 264 | void kvm_ioapic_update_eoi(struct kvm *kvm, int vector, int trigger_mode) |
258 | { | 265 | { |
259 | struct kvm_ioapic *ioapic = kvm->arch.vioapic; | 266 | struct kvm_ioapic *ioapic = kvm->arch.vioapic; |
260 | 267 | ||
261 | smp_rmb(); | ||
262 | if (!test_bit(vector, ioapic->handled_vectors)) | ||
263 | return; | ||
264 | spin_lock(&ioapic->lock); | 268 | spin_lock(&ioapic->lock); |
265 | __kvm_ioapic_update_eoi(ioapic, vector, trigger_mode); | 269 | __kvm_ioapic_update_eoi(ioapic, vector, trigger_mode); |
266 | spin_unlock(&ioapic->lock); | 270 | spin_unlock(&ioapic->lock); |