We unfortunately need some additional "#ifndef NEED_CPU_H" fuzz in
include/sysemu/kvm.h for this, so that the header can still be included
from common code (which is done all over the place), but now we can
finally be sure that nobody uses this define in a wrong place anymore.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
hw/acpi/ich9.c | 1 -
include/exec/poison.h | 1 +
include/sysemu/kvm.h | 37 +++++++++++++++++++++++++++++++++++--
3 files changed, 36 insertions(+), 3 deletions(-)
diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c
index 5c279bb..c5d8646 100644
--- a/hw/acpi/ich9.c
+++ b/hw/acpi/ich9.c
@@ -33,7 +33,6 @@
#include "sysemu/sysemu.h"
#include "hw/acpi/acpi.h"
#include "hw/acpi/tco.h"
-#include "sysemu/kvm.h"
#include "exec/address-spaces.h"
#include "hw/i386/ich9.h"
diff --git a/include/exec/poison.h b/include/exec/poison.h
index 5ffed4d..540fc70 100644
--- a/include/exec/poison.h
+++ b/include/exec/poison.h
@@ -80,6 +80,7 @@
#pragma GCC poison CONFIG_LINUX_USER
#pragma GCC poison CONFIG_VHOST_NET
+#pragma GCC poison CONFIG_KVM
#endif
#endif
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index 1e91613..8cc57e4 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -19,6 +19,8 @@
#include "exec/memattrs.h"
#include "hw/irq.h"
+#ifdef NEED_CPU_H
+
#ifdef CONFIG_KVM
#include <linux/kvm.h>
#include <linux/kvm_para.h>
@@ -39,6 +41,8 @@
#define KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 0
#endif
+#endif /* NEED_CPU_H */
+
extern bool kvm_allowed;
extern bool kvm_kernel_irqchip;
extern bool kvm_split_irqchip;
@@ -55,7 +59,8 @@ extern bool kvm_direct_msi_allowed;
extern bool kvm_ioeventfd_any_length_allowed;
extern bool kvm_msi_use_devid;
-#if defined CONFIG_KVM || !defined NEED_CPU_H
+#if !defined(NEED_CPU_H)
+
#define kvm_enabled() (kvm_allowed)
/**
* kvm_irqchip_in_kernel:
@@ -178,6 +183,31 @@ extern bool kvm_msi_use_devid;
#define kvm_msi_devid_required() (kvm_msi_use_devid)
#else
+
+#ifdef CONFIG_KVM
+
+/*
+ * Same definitions again, but we need to keep them separate
+ * since CONFIG_KVM is poisoned without NEED_CPU_H
+ */
+#define kvm_enabled() (kvm_allowed)
+#define kvm_irqchip_in_kernel() (kvm_kernel_irqchip)
+#define kvm_irqchip_is_split() (kvm_split_irqchip)
+#define kvm_async_interrupts_enabled() (kvm_async_interrupts_allowed)
+#define kvm_halt_in_kernel() (kvm_halt_in_kernel_allowed)
+#define kvm_eventfds_enabled() (kvm_eventfds_allowed)
+#define kvm_irqfds_enabled() (kvm_irqfds_allowed)
+#define kvm_resamplefds_enabled() (kvm_resamplefds_allowed)
+#define kvm_msi_via_irqfd_enabled() (kvm_msi_via_irqfd_allowed)
+#define kvm_gsi_routing_enabled() (kvm_gsi_routing_allowed)
+#define kvm_gsi_direct_mapping() (kvm_gsi_direct_mapping)
+#define kvm_readonly_mem_enabled() (kvm_readonly_mem_allowed)
+#define kvm_direct_msi_enabled() (kvm_direct_msi_allowed)
+#define kvm_ioeventfd_any_length_enabled() (kvm_ioeventfd_any_length_allowed)
+#define kvm_msi_devid_required() (kvm_msi_use_devid)
+
+#else
+
#define kvm_enabled() (0)
#define kvm_irqchip_in_kernel() (false)
#define kvm_irqchip_is_split() (false)
@@ -193,7 +223,10 @@ extern bool kvm_msi_use_devid;
#define kvm_direct_msi_enabled() (false)
#define kvm_ioeventfd_any_length_enabled() (false)
#define kvm_msi_devid_required() (false)
-#endif
+
+#endif /* CONFIG_KVM */
+
+#endif /* NEED_CPU_H */
struct kvm_run;
struct kvm_lapic_state;
--
1.8.3.1
----- Original Message ----- > From: "Thomas Huth" <thuth@redhat.com> > To: qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com> > Sent: Wednesday, June 14, 2017 9:21:53 PM > Subject: [PATCH 4/4] include/exec/poison: Mark CONFIG_KVM as poisoned, too > > We unfortunately need some additional "#ifndef NEED_CPU_H" fuzz in > include/sysemu/kvm.h for this, so that the header can still be included > from common code (which is done all over the place), but now we can > finally be sure that nobody uses this define in a wrong place anymore. > > Signed-off-by: Thomas Huth <thuth@redhat.com> > --- > hw/acpi/ich9.c | 1 - > include/exec/poison.h | 1 + > include/sysemu/kvm.h | 37 +++++++++++++++++++++++++++++++++++-- > 3 files changed, 36 insertions(+), 3 deletions(-) > > diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c > index 5c279bb..c5d8646 100644 > --- a/hw/acpi/ich9.c > +++ b/hw/acpi/ich9.c > @@ -33,7 +33,6 @@ > #include "sysemu/sysemu.h" > #include "hw/acpi/acpi.h" > #include "hw/acpi/tco.h" > -#include "sysemu/kvm.h" > #include "exec/address-spaces.h" > > #include "hw/i386/ich9.h" > diff --git a/include/exec/poison.h b/include/exec/poison.h > index 5ffed4d..540fc70 100644 > --- a/include/exec/poison.h > +++ b/include/exec/poison.h > @@ -80,6 +80,7 @@ > > #pragma GCC poison CONFIG_LINUX_USER > #pragma GCC poison CONFIG_VHOST_NET > +#pragma GCC poison CONFIG_KVM > > #endif > #endif > diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h > index 1e91613..8cc57e4 100644 > --- a/include/sysemu/kvm.h > +++ b/include/sysemu/kvm.h > @@ -19,6 +19,8 @@ > #include "exec/memattrs.h" > #include "hw/irq.h" > > +#ifdef NEED_CPU_H > + > #ifdef CONFIG_KVM > #include <linux/kvm.h> > #include <linux/kvm_para.h> > @@ -39,6 +41,8 @@ > #define KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 0 These defines can be moved to kvm_i386.h too. > #endif > > +#endif /* NEED_CPU_H */ > + > extern bool kvm_allowed; > extern bool kvm_kernel_irqchip; > extern bool kvm_split_irqchip; > @@ -55,7 +59,8 @@ extern bool kvm_direct_msi_allowed; > extern bool kvm_ioeventfd_any_length_allowed; > extern bool kvm_msi_use_devid; > > -#if defined CONFIG_KVM || !defined NEED_CPU_H > +#if !defined(NEED_CPU_H) > + > #define kvm_enabled() (kvm_allowed) > /** > * kvm_irqchip_in_kernel: > @@ -178,6 +183,31 @@ extern bool kvm_msi_use_devid; > #define kvm_msi_devid_required() (kvm_msi_use_devid) > > #else > + > +#ifdef CONFIG_KVM > + > +/* > + * Same definitions again, but we need to keep them separate > + * since CONFIG_KVM is poisoned without NEED_CPU_H > + */ Maybe #ifndef NEED_CPU_H # define CONFIG_KVM_POSSIBLE #elif defined CONFIG_KVM # define CONFIG_KVM_POSSIBLE #endif #ifdef CONFIG_KVM_POSSIBLE #define kvm_enabled() (kvm_allowed) ... #else #define kvm_enabled() 0 ... #endif ? > +#define kvm_enabled() (kvm_allowed) > +#define kvm_irqchip_in_kernel() (kvm_kernel_irqchip) > +#define kvm_irqchip_is_split() (kvm_split_irqchip) > +#define kvm_async_interrupts_enabled() (kvm_async_interrupts_allowed) > +#define kvm_halt_in_kernel() (kvm_halt_in_kernel_allowed) > +#define kvm_eventfds_enabled() (kvm_eventfds_allowed) > +#define kvm_irqfds_enabled() (kvm_irqfds_allowed) > +#define kvm_resamplefds_enabled() (kvm_resamplefds_allowed) > +#define kvm_msi_via_irqfd_enabled() (kvm_msi_via_irqfd_allowed) > +#define kvm_gsi_routing_enabled() (kvm_gsi_routing_allowed) > +#define kvm_gsi_direct_mapping() (kvm_gsi_direct_mapping) > +#define kvm_readonly_mem_enabled() (kvm_readonly_mem_allowed) > +#define kvm_direct_msi_enabled() (kvm_direct_msi_allowed) > +#define kvm_ioeventfd_any_length_enabled() > (kvm_ioeventfd_any_length_allowed) > +#define kvm_msi_devid_required() (kvm_msi_use_devid) > + > +#else > + > #define kvm_enabled() (0) > #define kvm_irqchip_in_kernel() (false) > #define kvm_irqchip_is_split() (false) > @@ -193,7 +223,10 @@ extern bool kvm_msi_use_devid; > #define kvm_direct_msi_enabled() (false) > #define kvm_ioeventfd_any_length_enabled() (false) > #define kvm_msi_devid_required() (false) > -#endif > + > +#endif /* CONFIG_KVM */ > + > +#endif /* NEED_CPU_H */ > > struct kvm_run; > struct kvm_lapic_state; > -- > 1.8.3.1 > >
On 14.06.2017 22:59, Paolo Bonzini wrote: > > ----- Original Message ----- >> From: "Thomas Huth" <thuth@redhat.com> >> To: qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com> >> Sent: Wednesday, June 14, 2017 9:21:53 PM >> Subject: [PATCH 4/4] include/exec/poison: Mark CONFIG_KVM as poisoned, too >> >> We unfortunately need some additional "#ifndef NEED_CPU_H" fuzz in >> include/sysemu/kvm.h for this, so that the header can still be included >> from common code (which is done all over the place), but now we can >> finally be sure that nobody uses this define in a wrong place anymore. >> >> Signed-off-by: Thomas Huth <thuth@redhat.com> >> --- >> hw/acpi/ich9.c | 1 - >> include/exec/poison.h | 1 + >> include/sysemu/kvm.h | 37 +++++++++++++++++++++++++++++++++++-- >> 3 files changed, 36 insertions(+), 3 deletions(-) >> >> diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c >> index 5c279bb..c5d8646 100644 >> --- a/hw/acpi/ich9.c >> +++ b/hw/acpi/ich9.c >> @@ -33,7 +33,6 @@ >> #include "sysemu/sysemu.h" >> #include "hw/acpi/acpi.h" >> #include "hw/acpi/tco.h" >> -#include "sysemu/kvm.h" >> #include "exec/address-spaces.h" >> >> #include "hw/i386/ich9.h" >> diff --git a/include/exec/poison.h b/include/exec/poison.h >> index 5ffed4d..540fc70 100644 >> --- a/include/exec/poison.h >> +++ b/include/exec/poison.h >> @@ -80,6 +80,7 @@ >> >> #pragma GCC poison CONFIG_LINUX_USER >> #pragma GCC poison CONFIG_VHOST_NET >> +#pragma GCC poison CONFIG_KVM >> >> #endif >> #endif >> diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h >> index 1e91613..8cc57e4 100644 >> --- a/include/sysemu/kvm.h >> +++ b/include/sysemu/kvm.h >> @@ -19,6 +19,8 @@ >> #include "exec/memattrs.h" >> #include "hw/irq.h" >> >> +#ifdef NEED_CPU_H >> + >> #ifdef CONFIG_KVM >> #include <linux/kvm.h> >> #include <linux/kvm_para.h> >> @@ -39,6 +41,8 @@ >> #define KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 0 > > These defines can be moved to kvm_i386.h too. OK. I think we could likely even get rid of most of them. Apart from KVM_CPUID_FEATURES, all the defines are only used in target/i386/kvm.c or in hw/i386/kvm/* files, as far as I can see, and CONFIG_KVM should always be defined there. >> #endif >> >> +#endif /* NEED_CPU_H */ >> + >> extern bool kvm_allowed; >> extern bool kvm_kernel_irqchip; >> extern bool kvm_split_irqchip; >> @@ -55,7 +59,8 @@ extern bool kvm_direct_msi_allowed; >> extern bool kvm_ioeventfd_any_length_allowed; >> extern bool kvm_msi_use_devid; >> >> -#if defined CONFIG_KVM || !defined NEED_CPU_H >> +#if !defined(NEED_CPU_H) >> + >> #define kvm_enabled() (kvm_allowed) >> /** >> * kvm_irqchip_in_kernel: >> @@ -178,6 +183,31 @@ extern bool kvm_msi_use_devid; >> #define kvm_msi_devid_required() (kvm_msi_use_devid) >> >> #else >> + >> +#ifdef CONFIG_KVM >> + >> +/* >> + * Same definitions again, but we need to keep them separate >> + * since CONFIG_KVM is poisoned without NEED_CPU_H >> + */ > > Maybe > > #ifndef NEED_CPU_H > # define CONFIG_KVM_POSSIBLE > #elif defined CONFIG_KVM > # define CONFIG_KVM_POSSIBLE > #endif > > #ifdef CONFIG_KVM_POSSIBLE > #define kvm_enabled() (kvm_allowed) > ... > #else > #define kvm_enabled() 0 > ... > #endif > > ? Good idea, I'll change that! >> +#define kvm_enabled() (kvm_allowed) >> +#define kvm_irqchip_in_kernel() (kvm_kernel_irqchip) >> +#define kvm_irqchip_is_split() (kvm_split_irqchip) >> +#define kvm_async_interrupts_enabled() (kvm_async_interrupts_allowed) >> +#define kvm_halt_in_kernel() (kvm_halt_in_kernel_allowed) >> +#define kvm_eventfds_enabled() (kvm_eventfds_allowed) >> +#define kvm_irqfds_enabled() (kvm_irqfds_allowed) >> +#define kvm_resamplefds_enabled() (kvm_resamplefds_allowed) >> +#define kvm_msi_via_irqfd_enabled() (kvm_msi_via_irqfd_allowed) >> +#define kvm_gsi_routing_enabled() (kvm_gsi_routing_allowed) >> +#define kvm_gsi_direct_mapping() (kvm_gsi_direct_mapping) >> +#define kvm_readonly_mem_enabled() (kvm_readonly_mem_allowed) >> +#define kvm_direct_msi_enabled() (kvm_direct_msi_allowed) >> +#define kvm_ioeventfd_any_length_enabled() >> (kvm_ioeventfd_any_length_allowed) >> +#define kvm_msi_devid_required() (kvm_msi_use_devid) >> + >> +#else >> + >> #define kvm_enabled() (0) >> #define kvm_irqchip_in_kernel() (false) >> #define kvm_irqchip_is_split() (false) >> @@ -193,7 +223,10 @@ extern bool kvm_msi_use_devid; >> #define kvm_direct_msi_enabled() (false) >> #define kvm_ioeventfd_any_length_enabled() (false) >> #define kvm_msi_devid_required() (false) >> -#endif >> + >> +#endif /* CONFIG_KVM */ >> + >> +#endif /* NEED_CPU_H */ >> >> struct kvm_run; >> struct kvm_lapic_state; >> -- >> 1.8.3.1 >> >>
© 2016 - 2025 Red Hat, Inc.