Re: guest reboot hanging - kvm: unhandled wrmsr: 0xc0000083

Avi Kivity
2007-07-31T16:15:20Z

[-- Attachment #1: Type: text/plain, Size: 560 bytes --]

tadomeit wrote:
> Hi,
>
> I've installed the latest version kvm-33 on my PC. All guests (tested
> with several knoppix version and SuSE 10.1 install dvd image) hanging on
> reboot. In the host syslog I found a lot of messages (>1000): "kernel:
> kvm: unhandled wrmsr: 0xc0000083"
>
> I've tested with the original kernel kvm modules and with the modules
> delivered with kvm-33, I tried the version kvm-32 - no success - every
> time the same behaviour!
>
>
Can you try the attached patch?

--
error compiling committee.c: too many arguments to function

[-- Attachment #2: i386-no-long-mode.patch --]
[-- Type: text/x-patch, Size: 1060 bytes --]

commit d9ff68d1414c64477a06bb9d35633f7c45d4942a
Author: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
Date: Mon Jul 30 12:48:15 2007 +0300

kvm: qemu: disable long mode on 32-bit kernels

diff --git a/qemu/qemu-kvm.c b/qemu/qemu-kvm.c
index a19219c..4ba93d8 100644
--- a/qemu/qemu-kvm.c
+++ b/qemu/qemu-kvm.c
@@ -18,6 +18,7 @@ int kvm_allowed = KVM_ALLOWED_DEFAULT;
#include "qemu-kvm.h"
#include <kvmctl.h>
#include <pthread.h>
+#include <sys/utsname.h>

#define MSR_IA32_TSC 0x10

@@ -999,11 +1000,15 @@ static void do_cpuid_ent(struct kvm_cpuid_entry *e, uint32_t function,
e->edx = env->regs[R_EDX];
if (function == 0x80000001) {
uint32_t h_eax, h_edx;
+ struct utsname utsname;
+ int lm_capable_kernel;

host_cpuid(function, &h_eax, NULL, NULL, &h_edx);
+ uname(&utsname);
+ lm_capable_kernel = strcmp(utsname.machine, "x86_64") == 0;

// long mode
- if ((h_edx & 0x20000000) == 0)
+ if ((h_edx & 0x20000000) == 0 || !lm_capable_kernel)
e->edx &= ~0x20000000u;
// syscall
if ((h_edx & 0x00000800) == 0)