Commit 9016cfb577a15abd6a7990890ccf6bf1edf04d31
Committed by
Paolo Bonzini
1 parent
1a02b27035
Exists in
smarct4x-processor-sdk-linux-03.00.00.04
and in
4 other branches
KVM: eventfd: add irq bypass consumer management
This patch adds the registration/unregistration of an irq_bypass_consumer on irqfd assignment/deassignment. Signed-off-by: Eric Auger <eric.auger@linaro.org> Signed-off-by: Feng Wu <feng.wu@intel.com> Reviewed-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Showing 2 changed files with 17 additions and 0 deletions Side-by-side Diff
include/linux/kvm_irqfd.h
virt/kvm/eventfd.c
... | ... | @@ -35,6 +35,7 @@ |
35 | 35 | #include <linux/srcu.h> |
36 | 36 | #include <linux/slab.h> |
37 | 37 | #include <linux/seqlock.h> |
38 | +#include <linux/irqbypass.h> | |
38 | 39 | #include <trace/events/kvm.h> |
39 | 40 | |
40 | 41 | #include <kvm/iodev.h> |
... | ... | @@ -140,6 +141,9 @@ |
140 | 141 | /* |
141 | 142 | * It is now safe to release the object's resources |
142 | 143 | */ |
144 | +#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS | |
145 | + irq_bypass_unregister_consumer(&irqfd->consumer); | |
146 | +#endif | |
143 | 147 | eventfd_ctx_put(irqfd->eventfd); |
144 | 148 | kfree(irqfd); |
145 | 149 | } |
... | ... | @@ -391,6 +395,17 @@ |
391 | 395 | * we might race against the POLLHUP |
392 | 396 | */ |
393 | 397 | fdput(f); |
398 | +#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS | |
399 | + irqfd->consumer.token = (void *)irqfd->eventfd; | |
400 | + irqfd->consumer.add_producer = kvm_arch_irq_bypass_add_producer; | |
401 | + irqfd->consumer.del_producer = kvm_arch_irq_bypass_del_producer; | |
402 | + irqfd->consumer.stop = kvm_arch_irq_bypass_stop; | |
403 | + irqfd->consumer.start = kvm_arch_irq_bypass_start; | |
404 | + ret = irq_bypass_register_consumer(&irqfd->consumer); | |
405 | + if (ret) | |
406 | + pr_info("irq bypass consumer (token %p) registration fails: %d\n", | |
407 | + irqfd->consumer.token, ret); | |
408 | +#endif | |
394 | 409 | |
395 | 410 | return 0; |
396 | 411 |