mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
kvm: Decouple 'irqfds usable' from 'kernel irqchip'
Instead of assuming that we can use irqfds if and only if kvm_irqchip_in_kernel(), add a bool to the KVMState which indicates this, and is set only on x86 and only if the irqchip is in the kernel. The kernel documentation implies that the only thing you need to use KVM_IRQFD is that KVM_CAP_IRQFD is advertised, but this seems to be untrue. In particular the kernel does not (alas) return a sensible error if you try to set up an irqfd when you haven't created an irqchip. If it did we could remove all this nonsense and let the kernel return the error code. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Acked-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
1d31f66bbc
commit
cc7e0ddf5a
4 changed files with 18 additions and 1 deletions
11
kvm.h
11
kvm.h
|
@ -25,6 +25,7 @@
|
|||
extern int kvm_allowed;
|
||||
extern bool kvm_kernel_irqchip;
|
||||
extern bool kvm_async_interrupts_allowed;
|
||||
extern bool kvm_irqfds_allowed;
|
||||
|
||||
#if defined CONFIG_KVM || !defined NEED_CPU_H
|
||||
#define kvm_enabled() (kvm_allowed)
|
||||
|
@ -40,10 +41,20 @@ extern bool kvm_async_interrupts_allowed;
|
|||
*/
|
||||
#define kvm_async_interrupts_enabled() (kvm_async_interrupts_allowed)
|
||||
|
||||
/**
|
||||
* kvm_irqfds_enabled:
|
||||
*
|
||||
* 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).
|
||||
*/
|
||||
#define kvm_irqfds_enabled() (kvm_irqfds_allowed)
|
||||
|
||||
#else
|
||||
#define kvm_enabled() (0)
|
||||
#define kvm_irqchip_in_kernel() (false)
|
||||
#define kvm_async_interrupts_enabled() (false)
|
||||
#define kvm_irqfds_enabled() (false)
|
||||
#endif
|
||||
|
||||
struct kvm_run;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue