Skip to contentSkip to conversation

kvm-kmod: fix build on kernels with kvm trace set

PATCH Applied Michael S. Tsirkin 3 participants 4 messages Apr 28, 2009 – May 4, 2009

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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
index f2ef811..9cdc0af 100644
@@ -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
index 30af6e7..6e12bb1 100755
@@ -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
index c955927..e561448 100644
@@ -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
index d3aca00..fbdb28b 100644
@@ -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
index 260eeef..f3d95be 100644
@@ -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
#1 lore raw
Quoted 117 lines · Michael S. Tsirkin

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
index f2ef811..9cdc0af 100644
@@ -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
index 30af6e7..6e12bb1 100755
@@ -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
index c955927..e561448 100644
@@ -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
index d3aca00..fbdb28b 100644
@@ -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
index 260eeef..f3d95be 100644
@@ -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
#2 lore raw
Quoted 122 lines · Avi Kivity
Quoted 121 lines · Michael S. Tsirkin

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 +0 -0
index f2ef811..9cdc0af 100644
@@ -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))

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
index 30af6e7..6e12bb1 100755
@@ -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
index c955927..e561448 100644
@@ -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
index d3aca00..fbdb28b 100644
@@ -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
index 260eeef..f3d95be 100644
@@ -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

Applied
#3 lore raw
In reply to Michael S. Tsirkin
Quoted 10 lines · Michael S. Tsirkin

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 .

Applied, thanks.

Signature · 1 line
Do not meddle in the internals of kernels, for they are subtle and quick to panic.