diff options
-rw-r--r-- | drivers/kvm/ioapic.c | 17 | ||||
-rw-r--r-- | drivers/kvm/irq.h | 1 |
2 files changed, 14 insertions, 4 deletions
diff --git a/drivers/kvm/ioapic.c b/drivers/kvm/ioapic.c index e14b7c724e67..cf1d50b3549b 100644 --- a/drivers/kvm/ioapic.c +++ b/drivers/kvm/ioapic.c | |||
@@ -371,18 +371,27 @@ static void ioapic_mmio_write(struct kvm_io_device *this, gpa_t addr, int len, | |||
371 | } | 371 | } |
372 | } | 372 | } |
373 | 373 | ||
374 | void kvm_ioapic_reset(struct kvm_ioapic *ioapic) | ||
375 | { | ||
376 | int i; | ||
377 | |||
378 | for (i = 0; i < IOAPIC_NUM_PINS; i++) | ||
379 | ioapic->redirtbl[i].fields.mask = 1; | ||
380 | ioapic->base_address = IOAPIC_DEFAULT_BASE_ADDRESS; | ||
381 | ioapic->ioregsel = 0; | ||
382 | ioapic->irr = 0; | ||
383 | ioapic->id = 0; | ||
384 | } | ||
385 | |||
374 | int kvm_ioapic_init(struct kvm *kvm) | 386 | int kvm_ioapic_init(struct kvm *kvm) |
375 | { | 387 | { |
376 | struct kvm_ioapic *ioapic; | 388 | struct kvm_ioapic *ioapic; |
377 | int i; | ||
378 | 389 | ||
379 | ioapic = kzalloc(sizeof(struct kvm_ioapic), GFP_KERNEL); | 390 | ioapic = kzalloc(sizeof(struct kvm_ioapic), GFP_KERNEL); |
380 | if (!ioapic) | 391 | if (!ioapic) |
381 | return -ENOMEM; | 392 | return -ENOMEM; |
382 | kvm->vioapic = ioapic; | 393 | kvm->vioapic = ioapic; |
383 | for (i = 0; i < IOAPIC_NUM_PINS; i++) | 394 | kvm_ioapic_reset(ioapic); |
384 | ioapic->redirtbl[i].fields.mask = 1; | ||
385 | ioapic->base_address = IOAPIC_DEFAULT_BASE_ADDRESS; | ||
386 | ioapic->dev.read = ioapic_mmio_read; | 395 | ioapic->dev.read = ioapic_mmio_read; |
387 | ioapic->dev.write = ioapic_mmio_write; | 396 | ioapic->dev.write = ioapic_mmio_write; |
388 | ioapic->dev.in_range = ioapic_in_range; | 397 | ioapic->dev.in_range = ioapic_in_range; |
diff --git a/drivers/kvm/irq.h b/drivers/kvm/irq.h index e08ae1002bd8..5ad3cfd7622d 100644 --- a/drivers/kvm/irq.h +++ b/drivers/kvm/irq.h | |||
@@ -140,6 +140,7 @@ int kvm_get_apic_interrupt(struct kvm_vcpu *vcpu); | |||
140 | int kvm_create_lapic(struct kvm_vcpu *vcpu); | 140 | int kvm_create_lapic(struct kvm_vcpu *vcpu); |
141 | void kvm_lapic_reset(struct kvm_vcpu *vcpu); | 141 | void kvm_lapic_reset(struct kvm_vcpu *vcpu); |
142 | void kvm_pic_reset(struct kvm_kpic_state *s); | 142 | void kvm_pic_reset(struct kvm_kpic_state *s); |
143 | void kvm_ioapic_reset(struct kvm_ioapic *ioapic); | ||
143 | void kvm_free_lapic(struct kvm_vcpu *vcpu); | 144 | void kvm_free_lapic(struct kvm_vcpu *vcpu); |
144 | u64 kvm_lapic_get_cr8(struct kvm_vcpu *vcpu); | 145 | u64 kvm_lapic_get_cr8(struct kvm_vcpu *vcpu); |
145 | void kvm_lapic_set_tpr(struct kvm_vcpu *vcpu, unsigned long cr8); | 146 | void kvm_lapic_set_tpr(struct kvm_vcpu *vcpu, unsigned long cr8); |