From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: unhandled vm exit: 0x80000021 vcpu_id 0 Date: Sun, 31 May 2009 13:07:53 +0300 Message-ID: <4A2256F9.9000804@redhat.com> References: <4A1FB075.1050202@eecs.umich.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, nathan binkert , Steve Reinhardt To: Gabe Black Return-path: Received: from mx2.redhat.com ([66.187.237.31]:38754 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756543AbZEaKNU (ORCPT ); Sun, 31 May 2009 06:13:20 -0400 In-Reply-To: <4A1FB075.1050202@eecs.umich.edu> Sender: kvm-owner@vger.kernel.org List-ID: Gabe Black wrote: > Hello again. I'm making more progress getting KVM going in M5, and > right now I'm trying to figure out why I'm getting an unhandled vm > exit with exit code 0x80000021. According to Intel's manual, something > about the guest state isn't being set up correctly. I dumped the > initial register state for the 0th virtual CPU and noticed that some > things Intel claims are illegal show up there, for instance having > paging and protected mode disabled. I'm assuming there's some cooking > done to the state as presented to KVM to, for instance, substitute > V8086 mode for real mode, etc. I've fixed a number of bugs in M5 that > cleaned up some issues, but I'm hoping somebody with more knowledge > can tell me what illegal state is still there that would make it > through the kvms twiddling and cause VMX to abort. One thing that I > know looks funny is that the limit on the IDT is zero, but I haven't > been able to find any evidence in the manuals that that's considered > wrong rather than just a bad idea. Any help here would be very > appreciated! > idt.limit = 0 should be fine. > > cs 0008 (00000000/ffffffff p 1 dpl 0 db 0 s 1 type a l 1 g 1 avl 0) > ds 0010 (00000000/ffffffff p 1 dpl 0 db 1 s 1 type 2 l 0 g 1 avl 0) > es 0010 (00000000/ffffffff p 1 dpl 0 db 1 s 1 type 2 l 0 g 1 avl 0) > ss 0010 (00000000/ffffffff p 1 dpl 0 db 1 s 1 type 2 l 0 g 1 avl 0) > fs 0010 (00000000/ffffffff p 1 dpl 0 db 1 s 1 type 2 l 0 g 1 avl 0) > gs 0010 (00000000/ffffffff p 1 dpl 0 db 1 s 1 type 2 l 0 g 1 avl 0) Try setting bit 1 (accessed) on the types here. > tr 0018 (00000000/ffffffff p 1 dpl 0 db 1 s 0 type b l 0 g 1 avl 0) > ldt 0000 (00000000/00000000 p 0 dpl 0 db 0 s 0 type 0 l 0 g 0 avl 0) > gdt 76000/17 > idt 0/0 > cr0 80000011 cr2 0 cr3 70000 cr4 20 cr8 0 efer 500 kvm-kmod.git contains a vmx-debug.c which does the same checks as the cpu. If you link it in and call vm_entry_test() just before guest entry, it will point out where the state is bad. -- error compiling committee.c: too many arguments to function