[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC][PATCH 08/11] kvm: Introduce kvm_irqchip_add/remove_ir
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [RFC][PATCH 08/11] kvm: Introduce kvm_irqchip_add/remove_irqfd |
Date: |
Mon, 14 May 2012 18:07:35 -0300 |
Add services to associate an eventfd file descriptor as input with an
IRQ line as output. Such a line can be an input pin of an in-kernel
irqchip or a virtual line returned by kvm_irqchip_add_route.
Signed-off-by: Jan Kiszka <address@hidden>
---
kvm-all.c | 30 ++++++++++++++++++++++++++++++
kvm-stub.c | 10 ++++++++++
kvm.h | 3 +++
3 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/kvm-all.c b/kvm-all.c
index 24027a4..4d2dbc6 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -1108,6 +1108,21 @@ int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage
msg)
return gsi;
}
+static int kvm_irqchip_assign_irqfd(KVMState *s, int fd, int virq, bool assign)
+{
+ struct kvm_irqfd irqfd = {
+ .fd = fd,
+ .gsi = virq,
+ .flags = assign ? 0 : KVM_IRQFD_FLAG_DEASSIGN,
+ };
+
+ if (!kvm_irqchip_in_kernel()) {
+ return -ENOSYS;
+ }
+
+ return kvm_vm_ioctl(s, KVM_IRQFD, &irqfd);
+}
+
#else /* !KVM_CAP_IRQ_ROUTING */
static void kvm_init_irq_routing(KVMState *s)
@@ -1123,8 +1138,23 @@ int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage
msg)
{
abort();
}
+
+static int kvm_irqchip_assign_irqfd(KVMState *s, int fd, int virq, bool assign)
+{
+ abort();
+}
#endif /* !KVM_CAP_IRQ_ROUTING */
+int kvm_irqchip_add_irqfd(KVMState *s, int fd, int virq)
+{
+ return kvm_irqchip_assign_irqfd(s, fd, virq, true);
+}
+
+int kvm_irqchip_remove_irqfd(KVMState *s, int fd, int virq)
+{
+ return kvm_irqchip_assign_irqfd(s, fd, virq, false);
+}
+
static int kvm_irqchip_create(KVMState *s)
{
QemuOptsList *list = qemu_find_opts("machine");
diff --git a/kvm-stub.c b/kvm-stub.c
index ec351d9..b4cf03f 100644
--- a/kvm-stub.c
+++ b/kvm-stub.c
@@ -140,3 +140,13 @@ int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg)
void kvm_irqchip_release_virq(KVMState *s, int virq)
{
}
+
+int kvm_irqchip_add_irqfd(KVMState *s, int fd, int virq)
+{
+ return -ENOSYS;
+}
+
+int kvm_irqchip_remove_irqfd(KVMState *s, int fd, int virq)
+{
+ return -ENOSYS;
+}
diff --git a/kvm.h b/kvm.h
index f0d0c53..9c7b0ea 100644
--- a/kvm.h
+++ b/kvm.h
@@ -215,4 +215,7 @@ int kvm_set_ioeventfd_pio_word(int fd, uint16_t adr,
uint16_t val, bool assign);
int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg);
void kvm_irqchip_release_virq(KVMState *s, int virq);
+
+int kvm_irqchip_add_irqfd(KVMState *s, int fd, int virq);
+int kvm_irqchip_remove_irqfd(KVMState *s, int fd, int virq);
#endif
--
1.7.3.4
- [Qemu-devel] [RFC][PATCH 00/11] uq/master: irqfd-based interrupt injection for virtio/vhost, Jan Kiszka, 2012/05/14
- [Qemu-devel] [RFC][PATCH 01/11] msix: Factor out msix_get_message, Jan Kiszka, 2012/05/14
- [Qemu-devel] [RFC][PATCH 02/11] msix: Invoke msix_handle_mask_update on msix_mask_all, Jan Kiszka, 2012/05/14
- [Qemu-devel] [RFC][PATCH 03/11] msix: Introduce vector notifiers, Jan Kiszka, 2012/05/14
- [Qemu-devel] [RFC][PATCH 04/11] kvm: Rename kvm_irqchip_add_route to kvm_irqchip_add_irq_route, Jan Kiszka, 2012/05/14
- [Qemu-devel] [RFC][PATCH 06/11] kvm: Publicize kvm_release_gsi as kvm_irqchip_release_virq, Jan Kiszka, 2012/05/14
- [Qemu-devel] [RFC][PATCH 05/11] kvm: Introduce kvm_irqchip_add_msi_route, Jan Kiszka, 2012/05/14
- [Qemu-devel] [RFC][PATCH 07/11] kvm: Make kvm_irqchip_commit_routes an internal service, Jan Kiszka, 2012/05/14
- [Qemu-devel] [RFC][PATCH 08/11] kvm: Introduce kvm_irqchip_add/remove_irqfd,
Jan Kiszka <=
- [Qemu-devel] [RFC][PATCH 09/11] kvm: Enable use of kvm_irqchip_in_kernel in hwlib code, Jan Kiszka, 2012/05/14
- [Qemu-devel] [RFC][PATCH 10/11] msix: Add msix_nr_vectors_allocated, Jan Kiszka, 2012/05/14
- [Qemu-devel] [RFC][PATCH 11/11] virtio/vhost: Add support for KVM in-kernel MSI injection, Jan Kiszka, 2012/05/14