kvm-kmod: fix build on kernels with kvm trace set
PATCH 1/1 kvm-kmod: fix build on kernels with kvm trace set
CONFIG_KVM_TRACE in kernel conflicts with the definition in external module. external-module-compat-comm.h tried to work around this, but this didn't work as some code still does #include <linux/autoconf.h> directly.
Solve this differently by s/CONFIG_KVM_TRACE/CONFIG_KMOD_KVM_TRACE/ in awk. Had to tighten regular expressions in hack-module.awk so that they don't trigger on kvm_host.h .
--- Makefile | 5 +++-- configure | 2 +- external-module-compat-comm.h | 7 ------- x86/Kbuild | 2 +- x86/hack-module.awk | 8 +++++--- 5 files changed, 10 insertions(+), 14 deletions(-)
Makefile +3 -2
@@ -34,8 +34,8 @@ hack-files-ia64 = kvm_main.c kvm_fw.c kvm_lib.c kvm-ia64.c hack-files = $(hack-files-$(ARCH_DIR)) -ifeq ($(EXT_CONFIG_KVM_TRACE),y) -module_defines += -DEXT_CONFIG_KVM_TRACE=y +ifeq ($(CONFIG_KMOD_KVM_TRACE),y) +module_defines += -DCONFIG_KMOD_KVM_TRACE=1 endif all:: prerequisite
@@ -72,6 +72,7 @@ header-sync: for i in $$(find $T -name '*.h'); do \ $(call unifdef,$$i); done $(call hack, include/linux/kvm.h) + $(call hack, include/linux/kvm_host.h) $(call hack, include/asm-$(ARCH_DIR)/kvm.h) set -e && for i in $$(find $T -type f -printf '%P '); \ do mkdir -p $$(dirname $$i); cmp -s $$i $T/$$i || cp $T/$$i $$i; done
configure +1 -1
@@ -122,5 +122,5 @@ DEPMOD_VERSION=$depmod_version EOF cat <<EOF > config.kbuild -EXT_CONFIG_KVM_TRACE=$kvm_trace +CONFIG_KMOD_KVM_TRACE=$kvm_trace EOF
external-module-compat-comm.h +0 -7
@@ -18,13 +18,6 @@#include <linux/hrtimer.h> #include <asm/bitops.h> -/* Override CONFIG_KVM_TRACE */ -#ifdef EXT_CONFIG_KVM_TRACE -# define CONFIG_KVM_TRACE 1 -#else -# undef CONFIG_KVM_TRACE -#endif -/* * 2.6.16 does not have GFP_NOWAIT */
x86/Kbuild +1 -1
@@ -7,7 +7,7 @@ kvm-objs := kvm_main.o x86.o mmu.o x86_emulate.o ../anon_inodes.o irq.o i8259.o lapic.o ioapic.o preempt.o i8254.o coalesced_mmio.o irq_comm.o \ timer.o \ ../external-module-compat.o -ifeq ($(EXT_CONFIG_KVM_TRACE),y) +ifeq ($(CONFIG_KMOD_KVM_TRACE),y) kvm-objs += kvm_trace.o endif ifeq ($(CONFIG_IOMMU_API),y)
x86/hack-module.awk +5 -3
@@ -4,7 +4,7 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ "hrtimer_expires_remaining " \ "on_each_cpu relay_open request_irq" , compat_apis); } -/^int kvm_init\(/ { anon_inodes = 1 } +/^int kvm_init\([^)]*\)$/ { anon_inodes = 1 } /return 0;/ && anon_inodes { print "\tr = kvm_init_anon_inodes();";
@@ -17,7 +17,7 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ anon_inodes = 0 } -/^void kvm_exit/ { anon_inodes_exit = 1 } +/^void kvm_exit[^)]*\)$/ { anon_inodes_exit = 1 } /\}/ && anon_inodes_exit { print "\tkvm_exit_anon_inodes();";
@@ -25,7 +25,7 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ anon_inodes_exit = 0 } -/^int kvm_arch_init/ { kvm_arch_init = 1 } +/^int kvm_arch_init[^)])$/ { kvm_arch_init = 1 } /\<tsc_khz\>/ && kvm_arch_init { sub("\\<tsc_khz\\>", "kvm_tsc_khz") } /^}/ { kvm_arch_init = 0 }
@@ -85,6 +85,8 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ /\kvm_.*_fops\.owner = module;/ { $0 = "IF_ANON_INODES_DOES_REFCOUNTS(" $0 ")" } +{ sub(/\<CONFIG_KVM_TRACE\>/, "CONFIG_KMOD_KVM_TRACE") } + { print } /unsigned long flags;/ && vmx_load_host_state {
Signature · 1 line
1.6.3.rc3.dirty
Quoted 117 lines · Michael S. Tsirkin
CONFIG_KVM_TRACEin kernel conflicts with the definition in external module.external-module-compat-comm.htried to work around this, but this didn't work as some code still does #include <linux/autoconf.h> directly.Solve this differently by s/CONFIG_KVM_TRACE/CONFIG_KMOD_KVM_TRACE/ in awk. Had to tighten regular expressions in hack-module.awk so that they don't trigger on
kvm_host.h.Signed-off-by Michael S. Tsirkin <[email protected]>--- Makefile | 5 +++-- configure | 2 +- external-module-compat-comm.h | 7 ------- x86/Kbuild | 2 +- x86/hack-module.awk | 8 +++++--- 5 files changed, 10 insertions(+), 14 deletions(-)Makefile +3
-2@@ -34,8 +34,8 @@ hack-files-ia64 = kvm_main.c kvm_fw.c kvm_lib.c kvm-ia64.c hack-files = $(hack-files-$(ARCH_DIR)) -ifeq ($(EXT_CONFIG_KVM_TRACE),y) -module_defines += -DEXT_CONFIG_KVM_TRACE=y +ifeq ($(CONFIG_KMOD_KVM_TRACE),y) +module_defines += -DCONFIG_KMOD_KVM_TRACE=1 endif all:: prerequisite@@ -72,6 +72,7 @@ header-sync: for i in $$(find $T -name '*.h'); do \ $(call unifdef,$$i); done $(call hack, include/linux/kvm.h) + $(call hack, include/linux/kvm_host.h) $(call hack, include/asm-$(ARCH_DIR)/kvm.h) set -e && for i in $$(find $T -type f -printf '%P '); \ do mkdir -p $$(dirname $$i); cmp -s $$i $T/$$i || cp $T/$$i $$i; doneconfigure +1
-1@@ -122,5 +122,5 @@ DEPMOD_VERSION=$depmod_version EOF cat <<EOF > config.kbuild -EXT_CONFIG_KVM_TRACE=$kvm_trace +CONFIG_KMOD_KVM_TRACE=$kvm_trace EOFexternal-module-compat-comm.h +0
-7@@ -18,13 +18,6 @@#include <linux/hrtimer.h> #include <asm/bitops.h> -/* Override CONFIG_KVM_TRACE */ -#ifdef EXT_CONFIG_KVM_TRACE -# define CONFIG_KVM_TRACE 1 -#else -# undef CONFIG_KVM_TRACE -#endif -/* * 2.6.16 does not have GFP_NOWAIT */ x86/Kbuild +1
-1@@ -7,7 +7,7 @@ kvm-objs := kvm_main.o x86.o mmu.o x86_emulate.o ../anon_inodes.o irq.o i8259.o lapic.o ioapic.o preempt.o i8254.o coalesced_mmio.o irq_comm.o \ timer.o \ ../external-module-compat.o -ifeq ($(EXT_CONFIG_KVM_TRACE),y) +ifeq ($(CONFIG_KMOD_KVM_TRACE),y) kvm-objs += kvm_trace.o endif ifeq ($(CONFIG_IOMMU_API),y)x86/hack-module.awk +3
-3@@ -4,7 +4,7 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ "hrtimer_expires_remaining " \ "on_each_cpu relay_open request_irq" , compat_apis); } -/^int kvm_init\(/ { anon_inodes = 1 } +/^int kvm_init\([^)]*\)$/ { anon_inodes = 1 } /return 0;/ && anon_inodes { print "\tr = kvm_init_anon_inodes();";@@ -17,7 +17,7 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ anon_inodes = 0 } -/^void kvm_exit/ { anon_inodes_exit = 1 } +/^void kvm_exit[^)]*\)$/ { anon_inodes_exit = 1 } /\}/ && anon_inodes_exit { print "\tkvm_exit_anon_inodes();";@@ -25,7 +25,7 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ anon_inodes_exit = 0 } -/^int kvm_arch_init/ { kvm_arch_init = 1 } +/^int kvm_arch_init[^)])$/ { kvm_arch_init = 1 } /\<tsc_khz\>/ && kvm_arch_init { sub("\\<tsc_khz\\>", "kvm_tsc_khz") } /^}/ { kvm_arch_init = 0 }
x86/hack-module.awk BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ · line 92
Quoted 8 lines
x86/hack-module.awk +2
-0@@ -85,6 +85,8 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ /\kvm_.*_fops\.owner = module;/ { $0 = "IF_ANON_INODES_DOES_REFCOUNTS(" $0 ")" } +{ sub(/\<CONFIG_KVM_TRACE\>/, "CONFIG_KMOD_KVM_TRACE") } + { print } /unsigned long flags;/ && vmx_load_host_state {
Xiantao, do we need to change this for ia64?
Signature · 1 line
error compiling committee.c: too many arguments to function
Quoted 122 lines · Avi Kivity
Quoted 121 lines · Michael S. Tsirkin
CONFIG_KVM_TRACEin kernel conflicts with the definition in external module.external-module-compat-comm.htried to work around this, but this didn't work as some code still does #include <linux/autoconf.h> directly.Solve this differently by s/CONFIG_KVM_TRACE/CONFIG_KMOD_KVM_TRACE/ in awk. Had to tighten regular expressions in hack-module.awk so that they don't trigger on
kvm_host.h.Signed-off-by Michael S. Tsirkin <[email protected]>--- Makefile | 5 +++-- configure | 2 +- external-module-compat-comm.h | 7 ------- x86/Kbuild | 2 +- x86/hack-module.awk | 8 +++++--- 5 files changed, 10 insertions(+), 14 deletions(-)Makefile +0
-0@@ -34,8 +34,8 @@ hack-files-ia64 = kvm_main.c kvm_fw.c kvm_lib.c
kvm-ia64.chack-files = $(hack-files-$(ARCH_DIR))
Makefile +3
-2-ifeq ($(EXT_CONFIG_KVM_TRACE),y) -module_defines += -DEXT_CONFIG_KVM_TRACE=y +ifeq ($(CONFIG_KMOD_KVM_TRACE),y) +module_defines += -DCONFIG_KMOD_KVM_TRACE=1 endif all:: prerequisite@@ -72,6 +72,7 @@ header-sync: for i in $$(find $T -name '*.h'); do \ $(call unifdef,$$i); done $(call hack, include/linux/kvm.h) + $(call hack, include/linux/kvm_host.h) $(call hack, include/asm-$(ARCH_DIR)/kvm.h) set -e && for i in $$(find $T -type f -printf '%P '); \ do mkdir -p $$(dirname $$i); cmp -s $$i $T/$$i || cp $T/$$i $$i;done
configure +1
-1@@ -122,5 +122,5 @@ DEPMOD_VERSION=$depmod_version EOF cat <<EOF > config.kbuild -EXT_CONFIG_KVM_TRACE=$kvm_trace +CONFIG_KMOD_KVM_TRACE=$kvm_trace EOFexternal-module-compat-comm.h +0
-7@@ -18,13 +18,6 @@#include <linux/hrtimer.h> #include <asm/bitops.h> -/* Override CONFIG_KVM_TRACE */ -#ifdef EXT_CONFIG_KVM_TRACE -# define CONFIG_KVM_TRACE 1 -#else -# undef CONFIG_KVM_TRACE -#endif -/* * 2.6.16 does not have GFP_NOWAIT */ x86/Kbuild +1
-0@@ -7,7 +7,7 @@ kvm-objs := kvm_main.o x86.o mmu.o x86_emulate.o ../anon_inodes.o irq.o i8259.o lapic.o ioapic.o preempt.o i8254.o coalesced_mmio.o irq_comm.o \ timer.o \ ../external-module-compat.o -ifeq ($(EXT_CONFIG_KVM_TRACE),y) +ifeq ($(CONFIG_KMOD_KVM_TRACE),y) kvm-objs += kvm_trace.o endif ifeq ($(CONFIG_IOMMU_API),y)x86/hack-module.awk +3
-3@@ -4,7 +4,7 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ "hrtimer_expires_remaining " \ "on_each_cpu relay_open request_irq" , compat_apis); } -/^int kvm_init\(/ { anon_inodes = 1 } +/^int kvm_init\([^)]*\)$/ { anon_inodes = 1 } /return 0;/ && anon_inodes { print "\tr = kvm_init_anon_inodes();";@@ -17,7 +17,7 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ anon_inodes = 0 } -/^void kvm_exit/ { anon_inodes_exit = 1 } +/^void kvm_exit[^)]*\)$/ { anon_inodes_exit = 1 } /\}/ && anon_inodes_exit { print "\tkvm_exit_anon_inodes();";@@ -25,7 +25,7 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ anon_inodes_exit = 0 } -/^int kvm_arch_init/ { kvm_arch_init = 1 } +/^int kvm_arch_init[^)])$/ { kvm_arch_init = 1 } /\<tsc_khz\>/ && kvm_arch_init { sub("\\<tsc_khz\\>", "kvm_tsc_khz") } /^}/ { kvm_arch_init = 0 }@@ -85,6 +85,8 @@ BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ /\kvm_.*_fops\.owner = module;/ { $0 = "IF_ANON_INODES_DOES_REFCOUNTS(" $0 ")" }
Quoted 7 lines
x86/hack-module.awk BEGIN { split("INIT_WORK desc_struct ldttss_desc64 desc_ptr " \ · line 92
Quoted 5 lines
x86/hack-module.awk +1
-0+{ sub(/\<CONFIG_KVM_TRACE\>/, "CONFIG_KMOD_KVM_TRACE") } + { print } /unsigned long flags;/ && vmx_load_host_state {Xiantao, do we need to change this for ia64?
IA64 didn't support kvm trace, so doesn't need these changes , thanks! :) Xiantao
Avi Kivity
AppliedQuoted 10 lines · Michael S. Tsirkin
CONFIG_KVM_TRACEin kernel conflicts with the definition in external module.external-module-compat-comm.htried to work around this, but this didn't work as some code still does #include <linux/autoconf.h> directly.Solve this differently by s/CONFIG_KVM_TRACE/CONFIG_KMOD_KVM_TRACE/ in awk. Had to tighten regular expressions in hack-module.awk so that they don't trigger on
kvm_host.h.
Applied, thanks.
Signature · 1 line
Do not meddle in the internals of kernels, for they are subtle and quick to panic.