[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 13/19] kvm: Introduce kvm_irqchip_add_msi_route
From: |
Avi Kivity |
Subject: |
[Qemu-devel] [PATCH 13/19] kvm: Introduce kvm_irqchip_add_msi_route |
Date: |
Mon, 21 May 2012 19:37:41 +0300 |
From: Jan Kiszka <address@hidden>
Add a service that establishes a static route from a virtual IRQ line to
an MSI message. Will be used for IRQFD and device assignment. As we will
use this service outside of CONFIG_KVM protected code, stub it properly.
Signed-off-by: Jan Kiszka <address@hidden>
Signed-off-by: Avi Kivity <address@hidden>
---
kvm-all.c | 31 +++++++++++++++++++++++++++++++
kvm-stub.c | 8 ++++++++
kvm.h | 10 ++++++----
3 files changed, 45 insertions(+), 4 deletions(-)
diff --git a/kvm-all.c b/kvm-all.c
index 0117837..7f906ca 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -1080,6 +1080,32 @@ int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg)
return kvm_irqchip_set_irq(s, route->kroute.gsi, 1);
}
+int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg)
+{
+ struct kvm_irq_routing_entry kroute;
+ int virq;
+
+ if (!kvm_irqchip_in_kernel()) {
+ return -ENOSYS;
+ }
+
+ virq = kvm_irqchip_get_virq(s);
+ if (virq < 0) {
+ return virq;
+ }
+
+ kroute.gsi = virq;
+ kroute.type = KVM_IRQ_ROUTING_MSI;
+ kroute.flags = 0;
+ kroute.u.msi.address_lo = (uint32_t)msg.address;
+ kroute.u.msi.address_hi = msg.address >> 32;
+ kroute.u.msi.data = msg.data;
+
+ kvm_add_routing_entry(s, &kroute);
+
+ return virq;
+}
+
#else /* !KVM_CAP_IRQ_ROUTING */
static void kvm_init_irq_routing(KVMState *s)
@@ -1090,6 +1116,11 @@ int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg)
{
abort();
}
+
+int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg)
+{
+ abort();
+}
#endif /* !KVM_CAP_IRQ_ROUTING */
static int kvm_irqchip_create(KVMState *s)
diff --git a/kvm-stub.c b/kvm-stub.c
index 47c573d..db3a7dc 100644
--- a/kvm-stub.c
+++ b/kvm-stub.c
@@ -12,10 +12,13 @@
#include "qemu-common.h"
#include "hw/hw.h"
+#include "hw/msi.h"
#include "cpu.h"
#include "gdbstub.h"
#include "kvm.h"
+KVMState *kvm_state;
+
int kvm_init_vcpu(CPUArchState *env)
{
return -ENOSYS;
@@ -128,3 +131,8 @@ int kvm_on_sigbus(int code, void *addr)
{
return 1;
}
+
+int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg)
+{
+ return -ENOSYS;
+}
diff --git a/kvm.h b/kvm.h
index 8b061bd..67df1f1 100644
--- a/kvm.h
+++ b/kvm.h
@@ -44,6 +44,10 @@ typedef struct KVMCapabilityInfo {
#define KVM_CAP_INFO(CAP) { "KVM_CAP_" stringify(CAP), KVM_CAP_##CAP }
#define KVM_CAP_LAST_INFO { NULL, 0 }
+struct KVMState;
+typedef struct KVMState KVMState;
+extern KVMState *kvm_state;
+
/* external API */
int kvm_init(void);
@@ -88,10 +92,6 @@ int kvm_on_sigbus(int code, void *addr);
/* internal API */
-struct KVMState;
-typedef struct KVMState KVMState;
-extern KVMState *kvm_state;
-
int kvm_ioctl(KVMState *s, int type, ...);
int kvm_vm_ioctl(KVMState *s, int type, ...);
@@ -213,4 +213,6 @@ int kvm_set_ioeventfd_mmio(int fd, uint32_t adr, uint32_t
val, bool assign,
uint32_t size);
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);
#endif
--
1.7.10.1
- [Qemu-devel] [PULL 00/20 1.2] kvm updates, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 10/19] msix: Invoke msix_handle_mask_update on msix_mask_all, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 17/19] kvm: Enable use of kvm_irqchip_in_kernel in hwlib code, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 08/19] kvm: Enable in-kernel irqchip support by default, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 01/19] kvm: Refactor KVMState::max_gsi to gsi_count, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 14/19] kvm: Publicize kvm_irqchip_release_virq, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 06/19] kvm: Update kernel headers, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 04/19] pc: Enable MSI support at APIC level, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 16/19] kvm: Introduce kvm_irqchip_add/remove_irqfd, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 03/19] kvm: Introduce basic MSI support for in-kernel irqchips, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 13/19] kvm: Introduce kvm_irqchip_add_msi_route,
Avi Kivity <=
- [Qemu-devel] [PATCH 02/19] Introduce MSIMessage structure, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 07/19] kvm: Add support for direct MSI injections, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 18/19] msix: Add msix_nr_vectors_allocated, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 19/19] virtio/vhost: Add support for KVM in-kernel MSI injection, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 09/19] msix: Factor out msix_get_message, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 12/19] kvm: Rename kvm_irqchip_add_route to kvm_irqchip_add_irq_route, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 05/19] kvm: x86: Wire up MSI support for in-kernel irqchip, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 15/19] kvm: Make kvm_irqchip_commit_routes an internal service, Avi Kivity, 2012/05/21
- [Qemu-devel] [PATCH 11/19] msix: Introduce vector notifiers, Avi Kivity, 2012/05/21