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>
This commit is contained in:
Родитель
cc6e462cd5
Коммит
e19e30effa
|
@ -316,8 +316,7 @@ void kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level);
|
||||||
void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi);
|
void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi);
|
||||||
void kvm_register_irq_ack_notifier(struct kvm *kvm,
|
void kvm_register_irq_ack_notifier(struct kvm *kvm,
|
||||||
struct kvm_irq_ack_notifier *kian);
|
struct kvm_irq_ack_notifier *kian);
|
||||||
void kvm_unregister_irq_ack_notifier(struct kvm *kvm,
|
void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian);
|
||||||
struct kvm_irq_ack_notifier *kian);
|
|
||||||
int kvm_request_irq_source_id(struct kvm *kvm);
|
int kvm_request_irq_source_id(struct kvm *kvm);
|
||||||
void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id);
|
void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id);
|
||||||
|
|
||||||
|
|
|
@ -58,12 +58,16 @@ void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi)
|
||||||
void kvm_register_irq_ack_notifier(struct kvm *kvm,
|
void kvm_register_irq_ack_notifier(struct kvm *kvm,
|
||||||
struct kvm_irq_ack_notifier *kian)
|
struct kvm_irq_ack_notifier *kian)
|
||||||
{
|
{
|
||||||
|
/* Must be called with in-kernel IRQ chip, otherwise it's nonsense */
|
||||||
|
ASSERT(irqchip_in_kernel(kvm));
|
||||||
|
ASSERT(kian);
|
||||||
hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list);
|
hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void kvm_unregister_irq_ack_notifier(struct kvm *kvm,
|
void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian)
|
||||||
struct kvm_irq_ack_notifier *kian)
|
|
||||||
{
|
{
|
||||||
|
if (!kian)
|
||||||
|
return;
|
||||||
hlist_del(&kian->link);
|
hlist_del(&kian->link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -143,7 +143,7 @@ static void kvm_free_assigned_device(struct kvm *kvm,
|
||||||
if (irqchip_in_kernel(kvm) && assigned_dev->irq_requested)
|
if (irqchip_in_kernel(kvm) && assigned_dev->irq_requested)
|
||||||
free_irq(assigned_dev->host_irq, (void *)assigned_dev);
|
free_irq(assigned_dev->host_irq, (void *)assigned_dev);
|
||||||
|
|
||||||
kvm_unregister_irq_ack_notifier(kvm, &assigned_dev->ack_notifier);
|
kvm_unregister_irq_ack_notifier(&assigned_dev->ack_notifier);
|
||||||
kvm_free_irq_source_id(kvm, assigned_dev->irq_source_id);
|
kvm_free_irq_source_id(kvm, assigned_dev->irq_source_id);
|
||||||
|
|
||||||
if (cancel_work_sync(&assigned_dev->interrupt_work))
|
if (cancel_work_sync(&assigned_dev->interrupt_work))
|
||||||
|
|
Загрузка…
Ссылка в новой задаче