Bug 58941

Summary: [nested virt] L2 has NMI error when creating L1 with "-cpu host" parameter.
Product: Virtualization Reporter: Jay Ren (yongjie.ren)
Component: kvmAssignee: virtualization_kvm
Status: CLOSED CODE_FIX    
Severity: normal CC: alan, chao.zhou, dustymabe
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 3.10.0-rc1 Subsystem:
Regression: Yes Bisected commit-id:

Description Jay Ren 2013-05-29 03:22:48 UTC
Environment:
------------
Host OS (ia32/ia32e/IA64):ia32e
Guest OS (ia32/ia32e/IA64):ia32e
Guest OS Type (Linux/Windows):Linux
kvm.git next Commit:e47a5f5fb715b90b40747e9e235de557c6abd56c
qemu-kvm Commit:b5803aa3583e82e5133f7621121bc15ee694f4a1
Host Kernel Version:3.10.0-rc1
Hardware: SandyBridge-EP, Haswell


Bug detailed description:
--------------------------
When starting L1 guest with parameter "-cpu host" (or '-cpu SandyBridge,+vmx', '-cpu Haswell,+vmx'), the L2 guest will print error like "NMI
received for unknown reason 00 on CPU 1."

note:
When starting L1 guest with parameter "-cpu qemu64,+vmx", L2 guest won't print
NMI error.

Reproduce steps:
----------------
1. create L1 guest:
qemu-system-x86_64 --enable-kvm -m 10240 -smp 8 -net nic,macaddr=00:12:45:67:2B:1C -net tap,script=/etc/kvm/qemu-ifup
nested-kvm-rhel6u4.qcow -cpu host
2. create L2 guest
qemu-system-x86_64 --enable-kvm -m 1024 -smp 2 -net none rhel6u4.img


Current result:
----------------
L2 guest continuously print NMI message

Expected result:
----------------
L2 guest has no NMI message print; L2 works fine

Basic root-causing log:
----------------------
[ in L2's 'dmesg']
Uhhuh. NMI received for unknown reason 30 on CPU 0.
Do you have a strange power saving mode enabled?
Dazed and confused, but trying to continue
Comment 1 Jay Ren 2013-05-29 06:14:54 UTC
kvm next + qemu-kvm   = result
188424ba + b5803aa3   = good
db6ae615 + b5803aa3   = bad

This bug may have some relationship with bug #58921.
Comment 2 Zhou, Chao 2013-11-07 06:30:41 UTC
this commit fix the bug:
commit cd2633c59b6f511effb53e10fa2c1e20b1cec1e7
Author: Jan Kiszka <jan.kiszka@siemens.com>
Date:   Wed Oct 23 17:42:15 2013 +0100

    nVMX: Fix pick-up of uninjected NMIs

    __vmx_complete_interrupts stored uninjected NMIs in arch.nmi_injected,
    not arch.nmi_pending. So we actually need to check the former field in
    vmcs12_save_pending_event. This fixes the eventinj unit test when run
    in nested KVM.

    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>