Re: Question regarding nested_svm_inject_npf_exit()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> On Jul 4, 2020, at 11:38 PM, Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote:
> 
> On 04/07/20 02:00, Nadav Amit wrote:
>> Hello Paolo,
>> 
>> I encountered an issue while running some svm tests. Apparently, the tests
>> “npt_rw_pfwalk” and “npt_rsv_pfwalk” expect the present bit to be clear.
>> 
>> KVM indeed clears this bit in nested_svm_inject_npf_exit():
>> 
>>       /*
>>        * The present bit is always zero for page structure faults on real
>>        * hardware.
>>        */
>>       if (svm->vmcb->control.exit_info_1 & (2ULL << 32))
>>               svm->vmcb->control.exit_info_1 &= ~1;
>> 
>> 
>> I could not find documentation of this behavior. Unfortunately, I do not
>> have a bare-metal AMD machine to test the behavior (and some enabling of
>> kvm-unit-tests/svm is required, e.g. this test does not run with more than
>> 4GB of memory).
>> 
>> Are you sure that this is the way AMD machines behave?
> 
> No, I'm not.  The code was added when NPF was changed to synthesize
> EXITINFO1, instead of simply propagating L0's EXITINFO1 into L1 (see
> commit 5e3525195196, "KVM: nSVM: propagate the NPF EXITINFO to the
> guest", 2014-09-03).  With six more years of understanding of KVM, the
> lack of a present bit might well have been a consequence of how the MMU
> works.

Thanks. I ran ‘git blame’ before asking you, and that is the reason I
assumed you would know best... ;-)

> One of these days I'd like to run the SVM tests under QEMU without KVM.
> It would probably find bugs in both.

Well, I think we can agree that bare-metal is a better reference than
another emulator for the matter. Even without running the tests on
bare-metal, it is easy to dump EXITINFO1 on the nested page-fault. I will
try to find a bare-metal machine.

Anyhow, I would appreciate if anyone from AMD would tell whether any result
should be considered architectural.





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux