From: Tom Lendacky <thomas.lendacky@amd.com>
To: Paolo Bonzini <pbonzini@redhat.com>,
Mohammed Gamal <mgamal@redhat.com>,
kvm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, vkuznets@redhat.com,
sean.j.christopherson@intel.com, wanpengli@tencent.com,
jmattson@google.com, joro@8bytes.org, babu.moger@amd.com
Subject: Re: [PATCH v2 00/11] KVM: Support guest MAXPHYADDR < host MAXPHYADDR
Date: Mon, 22 Jun 2020 12:57:16 -0500 [thread overview]
Message-ID: <c89bda4a-2db9-6cb1-8b01-0a6e69694f43@amd.com> (raw)
In-Reply-To: <40ac43a1-468f-24d5-fdbf-d012bdae49ed@redhat.com>
On 6/22/20 12:03 PM, Paolo Bonzini wrote:
> On 22/06/20 18:33, Tom Lendacky wrote:
>> I'm not a big fan of trapping #PF for this. Can't this have a performance
>> impact on the guest? If I'm not mistaken, Qemu will default to TCG
>> physical address size (40-bits), unless told otherwise, causing #PF to now
>> be trapped. Maybe libvirt defaults to matching host/guest CPU MAXPHYADDR?
>
> Yes, this is true. We should change it similar to how we handle TSC
> frequency (and having support for guest MAXPHYADDR < host MAXPHYADDR is
> a prerequisite).
>
>> In bare-metal, there's no guarantee a CPU will report all the faults in a
>> single PF error code. And because of race conditions, software can never
>> rely on that behavior. Whenever the OS thinks it has cured an error, it
>> must always be able to handle another #PF for the same access when it
>> retries because another processor could have modified the PTE in the
>> meantime.
>
> I agree, but I don't understand the relation to this patch. Can you
> explain?
I guess I'm trying to understand why RSVD has to be reported to the guest
on a #PF (vs an NPF) when there's no guarantee that it can receive that
error code today even when guest MAXPHYADDR == host MAXPHYADDR. That would
eliminate the need to trap #PF.
Thanks,
Tom
>
>> What's the purpose of reporting RSVD in the error code in the
>> guest in regards to live migration?
>>
>>> - if the page is accessible to the guest according to the permissions in
>>> the page table, it will cause a #NPF. Again, we need to trap it, check
>>> the guest physical address and inject a P|RSVD #PF if the guest physical
>>> address has any guest-reserved bits.
>>>
>>> The AMD specific issue happens in the second case. By the time the NPF
>>> vmexit occurs, the accessed and/or dirty bits have been set and this
>>> should not have happened before the RSVD page fault that we want to
>>> inject. On Intel processors, instead, EPT violations trigger before
>>> accessed and dirty bits are set. I cannot find an explicit mention of
>>> the intended behavior in either the
>>> Intel SDM or the AMD APM.
>>
>> Section 15.25.6 of the AMD APM volume 2 talks about page faults (nested vs
>> guest) and fault ordering. It does talk about setting guest A/D bits
>> during the walk, before an #NPF is taken. I don't see any way around that
>> given a virtual MAXPHYADDR in the guest being less than the host MAXPHYADDR.
>
> Right you are... Then this behavior cannot be implemented on AMD.
>
> Paolo
>
next prev parent reply other threads:[~2020-06-22 17:57 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-19 15:39 Mohammed Gamal
2020-06-19 15:39 ` [PATCH v2 01/11] KVM: x86: Add helper functions for illegal GPA checking and page fault injection Mohammed Gamal
2020-06-22 4:44 ` Yuan Yao
2020-06-22 12:21 ` Mohammed Gamal
2020-06-19 15:39 ` [PATCH v2 02/11] KVM: x86: mmu: Move translate_gpa() to mmu.c Mohammed Gamal
2020-06-19 15:39 ` [PATCH v2 03/11] KVM: x86: mmu: Add guest physical address check in translate_gpa() Mohammed Gamal
2020-06-19 15:39 ` [PATCH v2 04/11] KVM: x86: rename update_bp_intercept to update_exception_bitmap Mohammed Gamal
2020-06-19 15:39 ` [PATCH v2 05/11] KVM: x86: update exception bitmap on CPUID changes Mohammed Gamal
2020-06-19 15:39 ` [PATCH v2 06/11] KVM: VMX: introduce vmx_need_pf_intercept Mohammed Gamal
2020-06-19 22:45 ` Jim Mattson
2020-06-22 13:57 ` Paolo Bonzini
2020-06-19 15:39 ` [PATCH v2 07/11] KVM: VMX: Add guest physical address check in EPT violation and misconfig Mohammed Gamal
2020-06-19 15:39 ` [PATCH v2 08/11] KVM: VMX: optimize #PF injection when MAXPHYADDR does not match Mohammed Gamal
2020-06-19 15:39 ` [PATCH v2 09/11] KVM: SVM: introduce svm_need_pf_intercept Mohammed Gamal
2020-06-19 15:39 ` [PATCH v2 10/11] KVM: SVM: Add guest physical address check in NPF/PF interception Mohammed Gamal
2020-06-19 15:39 ` [PATCH v2 11/11] KVM: x86: SVM: VMX: Make GUEST_MAXPHYADDR < HOST_MAXPHYADDR support configurable Mohammed Gamal
2020-06-19 15:43 ` [PATCH v2 00/11] KVM: Support guest MAXPHYADDR < host MAXPHYADDR Paolo Bonzini
2020-06-19 21:52 ` Tom Lendacky
2020-06-19 23:07 ` Paolo Bonzini
2020-06-22 16:33 ` Tom Lendacky
2020-06-22 17:03 ` Paolo Bonzini
2020-06-22 17:57 ` Tom Lendacky [this message]
2020-06-22 18:01 ` Paolo Bonzini
2020-06-22 19:14 ` Tom Lendacky
2020-06-22 22:20 ` Paolo Bonzini
2020-06-22 23:47 ` Andy Lutomirski
2020-06-23 0:52 ` Paolo Bonzini
2020-06-22 15:08 ` Mohammed Gamal
2020-06-22 15:23 ` Paolo Bonzini
2020-06-22 16:35 ` Tom Lendacky
2020-06-22 4:32 ` Yuan Yao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c89bda4a-2db9-6cb1-8b01-0a6e69694f43@amd.com \
--to=thomas.lendacky@amd.com \
--cc=babu.moger@amd.com \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mgamal@redhat.com \
--cc=pbonzini@redhat.com \
--cc=sean.j.christopherson@intel.com \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®