KVM: pvmmu breakage with gcc 4.3.0

Marcelo Tosatti
2008-06-26T02:11:24Z

Some pvmmu functions store their commands on stack, and newer GCC
versions conclude that these commands are unused.

So stick an inline asm statement to convince the compiler otherwise.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>

diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index 8b7a3cf..c892752 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -55,6 +55,12 @@ static void kvm_mmu_op(void *buffer, unsigned len)
int r;
unsigned long a1, a2;

+ /*
+ * GCC 4.3.0 concludes that on-stack kvm_mmu_op* is unused and
+ * optimizes its initialization away.
+ */
+ asm ("" : : "p" (buffer));
+
do {
a1 = __pa(buffer);
a2 = 0; /* on i386 __pa() always returns <4G */