There is no direct relevance between CONFIG_KVM and NEED_CPU_H. Thus logic of why using "#if defined CONFIG_KVM || !defined NEED_CPU_H" is hard to explain and hard to understand.
The root cause is that we can not *always* get correct CONFIG_KVM, because: - CONFIG_KVM is defined in [*-softmmu | *-linux-user]/config-target.h - The "common" code outside folder [*-softmmu | *-linux-user] (in build time) can NOT include config-target.h and can NOT *always* have valid CONFIG_KVM. By removing "#if defined CONFIG_KVM || !defined NEED_CPU_H", we completely rely on runtime value. Advantage of applying this patch is: logic is clear Disadvantage is: binary code for non-CONFIG_KVM target is bigger (like sh4-softmmu or *-linux-user) - kvm_enabled() is always runtime (kvm_allowed), and compiler won't optimize if ( kvm_enabled() ) { ... } type of code. - Before the patch, for condition (!CONFIG_KVM && NEED_CPU_H), above example is preprocessed to be if (0) { ... } and then optimized >From another perspective to explain why this patch does not cause troubles. 1) Before this patch, true value table: -------------------------------------------------------------------------- kvm_enabled = runtime value? | CONFIG_KVM defined? | NEED_CPU_H defined? | kvm_allowed | | | kvm_irqchip_in_kernel | | | ... for the rest 7 defines | | | -------------------------------------------------------------------------- runtime value | Y | Y | runtime value | Y | N | (a) const (0/false) | N | Y | runtime value | N | N | -------------------------------------------------------------------------- 2) After this patch, true value table: -------------------------------------------------------------------------- kvm_enabled = runtime value? | CONFIG_KVM defined? | NEED_CPU_H defined? | ... for the rest 8 defines | | | -------------------------------------------------------------------------- runtime value | Y | Y | runtime value | Y | N | (b) runtime value (0/false) | N | Y | runtime value | N | N | -------------------------------------------------------------------------- - Logic of runtime value kvm_allowed is: ( (kvm_available() in arch_init.c) && ((-machine accel=kvm) || (-enable-kvm) in runtime) ) - If CONFIG_KVM not defined, kvm_available() is always returns 0 - Thus for (b), runtime is always 0 - (b) is identical to (a) - result of after patch is identical to before patch Signed-off-by: Xuebing Wang <xbi...@gmail.com> --- include/sysemu/kvm.h | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h index a02d67c..1829206 100644 --- a/include/sysemu/kvm.h +++ b/include/sysemu/kvm.h @@ -49,7 +49,6 @@ extern bool kvm_gsi_routing_allowed; extern bool kvm_gsi_direct_mapping; extern bool kvm_readonly_mem_allowed; -#if defined CONFIG_KVM || !defined NEED_CPU_H #define kvm_enabled() (kvm_allowed) /** * kvm_irqchip_in_kernel: @@ -123,18 +122,6 @@ extern bool kvm_readonly_mem_allowed; */ #define kvm_readonly_mem_enabled() (kvm_readonly_mem_allowed) -#else -#define kvm_enabled() (0) -#define kvm_irqchip_in_kernel() (false) -#define kvm_async_interrupts_enabled() (false) -#define kvm_halt_in_kernel() (false) -#define kvm_irqfds_enabled() (false) -#define kvm_msi_via_irqfd_enabled() (false) -#define kvm_gsi_routing_allowed() (false) -#define kvm_gsi_direct_mapping() (false) -#define kvm_readonly_mem_enabled() (false) -#endif - struct kvm_run; struct kvm_lapic_state; -- 1.7.9.5