[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 04/17] kvm: require KVM_CAP_IRQFD for kernel irqchip
From: |
Paolo Bonzini |
Subject: |
[PATCH 04/17] kvm: require KVM_CAP_IRQFD for kernel irqchip |
Date: |
Wed, 18 Oct 2023 18:37:15 +0200 |
KVM_CAP_IRQFD is always available on architectures that support an in-kernel
interrupt controller, and was introduced in Linux 2.6.32. We can require
it unconditionally.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
accel/kvm/kvm-all.c | 13 +++++--------
accel/stubs/kvm-stub.c | 1 -
hw/intc/arm_gicv3_its_kvm.c | 2 +-
include/sysemu/kvm.h | 6 +++---
target/riscv/kvm/kvm-cpu.c | 2 +-
5 files changed, 10 insertions(+), 14 deletions(-)
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 0c7b0569da4..be50d47f7b4 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -91,7 +91,6 @@ bool kvm_split_irqchip;
bool kvm_async_interrupts_allowed;
bool kvm_halt_in_kernel_allowed;
bool kvm_eventfds_allowed;
-bool kvm_irqfds_allowed;
bool kvm_resamplefds_allowed;
bool kvm_msi_via_irqfd_allowed;
bool kvm_gsi_routing_allowed;
@@ -2128,10 +2127,6 @@ static int kvm_irqchip_assign_irqfd(KVMState *s,
EventNotifier *event,
}
}
- if (!kvm_irqfds_enabled()) {
- return -ENOSYS;
- }
-
return kvm_vm_ioctl(s, KVM_IRQFD, &irqfd);
}
@@ -2292,6 +2287,11 @@ static void kvm_irqchip_create(KVMState *s)
return;
}
+ if (kvm_check_extension(s, KVM_CAP_IRQFD) <= 0) {
+ fprintf(stderr, "kvm: irqfd not implemented\n");
+ exit(1);
+ }
+
/* First probe and see if there's a arch-specific hook to create the
* in-kernel irqchip for us */
ret = kvm_arch_irqchip_create(s);
@@ -2589,9 +2589,6 @@ static int kvm_init(MachineState *ms)
kvm_eventfds_allowed =
(kvm_check_extension(s, KVM_CAP_IOEVENTFD) > 0);
- kvm_irqfds_allowed =
- (kvm_check_extension(s, KVM_CAP_IRQFD) > 0);
-
kvm_resamplefds_allowed =
(kvm_check_extension(s, KVM_CAP_IRQFD_RESAMPLE) > 0);
diff --git a/accel/stubs/kvm-stub.c b/accel/stubs/kvm-stub.c
index bce005adad8..19d58f2778f 100644
--- a/accel/stubs/kvm-stub.c
+++ b/accel/stubs/kvm-stub.c
@@ -18,7 +18,6 @@ KVMState *kvm_state;
bool kvm_kernel_irqchip;
bool kvm_async_interrupts_allowed;
bool kvm_eventfds_allowed;
-bool kvm_irqfds_allowed;
bool kvm_resamplefds_allowed;
bool kvm_msi_via_irqfd_allowed;
bool kvm_gsi_routing_allowed;
diff --git a/hw/intc/arm_gicv3_its_kvm.c b/hw/intc/arm_gicv3_its_kvm.c
index 7eda9fb86ea..178f6d7de90 100644
--- a/hw/intc/arm_gicv3_its_kvm.c
+++ b/hw/intc/arm_gicv3_its_kvm.c
@@ -124,7 +124,7 @@ static void kvm_arm_its_realize(DeviceState *dev, Error
**errp)
kvm_msi_use_devid = true;
kvm_gsi_direct_mapping = false;
- kvm_msi_via_irqfd_allowed = kvm_irqfds_enabled();
+ kvm_msi_via_irqfd_allowed = true;
}
/**
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index 93dccf5dd92..575dee53b39 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -37,7 +37,6 @@ extern bool kvm_split_irqchip;
extern bool kvm_async_interrupts_allowed;
extern bool kvm_halt_in_kernel_allowed;
extern bool kvm_eventfds_allowed;
-extern bool kvm_irqfds_allowed;
extern bool kvm_resamplefds_allowed;
extern bool kvm_msi_via_irqfd_allowed;
extern bool kvm_gsi_routing_allowed;
@@ -102,8 +101,10 @@ extern bool kvm_msi_use_devid;
* Returns: true if we can use irqfds to inject interrupts into
* a KVM CPU (ie the kernel supports irqfds and we are running
* with a configuration where it is meaningful to use them).
+ *
+ * Always available if running with in-kernel irqchip.
*/
-#define kvm_irqfds_enabled() (kvm_irqfds_allowed)
+#define kvm_irqfds_enabled() kvm_irqchip_in_kernel()
/**
* kvm_resamplefds_enabled:
@@ -167,7 +168,6 @@ extern bool kvm_msi_use_devid;
#define kvm_async_interrupts_enabled() (false)
#define kvm_halt_in_kernel() (false)
#define kvm_eventfds_enabled() (false)
-#define kvm_irqfds_enabled() (false)
#define kvm_resamplefds_enabled() (false)
#define kvm_msi_via_irqfd_enabled() (false)
#define kvm_gsi_routing_allowed() (false)
diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c
index 090d6176275..26e68c7ab45 100644
--- a/target/riscv/kvm/kvm-cpu.c
+++ b/target/riscv/kvm/kvm-cpu.c
@@ -1420,7 +1420,7 @@ void kvm_riscv_aia_create(MachineState *machine, uint64_t
group_shift,
exit(1);
}
- kvm_msi_via_irqfd_allowed = kvm_irqfds_enabled();
+ kvm_msi_via_irqfd_allowed = true;
}
static void kvm_cpu_instance_init(CPUState *cs)
--
2.41.0
- [PATCH 00/17] kvm: drop support for really old kernels, Paolo Bonzini, 2023/10/18
- [PATCH 01/17] kvm: remove unnecessary stub, Paolo Bonzini, 2023/10/18
- [PATCH 02/17] kvm: require KVM_CAP_INTERNAL_ERROR_DATA, Paolo Bonzini, 2023/10/18
- [PATCH 06/17] kvm: assume that many ioeventfds can be created, Paolo Bonzini, 2023/10/18
- [PATCH 04/17] kvm: require KVM_CAP_IRQFD for kernel irqchip,
Paolo Bonzini <=
- [PATCH 05/17] kvm: drop reference to KVM_CAP_PCI_2_3, Paolo Bonzini, 2023/10/18
- [PATCH 03/17] kvm: require KVM_CAP_SIGNAL_MSI, Paolo Bonzini, 2023/10/18
- [PATCH 07/17] kvm: require KVM_CAP_IOEVENTFD and KVM_CAP_IOEVENTFD_ANY_LENGTH, Paolo Bonzini, 2023/10/18
- [PATCH 09/17] kvm: arm: require KVM_CAP_SET_VCPU_EVENTS, Paolo Bonzini, 2023/10/18
- [PATCH 08/17] kvm: unify listeners for PIO address space, Paolo Bonzini, 2023/10/18
- [PATCH 12/17] kvm: i386: require KVM_CAP_XSAVE, Paolo Bonzini, 2023/10/18
- [PATCH 15/17] kvm: i386: require KVM_CAP_ADJUST_CLOCK, Paolo Bonzini, 2023/10/18
- [PATCH 16/17] kvm: i386: require KVM_CAP_SET_IDENTITY_MAP_ADDR, Paolo Bonzini, 2023/10/18