* [RFC PATCH 0/2] accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h'
@ 2023-04-05 16:29 Philippe Mathieu-Daudé
2023-04-05 16:30 ` [RFC PATCH 1/2] " Philippe Mathieu-Daudé
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-04-05 16:29 UTC (permalink / raw)
To: qemu-devel, Paolo Bonzini
Cc: qemu-arm, kvm, qemu-s390x, qemu-ppc, Philippe Mathieu-Daudé
Posted individually because it is modifying a lot of files.
RFC: this might not be the best API cut, but "sysemu/kvm.h"
is a mixed bag hard to sort...
Based-on: <20230405160454.97436-1-philmd@linaro.org>
Philippe Mathieu-Daudé (2):
accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h'
accel/kvm: Declare kvm_arch_irqchip_create() in 'sysemu/kvm_int.h'
include/sysemu/kvm.h | 88 -----------------------------
include/sysemu/kvm_int.h | 13 +++++
include/sysemu/kvm_irq.h | 100 +++++++++++++++++++++++++++++++++
target/i386/kvm/kvm_i386.h | 1 +
accel/kvm/kvm-all.c | 2 +
accel/stubs/kvm-stub.c | 1 +
hw/arm/virt.c | 1 +
hw/cpu/a15mpcore.c | 1 +
hw/hyperv/hyperv.c | 1 +
hw/i386/intel_iommu.c | 1 +
hw/i386/kvm/apic.c | 1 +
hw/i386/kvm/i8259.c | 1 +
hw/i386/kvm/ioapic.c | 1 +
hw/i386/kvmvapic.c | 1 +
hw/i386/pc.c | 1 +
hw/i386/x86-iommu.c | 1 +
hw/intc/arm_gic.c | 1 +
hw/intc/arm_gic_common.c | 1 +
hw/intc/arm_gic_kvm.c | 1 +
hw/intc/arm_gicv3_common.c | 1 +
hw/intc/arm_gicv3_its_common.c | 1 +
hw/intc/arm_gicv3_kvm.c | 1 +
hw/intc/ioapic.c | 1 +
hw/intc/openpic_kvm.c | 1 +
hw/intc/s390_flic_kvm.c | 1 +
hw/intc/spapr_xive_kvm.c | 1 +
hw/intc/xics.c | 1 +
hw/intc/xics_kvm.c | 1 +
hw/misc/ivshmem.c | 1 +
hw/ppc/e500.c | 1 +
hw/ppc/spapr_irq.c | 1 +
hw/remote/proxy.c | 1 +
hw/s390x/virtio-ccw.c | 1 +
hw/vfio/pci.c | 1 +
hw/vfio/platform.c | 1 +
hw/virtio/virtio-pci.c | 1 +
target/arm/kvm.c | 1 +
target/i386/kvm/kvm.c | 2 +
target/i386/kvm/xen-emu.c | 2 +
target/i386/sev.c | 1 +
target/s390x/kvm/kvm.c | 2 +
41 files changed, 155 insertions(+), 88 deletions(-)
create mode 100644 include/sysemu/kvm_irq.h
--
2.38.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [RFC PATCH 1/2] accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h'
2023-04-05 16:29 [RFC PATCH 0/2] accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h' Philippe Mathieu-Daudé
@ 2023-04-05 16:30 ` Philippe Mathieu-Daudé
2023-04-05 16:30 ` [RFC PATCH 2/2] accel/kvm: Declare kvm_arch_irqchip_create() in 'sysemu/kvm_int.h' Philippe Mathieu-Daudé
2023-06-29 12:38 ` [RFC PATCH 0/2] accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h' Philippe Mathieu-Daudé
2 siblings, 0 replies; 4+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-04-05 16:30 UTC (permalink / raw)
To: qemu-devel, Paolo Bonzini
Cc: qemu-arm, kvm, qemu-s390x, qemu-ppc, Philippe Mathieu-Daudé,
Peter Maydell, Michael S. Tsirkin, Peter Xu, Jason Wang,
Richard Henderson, Eduardo Habkost, Marcel Apfelbaum, Thomas Huth,
Halil Pasic, Christian Borntraeger, David Hildenbrand,
Cédric Le Goater, Daniel Henrique Barboza, David Gibson,
Greg Kurz, Elena Ufimtseva, Jagannathan Raman, John G Johnson,
Cornelia Huck, Eric Farman, Ilya Leoshkevich, Alex Williamson,
Marcelo Tosatti, David Woodhouse, Paul Durrant
"sysemu/kvm.h" header is meant to contain the 'external' KVM
API accessed by all the code base.
KVM *internal* API aims to reside in "sysemu/kvm_int.h",
accessible by files in accel/kvm/ and each target/ implementation.
Hardware models should only access the external API.
"sysemu/kvm.h" is quite big. Extract the KVM IRQ declarations
to "sysemu/kvm_irq.h" to reduce this header complexity.
This will ease extracting internal prototypes to "sysemu/kvm_int.h".
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/sysemu/kvm.h | 76 -------------------------
include/sysemu/kvm_irq.h | 100 +++++++++++++++++++++++++++++++++
target/i386/kvm/kvm_i386.h | 1 +
accel/kvm/kvm-all.c | 2 +
accel/stubs/kvm-stub.c | 1 +
hw/arm/virt.c | 1 +
hw/cpu/a15mpcore.c | 1 +
hw/hyperv/hyperv.c | 1 +
hw/i386/intel_iommu.c | 1 +
hw/i386/kvm/apic.c | 1 +
hw/i386/kvm/i8259.c | 1 +
hw/i386/kvm/ioapic.c | 1 +
hw/i386/kvmvapic.c | 1 +
hw/i386/pc.c | 1 +
hw/i386/x86-iommu.c | 1 +
hw/intc/arm_gic.c | 1 +
hw/intc/arm_gic_common.c | 1 +
hw/intc/arm_gic_kvm.c | 1 +
hw/intc/arm_gicv3_common.c | 1 +
hw/intc/arm_gicv3_its_common.c | 1 +
hw/intc/arm_gicv3_kvm.c | 1 +
hw/intc/ioapic.c | 1 +
hw/intc/openpic_kvm.c | 1 +
hw/intc/s390_flic_kvm.c | 1 +
hw/intc/spapr_xive_kvm.c | 1 +
hw/intc/xics.c | 1 +
hw/intc/xics_kvm.c | 1 +
hw/misc/ivshmem.c | 1 +
hw/ppc/e500.c | 1 +
hw/ppc/spapr_irq.c | 1 +
hw/remote/proxy.c | 1 +
hw/s390x/virtio-ccw.c | 1 +
hw/vfio/pci.c | 1 +
hw/vfio/platform.c | 1 +
hw/virtio/virtio-pci.c | 1 +
target/arm/kvm.c | 1 +
target/i386/kvm/kvm.c | 2 +
target/i386/kvm/xen-emu.c | 2 +
target/i386/sev.c | 1 +
target/s390x/kvm/kvm.c | 2 +
40 files changed, 142 insertions(+), 76 deletions(-)
create mode 100644 include/sysemu/kvm_irq.h
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index 7902acdfd9..32e223a368 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -187,7 +187,6 @@ extern bool kvm_msi_use_devid;
#endif /* CONFIG_KVM_IS_POSSIBLE */
struct kvm_run;
-struct kvm_lapic_state;
struct kvm_irq_routing_entry;
typedef struct KVMCapabilityInfo {
@@ -223,20 +222,6 @@ int kvm_has_debugregs(void);
int kvm_max_nested_state_length(void);
int kvm_has_pit_state2(void);
int kvm_has_many_ioeventfds(void);
-int kvm_has_gsi_routing(void);
-int kvm_has_intx_set_mask(void);
-
-/**
- * kvm_arm_supports_user_irq
- *
- * Not all KVM implementations support notifications for kernel generated
- * interrupt events to user space. This function indicates whether the current
- * KVM implementation does support them.
- *
- * Returns: true if KVM supports using kernel generated IRQs from user space
- */
-bool kvm_arm_supports_user_irq(void);
-
int kvm_on_sigbus_vcpu(CPUState *cpu, int code, void *addr);
int kvm_on_sigbus(int code, void *addr);
@@ -395,17 +380,6 @@ int kvm_arch_release_virq_post(int virq);
int kvm_arch_msi_data_to_gsi(uint32_t data);
-int kvm_set_irq(KVMState *s, int irq, int level);
-int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg);
-
-void kvm_irqchip_add_irq_route(KVMState *s, int gsi, int irqchip, int pin);
-
-void kvm_irqchip_add_change_notifier(Notifier *n);
-void kvm_irqchip_remove_change_notifier(Notifier *n);
-void kvm_irqchip_change_notify(void);
-
-void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state *kapic);
-
struct kvm_guest_debug;
struct kvm_debug_exit_arch;
@@ -479,56 +453,6 @@ void kvm_cpu_synchronize_state(CPUState *cpu);
void kvm_init_cpu_signals(CPUState *cpu);
-/**
- * kvm_irqchip_add_msi_route - Add MSI route for specific vector
- * @c: KVMRouteChange instance.
- * @vector: which vector to add. This can be either MSI/MSIX
- * vector. The function will automatically detect whether
- * MSI/MSIX is enabled, and fetch corresponding MSI
- * message.
- * @dev: Owner PCI device to add the route. If @dev is specified
- * as @NULL, an empty MSI message will be inited.
- * @return: virq (>=0) when success, errno (<0) when failed.
- */
-int kvm_irqchip_add_msi_route(KVMRouteChange *c, int vector, PCIDevice *dev);
-int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg,
- PCIDevice *dev);
-void kvm_irqchip_commit_routes(KVMState *s);
-
-static inline KVMRouteChange kvm_irqchip_begin_route_changes(KVMState *s)
-{
- return (KVMRouteChange) { .s = s, .changes = 0 };
-}
-
-static inline void kvm_irqchip_commit_route_changes(KVMRouteChange *c)
-{
- if (c->changes) {
- kvm_irqchip_commit_routes(c->s);
- c->changes = 0;
- }
-}
-
-void kvm_irqchip_release_virq(KVMState *s, int virq);
-
-int kvm_irqchip_add_adapter_route(KVMState *s, AdapterInfo *adapter);
-int kvm_irqchip_add_hv_sint_route(KVMState *s, uint32_t vcpu, uint32_t sint);
-
-int kvm_irqchip_add_irqfd_notifier_gsi(KVMState *s, EventNotifier *n,
- EventNotifier *rn, int virq);
-int kvm_irqchip_remove_irqfd_notifier_gsi(KVMState *s, EventNotifier *n,
- int virq);
-int kvm_irqchip_add_irqfd_notifier(KVMState *s, EventNotifier *n,
- EventNotifier *rn, qemu_irq irq);
-int kvm_irqchip_remove_irqfd_notifier(KVMState *s, EventNotifier *n,
- qemu_irq irq);
-void kvm_irqchip_set_qemuirq_gsi(KVMState *s, qemu_irq irq, int gsi);
-void kvm_pc_setup_irq_routing(bool pci_enabled);
-void kvm_init_irq_routing(KVMState *s);
-
-bool kvm_kernel_irqchip_allowed(void);
-bool kvm_kernel_irqchip_required(void);
-bool kvm_kernel_irqchip_split(void);
-
/**
* kvm_arch_irqchip_create:
* @KVMState: The KVMState pointer
diff --git a/include/sysemu/kvm_irq.h b/include/sysemu/kvm_irq.h
new file mode 100644
index 0000000000..f5f09fa1da
--- /dev/null
+++ b/include/sysemu/kvm_irq.h
@@ -0,0 +1,100 @@
+/*
+ * QEMU KVM IRQ helpers
+ *
+ * Copyright IBM, Corp. 2008
+ *
+ * Authors:
+ * Anthony Liguori <aliguori@us.ibm.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ *
+ */
+
+/* header to be included in hardware (non-KVM-specific) code */
+
+#ifndef QEMU_KVM_IRQ_H
+#define QEMU_KVM_IRQ_H
+
+#include "qemu/notify.h"
+#include "sysemu/kvm.h"
+
+struct kvm_lapic_state;
+
+int kvm_has_gsi_routing(void);
+int kvm_has_intx_set_mask(void);
+
+/**
+ * kvm_arm_supports_user_irq
+ *
+ * Not all KVM implementations support notifications for kernel generated
+ * interrupt events to user space. This function indicates whether the current
+ * KVM implementation does support them.
+ *
+ * Returns: true if KVM supports using kernel generated IRQs from user space
+ */
+bool kvm_arm_supports_user_irq(void);
+
+void kvm_irqchip_add_change_notifier(Notifier *n);
+void kvm_irqchip_remove_change_notifier(Notifier *n);
+void kvm_irqchip_change_notify(void);
+
+/**
+ * kvm_irqchip_add_msi_route - Add MSI route for specific vector
+ * @c: KVMRouteChange instance.
+ * @vector: which vector to add. This can be either MSI/MSIX
+ * vector. The function will automatically detect whether
+ * MSI/MSIX is enabled, and fetch corresponding MSI
+ * message.
+ * @dev: Owner PCI device to add the route. If @dev is specified
+ * as @NULL, an empty MSI message will be inited.
+ * @return: virq (>=0) when success, errno (<0) when failed.
+ */
+int kvm_irqchip_add_msi_route(KVMRouteChange *c, int vector, PCIDevice *dev);
+int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg,
+ PCIDevice *dev);
+void kvm_irqchip_commit_routes(KVMState *s);
+
+static inline KVMRouteChange kvm_irqchip_begin_route_changes(KVMState *s)
+{
+ return (KVMRouteChange) { .s = s, .changes = 0 };
+}
+
+static inline void kvm_irqchip_commit_route_changes(KVMRouteChange *c)
+{
+ if (c->changes) {
+ kvm_irqchip_commit_routes(c->s);
+ c->changes = 0;
+ }
+}
+
+void kvm_irqchip_release_virq(KVMState *s, int virq);
+
+int kvm_irqchip_add_adapter_route(KVMState *s, AdapterInfo *adapter);
+int kvm_irqchip_add_hv_sint_route(KVMState *s, uint32_t vcpu, uint32_t sint);
+
+int kvm_irqchip_add_irqfd_notifier_gsi(KVMState *s, EventNotifier *n,
+ EventNotifier *rn, int virq);
+int kvm_irqchip_remove_irqfd_notifier_gsi(KVMState *s, EventNotifier *n,
+ int virq);
+int kvm_irqchip_add_irqfd_notifier(KVMState *s, EventNotifier *n,
+ EventNotifier *rn, qemu_irq irq);
+int kvm_irqchip_remove_irqfd_notifier(KVMState *s, EventNotifier *n,
+ qemu_irq irq);
+void kvm_irqchip_set_qemuirq_gsi(KVMState *s, qemu_irq irq, int gsi);
+void kvm_pc_setup_irq_routing(bool pci_enabled);
+void kvm_init_irq_routing(KVMState *s);
+
+bool kvm_kernel_irqchip_allowed(void);
+bool kvm_kernel_irqchip_required(void);
+bool kvm_kernel_irqchip_split(void);
+
+
+int kvm_set_irq(KVMState *s, int irq, int level);
+int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg);
+
+void kvm_irqchip_add_irq_route(KVMState *s, int gsi, int irqchip, int pin);
+
+void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state *kapic);
+
+#endif
diff --git a/target/i386/kvm/kvm_i386.h b/target/i386/kvm/kvm_i386.h
index e24753abfe..637485ec96 100644
--- a/target/i386/kvm/kvm_i386.h
+++ b/target/i386/kvm/kvm_i386.h
@@ -12,6 +12,7 @@
#define QEMU_KVM_I386_H
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#define kvm_apic_in_kernel() (kvm_irqchip_in_kernel())
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index f2a6ea6a68..982bd8cb7e 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -28,6 +28,8 @@
#include "hw/pci/msix.h"
#include "hw/s390x/adapter.h"
#include "exec/gdbstub.h"
+#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/kvm_int.h"
#include "sysemu/runstate.h"
#include "sysemu/cpus.h"
diff --git a/accel/stubs/kvm-stub.c b/accel/stubs/kvm-stub.c
index c0e2df3fbf..89cdc5fd09 100644
--- a/accel/stubs/kvm-stub.c
+++ b/accel/stubs/kvm-stub.c
@@ -12,6 +12,7 @@
#include "qemu/osdep.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "hw/pci/msi.h"
KVMState *kvm_state;
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index dbbe639e61..68a2221a94 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -48,6 +48,7 @@
#include "sysemu/tpm.h"
#include "sysemu/tcg.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/hvf.h"
#include "sysemu/qtest.h"
#include "hw/loader.h"
diff --git a/hw/cpu/a15mpcore.c b/hw/cpu/a15mpcore.c
index 774ca9987a..cae30ed5ca 100644
--- a/hw/cpu/a15mpcore.c
+++ b/hw/cpu/a15mpcore.c
@@ -25,6 +25,7 @@
#include "hw/irq.h"
#include "hw/qdev-properties.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "kvm_arm.h"
static void a15mp_priv_set_irq(void *opaque, int irq, int level)
diff --git a/hw/hyperv/hyperv.c b/hw/hyperv/hyperv.c
index 57b402b956..744cff6263 100644
--- a/hw/hyperv/hyperv.c
+++ b/hw/hyperv/hyperv.c
@@ -13,6 +13,7 @@
#include "qapi/error.h"
#include "exec/address-spaces.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "qemu/bitops.h"
#include "qemu/error-report.h"
#include "qemu/lockable.h"
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index faade7def8..9b3c08f618 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -33,6 +33,7 @@
#include "hw/i386/x86-iommu.h"
#include "hw/pci-host/q35.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/dma.h"
#include "sysemu/sysemu.h"
#include "hw/i386/apic_internal.h"
diff --git a/hw/i386/kvm/apic.c b/hw/i386/kvm/apic.c
index 1e89ca0899..6c1cdb13f6 100644
--- a/hw/i386/kvm/apic.c
+++ b/hw/i386/kvm/apic.c
@@ -16,6 +16,7 @@
#include "hw/pci/msi.h"
#include "sysemu/hw_accel.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "kvm/kvm_i386.h"
static inline void kvm_apic_set_reg(struct kvm_lapic_state *kapic,
diff --git a/hw/i386/kvm/i8259.c b/hw/i386/kvm/i8259.c
index 3ca0e1ff03..0119c56a08 100644
--- a/hw/i386/kvm/i8259.c
+++ b/hw/i386/kvm/i8259.c
@@ -17,6 +17,7 @@
#include "hw/intc/kvm_irqcount.h"
#include "hw/irq.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "qom/object.h"
#define TYPE_KVM_I8259 "kvm-i8259"
diff --git a/hw/i386/kvm/ioapic.c b/hw/i386/kvm/ioapic.c
index cd5ea5d60b..e5b372315f 100644
--- a/hw/i386/kvm/ioapic.c
+++ b/hw/i386/kvm/ioapic.c
@@ -16,6 +16,7 @@
#include "hw/intc/ioapic_internal.h"
#include "hw/intc/kvm_irqcount.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
/* PC Utility function */
void kvm_pc_setup_irq_routing(bool pci_enabled)
diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c
index 43f8a8f679..796910c0c4 100644
--- a/hw/i386/kvmvapic.c
+++ b/hw/i386/kvmvapic.c
@@ -15,6 +15,7 @@
#include "sysemu/cpus.h"
#include "sysemu/hw_accel.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/runstate.h"
#include "hw/i386/apic_internal.h"
#include "hw/sysbus.h"
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 1489abf010..0684c00146 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -58,6 +58,7 @@
#include "sysemu/tcg.h"
#include "sysemu/numa.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/xen.h"
#include "sysemu/reset.h"
#include "sysemu/runstate.h"
diff --git a/hw/i386/x86-iommu.c b/hw/i386/x86-iommu.c
index 01d11325a6..6531678e6f 100644
--- a/hw/i386/x86-iommu.c
+++ b/hw/i386/x86-iommu.c
@@ -26,6 +26,7 @@
#include "qemu/error-report.h"
#include "trace.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
void x86_iommu_iec_register_notifier(X86IOMMUState *iommu,
iec_notify_fn fn, void *data)
diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
index 7a34bc0998..1fe9b5e7d8 100644
--- a/hw/intc/arm_gic.c
+++ b/hw/intc/arm_gic.c
@@ -28,6 +28,7 @@
#include "qemu/module.h"
#include "trace.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/qtest.h"
/* #define DEBUG_GIC */
diff --git a/hw/intc/arm_gic_common.c b/hw/intc/arm_gic_common.c
index 889327a8cf..0247764953 100644
--- a/hw/intc/arm_gic_common.c
+++ b/hw/intc/arm_gic_common.c
@@ -27,6 +27,7 @@
#include "hw/qdev-properties.h"
#include "migration/vmstate.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
static int gic_pre_save(void *opaque)
{
diff --git a/hw/intc/arm_gic_kvm.c b/hw/intc/arm_gic_kvm.c
index 1d588946bc..05c0a841b3 100644
--- a/hw/intc/arm_gic_kvm.c
+++ b/hw/intc/arm_gic_kvm.c
@@ -24,6 +24,7 @@
#include "qemu/module.h"
#include "migration/blocker.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "kvm_arm.h"
#include "gic_internal.h"
#include "vgic_common.h"
diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c
index 2ebf880ead..a31052e16a 100644
--- a/hw/intc/arm_gicv3_common.c
+++ b/hw/intc/arm_gicv3_common.c
@@ -32,6 +32,7 @@
#include "gicv3_internal.h"
#include "hw/arm/linux-boot-if.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
static void gicv3_gicd_no_migration_shift_bug_post_load(GICv3State *cs)
diff --git a/hw/intc/arm_gicv3_its_common.c b/hw/intc/arm_gicv3_its_common.c
index abaf77057e..52b55d37ae 100644
--- a/hw/intc/arm_gicv3_its_common.c
+++ b/hw/intc/arm_gicv3_its_common.c
@@ -25,6 +25,7 @@
#include "qemu/log.h"
#include "qemu/module.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
static int gicv3_its_pre_save(void *opaque)
{
diff --git a/hw/intc/arm_gicv3_kvm.c b/hw/intc/arm_gicv3_kvm.c
index 72ad916d3d..754f69ae99 100644
--- a/hw/intc/arm_gicv3_kvm.c
+++ b/hw/intc/arm_gicv3_kvm.c
@@ -25,6 +25,7 @@
#include "qemu/error-report.h"
#include "qemu/module.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/runstate.h"
#include "kvm_arm.h"
#include "gicv3_internal.h"
diff --git a/hw/intc/ioapic.c b/hw/intc/ioapic.c
index 716ffc8bbb..9e49ae585d 100644
--- a/hw/intc/ioapic.c
+++ b/hw/intc/ioapic.c
@@ -31,6 +31,7 @@
#include "hw/pci/msi.h"
#include "hw/qdev-properties.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/sysemu.h"
#include "hw/i386/apic-msidef.h"
#include "hw/i386/x86-iommu.h"
diff --git a/hw/intc/openpic_kvm.c b/hw/intc/openpic_kvm.c
index 557dd0c2bf..0373d118f2 100644
--- a/hw/intc/openpic_kvm.c
+++ b/hw/intc/openpic_kvm.c
@@ -31,6 +31,7 @@
#include "hw/qdev-properties.h"
#include "hw/sysbus.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "qemu/log.h"
#include "qemu/module.h"
#include "qom/object.h"
diff --git a/hw/intc/s390_flic_kvm.c b/hw/intc/s390_flic_kvm.c
index 4e86d2d436..84f3520393 100644
--- a/hw/intc/s390_flic_kvm.c
+++ b/hw/intc/s390_flic_kvm.c
@@ -17,6 +17,7 @@
#include "qemu/module.h"
#include "qapi/error.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "hw/s390x/s390_flic.h"
#include "hw/s390x/adapter.h"
#include "hw/s390x/css.h"
diff --git a/hw/intc/spapr_xive_kvm.c b/hw/intc/spapr_xive_kvm.c
index 61fe7bd2d3..bb9cdcf1bd 100644
--- a/hw/intc/spapr_xive_kvm.c
+++ b/hw/intc/spapr_xive_kvm.c
@@ -14,6 +14,7 @@
#include "target/ppc/cpu.h"
#include "sysemu/cpus.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/runstate.h"
#include "hw/ppc/spapr.h"
#include "hw/ppc/spapr_cpu_core.h"
diff --git a/hw/intc/xics.c b/hw/intc/xics.c
index c7f8abd71e..75ca07334a 100644
--- a/hw/intc/xics.c
+++ b/hw/intc/xics.c
@@ -39,6 +39,7 @@
#include "hw/intc/intc.h"
#include "hw/irq.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/reset.h"
void icp_pic_print_info(ICPState *icp, Monitor *mon)
diff --git a/hw/intc/xics_kvm.c b/hw/intc/xics_kvm.c
index 9719d98a17..cb4eca437c 100644
--- a/hw/intc/xics_kvm.c
+++ b/hw/intc/xics_kvm.c
@@ -29,6 +29,7 @@
#include "qapi/error.h"
#include "trace.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "hw/ppc/spapr.h"
#include "hw/ppc/spapr_cpu_core.h"
#include "hw/ppc/xics.h"
diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
index d66d912172..8f1dd5f92b 100644
--- a/hw/misc/ivshmem.c
+++ b/hw/misc/ivshmem.c
@@ -27,6 +27,7 @@
#include "hw/pci/msi.h"
#include "hw/pci/msix.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "migration/blocker.h"
#include "migration/vmstate.h"
#include "qemu/error-report.h"
diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index 117c9c08ed..7c59a33bac 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -29,6 +29,7 @@
#include "sysemu/block-backend-io.h"
#include "sysemu/sysemu.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/reset.h"
#include "sysemu/runstate.h"
#include "kvm_ppc.h"
diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c
index a0d1e1298e..7347486f70 100644
--- a/hw/ppc/spapr_irq.c
+++ b/hw/ppc/spapr_irq.c
@@ -20,6 +20,7 @@
#include "hw/qdev-properties.h"
#include "cpu-models.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "trace.h"
diff --git a/hw/remote/proxy.c b/hw/remote/proxy.c
index 1c7786b52c..e5dadd9f50 100644
--- a/hw/remote/proxy.c
+++ b/hw/remote/proxy.c
@@ -22,6 +22,7 @@
#include "qom/object.h"
#include "qemu/event_notifier.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "util/event_notifier-posix.c"
static void probe_pci_info(PCIDevice *dev, Error **errp);
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index e33e5207ab..589b478c24 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -14,6 +14,7 @@
#include "qapi/error.h"
#include "exec/address-spaces.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "net/net.h"
#include "hw/virtio/virtio.h"
#include "migration/qemu-file-types.h"
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index ec9a854361..22688413c6 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -36,6 +36,7 @@
#include "qemu/range.h"
#include "qemu/units.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/runstate.h"
#include "pci.h"
#include "trace.h"
diff --git a/hw/vfio/platform.c b/hw/vfio/platform.c
index 5af73f9287..0bb291298d 100644
--- a/hw/vfio/platform.c
+++ b/hw/vfio/platform.c
@@ -35,6 +35,7 @@
#include "hw/platform-bus.h"
#include "hw/qdev-properties.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
/*
* Functions used whatever the injection method
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 247325c193..945975b66e 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -34,6 +34,7 @@
#include "hw/pci/msix.h"
#include "hw/loader.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "hw/virtio/virtio-pci.h"
#include "qemu/range.h"
#include "hw/virtio/virtio-bus.h"
diff --git a/target/arm/kvm.c b/target/arm/kvm.c
index f022c644d2..99a9cbde73 100644
--- a/target/arm/kvm.c
+++ b/target/arm/kvm.c
@@ -20,6 +20,7 @@
#include "qapi/error.h"
#include "sysemu/sysemu.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/kvm_int.h"
#include "kvm_arm.h"
#include "cpu.h"
diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
index de531842f6..6582611960 100644
--- a/target/i386/kvm/kvm.c
+++ b/target/i386/kvm/kvm.c
@@ -28,6 +28,8 @@
#include "host-cpu.h"
#include "sysemu/sysemu.h"
#include "sysemu/hw_accel.h"
+#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/kvm_int.h"
#include "sysemu/runstate.h"
#include "kvm_i386.h"
diff --git a/target/i386/kvm/xen-emu.c b/target/i386/kvm/xen-emu.c
index d7c7eb8d9c..2604cba6b1 100644
--- a/target/i386/kvm/xen-emu.c
+++ b/target/i386/kvm/xen-emu.c
@@ -14,6 +14,8 @@
#include "qemu/main-loop.h"
#include "qemu/error-report.h"
#include "hw/xen/xen.h"
+#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/kvm_int.h"
#include "sysemu/kvm_xen.h"
#include "kvm/kvm_i386.h"
diff --git a/target/i386/sev.c b/target/i386/sev.c
index 859e06f6ad..b486f5af1e 100644
--- a/target/i386/sev.c
+++ b/target/i386/sev.c
@@ -26,6 +26,7 @@
#include "qemu/error-report.h"
#include "crypto/hash.h"
#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sev.h"
#include "sysemu/sysemu.h"
#include "sysemu/runstate.h"
diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c
index 3ac7ec9acf..8d7e04afaa 100644
--- a/target/s390x/kvm/kvm.c
+++ b/target/s390x/kvm/kvm.c
@@ -27,6 +27,8 @@
#include "cpu.h"
#include "s390x-internal.h"
#include "kvm_s390x.h"
+#include "sysemu/kvm.h"
+#include "sysemu/kvm_irq.h"
#include "sysemu/kvm_int.h"
#include "qemu/cutils.h"
#include "qapi/error.h"
--
2.38.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [RFC PATCH 2/2] accel/kvm: Declare kvm_arch_irqchip_create() in 'sysemu/kvm_int.h'
2023-04-05 16:29 [RFC PATCH 0/2] accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h' Philippe Mathieu-Daudé
2023-04-05 16:30 ` [RFC PATCH 1/2] " Philippe Mathieu-Daudé
@ 2023-04-05 16:30 ` Philippe Mathieu-Daudé
2023-06-29 12:38 ` [RFC PATCH 0/2] accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h' Philippe Mathieu-Daudé
2 siblings, 0 replies; 4+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-04-05 16:30 UTC (permalink / raw)
To: qemu-devel, Paolo Bonzini
Cc: qemu-arm, kvm, qemu-s390x, qemu-ppc, Philippe Mathieu-Daudé
kvm_arch_irqchip_create() is irrelevant for hardware device
models (files under the hw/ directory), it is meant for the
generic KVM code (files in accel/kvm/) and the target
implementation (files under target/ directory).
"sysemu/kvm.h" header is meant to contain the 'external' KVM
API. Move kvm_arch_irqchip_create() prototype declaration to
"sysemu/kvm_int.h" which should contain the KVM 'internal' API.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/sysemu/kvm.h | 12 ------------
include/sysemu/kvm_int.h | 13 +++++++++++++
2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index 32e223a368..540f6f04a8 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -453,18 +453,6 @@ void kvm_cpu_synchronize_state(CPUState *cpu);
void kvm_init_cpu_signals(CPUState *cpu);
-/**
- * kvm_arch_irqchip_create:
- * @KVMState: The KVMState pointer
- *
- * Allow architectures to create an in-kernel irq chip themselves.
- *
- * Returns: < 0: error
- * 0: irq chip was not created
- * > 0: irq chip was created
- */
-int kvm_arch_irqchip_create(KVMState *s);
-
/**
* kvm_set_one_reg - set a register value in KVM via KVM_SET_ONE_REG ioctl
* @id: The register ID
diff --git a/include/sysemu/kvm_int.h b/include/sysemu/kvm_int.h
index a641c974ea..4a46b661e2 100644
--- a/include/sysemu/kvm_int.h
+++ b/include/sysemu/kvm_int.h
@@ -140,4 +140,17 @@ void kvm_set_max_memslot_size(hwaddr max_slot_size);
* Return: None.
*/
void kvm_hwpoison_page_add(ram_addr_t ram_addr);
+
+/**
+ * kvm_arch_irqchip_create:
+ * @KVMState: The KVMState pointer
+ *
+ * Allow architectures to create an in-kernel irq chip themselves.
+ *
+ * Returns: < 0: error
+ * 0: irq chip was not created
+ * > 0: irq chip was created
+ */
+int kvm_arch_irqchip_create(KVMState *s);
+
#endif
--
2.38.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [RFC PATCH 0/2] accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h'
2023-04-05 16:29 [RFC PATCH 0/2] accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h' Philippe Mathieu-Daudé
2023-04-05 16:30 ` [RFC PATCH 1/2] " Philippe Mathieu-Daudé
2023-04-05 16:30 ` [RFC PATCH 2/2] accel/kvm: Declare kvm_arch_irqchip_create() in 'sysemu/kvm_int.h' Philippe Mathieu-Daudé
@ 2023-06-29 12:38 ` Philippe Mathieu-Daudé
2 siblings, 0 replies; 4+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-06-29 12:38 UTC (permalink / raw)
To: qemu-devel, Paolo Bonzini; +Cc: qemu-arm, kvm, qemu-s390x, qemu-ppc
Ping?
On 5/4/23 18:29, Philippe Mathieu-Daudé wrote:
> Posted individually because it is modifying a lot of files.
>
> RFC: this might not be the best API cut, but "sysemu/kvm.h"
> is a mixed bag hard to sort...
>
> Based-on: <20230405160454.97436-1-philmd@linaro.org>
(not based-on actually)
> Philippe Mathieu-Daudé (2):
> accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h'
> accel/kvm: Declare kvm_arch_irqchip_create() in 'sysemu/kvm_int.h'
>
> include/sysemu/kvm.h | 88 -----------------------------
> include/sysemu/kvm_int.h | 13 +++++
> include/sysemu/kvm_irq.h | 100 +++++++++++++++++++++++++++++++++
> target/i386/kvm/kvm_i386.h | 1 +
> accel/kvm/kvm-all.c | 2 +
> accel/stubs/kvm-stub.c | 1 +
> hw/arm/virt.c | 1 +
> hw/cpu/a15mpcore.c | 1 +
> hw/hyperv/hyperv.c | 1 +
> hw/i386/intel_iommu.c | 1 +
> hw/i386/kvm/apic.c | 1 +
> hw/i386/kvm/i8259.c | 1 +
> hw/i386/kvm/ioapic.c | 1 +
> hw/i386/kvmvapic.c | 1 +
> hw/i386/pc.c | 1 +
> hw/i386/x86-iommu.c | 1 +
> hw/intc/arm_gic.c | 1 +
> hw/intc/arm_gic_common.c | 1 +
> hw/intc/arm_gic_kvm.c | 1 +
> hw/intc/arm_gicv3_common.c | 1 +
> hw/intc/arm_gicv3_its_common.c | 1 +
> hw/intc/arm_gicv3_kvm.c | 1 +
> hw/intc/ioapic.c | 1 +
> hw/intc/openpic_kvm.c | 1 +
> hw/intc/s390_flic_kvm.c | 1 +
> hw/intc/spapr_xive_kvm.c | 1 +
> hw/intc/xics.c | 1 +
> hw/intc/xics_kvm.c | 1 +
> hw/misc/ivshmem.c | 1 +
> hw/ppc/e500.c | 1 +
> hw/ppc/spapr_irq.c | 1 +
> hw/remote/proxy.c | 1 +
> hw/s390x/virtio-ccw.c | 1 +
> hw/vfio/pci.c | 1 +
> hw/vfio/platform.c | 1 +
> hw/virtio/virtio-pci.c | 1 +
> target/arm/kvm.c | 1 +
> target/i386/kvm/kvm.c | 2 +
> target/i386/kvm/xen-emu.c | 2 +
> target/i386/sev.c | 1 +
> target/s390x/kvm/kvm.c | 2 +
> 41 files changed, 155 insertions(+), 88 deletions(-)
> create mode 100644 include/sysemu/kvm_irq.h
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-06-29 12:39 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-05 16:29 [RFC PATCH 0/2] accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h' Philippe Mathieu-Daudé
2023-04-05 16:30 ` [RFC PATCH 1/2] " Philippe Mathieu-Daudé
2023-04-05 16:30 ` [RFC PATCH 2/2] accel/kvm: Declare kvm_arch_irqchip_create() in 'sysemu/kvm_int.h' Philippe Mathieu-Daudé
2023-06-29 12:38 ` [RFC PATCH 0/2] accel/kvm: Extract 'sysemu/kvm_irq.h' from 'sysemu/kvm.h' Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).