diff options
author | Sheng Yang <sheng@linux.intel.com> | 2008-10-20 04:07:10 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2008-12-31 09:51:47 -0500 |
commit | e19e30effac03f5a005a8e42ed941a2a5dc62654 (patch) | |
tree | a950bd5be65dba2ebe611c88c95af131e71cf191 /virt | |
parent | cc6e462cd54e64858ea25816df87d033229efe56 (diff) |
KVM: IRQ ACK notifier should be used with in-kernel irqchip
Also remove unnecessary parameter of unregister irq ack notifier.
Signed-off-by: Sheng Yang <sheng@linux.intel.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'virt')
-rw-r--r-- | virt/kvm/irq_comm.c | 8 | ||||
-rw-r--r-- | virt/kvm/kvm_main.c | 2 |
2 files changed, 7 insertions, 3 deletions
diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c index 55ad76ee2d09..9fbbdea3d1d5 100644 --- a/virt/kvm/irq_comm.c +++ b/virt/kvm/irq_comm.c | |||
@@ -58,12 +58,16 @@ void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) | |||
58 | void kvm_register_irq_ack_notifier(struct kvm *kvm, | 58 | void kvm_register_irq_ack_notifier(struct kvm *kvm, |
59 | struct kvm_irq_ack_notifier *kian) | 59 | struct kvm_irq_ack_notifier *kian) |
60 | { | 60 | { |
61 | /* Must be called with in-kernel IRQ chip, otherwise it's nonsense */ | ||
62 | ASSERT(irqchip_in_kernel(kvm)); | ||
63 | ASSERT(kian); | ||
61 | hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list); | 64 | hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list); |
62 | } | 65 | } |
63 | 66 | ||
64 | void kvm_unregister_irq_ack_notifier(struct kvm *kvm, | 67 | void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian) |
65 | struct kvm_irq_ack_notifier *kian) | ||
66 | { | 68 | { |
69 | if (!kian) | ||
70 | return; | ||
67 | hlist_del(&kian->link); | 71 | hlist_del(&kian->link); |
68 | } | 72 | } |
69 | 73 | ||
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index a87f45edfae8..4f43abe198e4 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
@@ -143,7 +143,7 @@ static void kvm_free_assigned_device(struct kvm *kvm, | |||
143 | if (irqchip_in_kernel(kvm) && assigned_dev->irq_requested) | 143 | if (irqchip_in_kernel(kvm) && assigned_dev->irq_requested) |
144 | free_irq(assigned_dev->host_irq, (void *)assigned_dev); | 144 | free_irq(assigned_dev->host_irq, (void *)assigned_dev); |
145 | 145 | ||
146 | kvm_unregister_irq_ack_notifier(kvm, &assigned_dev->ack_notifier); | 146 | kvm_unregister_irq_ack_notifier(&assigned_dev->ack_notifier); |
147 | kvm_free_irq_source_id(kvm, assigned_dev->irq_source_id); | 147 | kvm_free_irq_source_id(kvm, assigned_dev->irq_source_id); |
148 | 148 | ||
149 | if (cancel_work_sync(&assigned_dev->interrupt_work)) | 149 | if (cancel_work_sync(&assigned_dev->interrupt_work)) |