All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Tom Lendacky <thomas.lendacky@amd.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: Tue, 23 Jun 2020 00:20:28 +0200	[thread overview]
Message-ID: <b0f3c36d-a6a5-f10d-443a-3270047d7bec@redhat.com> (raw)
In-Reply-To: <77388079-6e1b-5788-4912-86ad4c28ee70@amd.com>

On 22/06/20 21:14, Tom Lendacky wrote:
>>> 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.
>>
>> That's an interesting observation!  But do processors exist where either:
>>
>> 1) RSVD doesn't win over all other bits, assuming no race conditions
> 
> There may not be any today, but, present bit aside (which is always
> checked), there is no architectural statement that says every error
> condition has to be checked and reported in a #PF error code. So software
> can't rely on RSVD being present when there are other errors present.
> That's why I'm saying I don't think trapping #PF just to check and report
> RSVD should be done.

Fair enough---if I could get rid of the #PF case I would only be happy.
 But I'm worried about guests being upset if they see non-RSVD page
faults for a page table entry that has one or more reserved bits set.

>> 2) A/D bits can be clobbered in a page table entry that has reserved
>> bits set?
> 
> There is nothing we can do about this one. The APM documents this when
> using nested page tables.

Understood.

> If the guest is using the same MAXPHYADDR as the
> host, then I'm pretty sure this doesn't happen, correct? So it's only when
> the guest is using something less than the host MAXPHYADDR that this occurs.
> I'm not arguing against injecting a #PF with the RSVD on an NPF where it's
> detected that bits are set above the guest MAXPHYADDR, just the #PF trapping.

Got it.  My question is: is there an architectural guarantee that the
dirty bit is not set if the instruction raises a page fault?  (And what
about the accessed bit?).

If so, the NPF behavior makes it impossible to emulate lower MAXPHYADDR
values from the NPF vmexit handler.  It would be incorrect to inject a
#PF with the RSVD error code from the NPF handler, because the guest
would not expect the dirty bits to be set in the page table entry.

Even if there's no such guarantee, I would be reluctant to break it
because software could well be expecting it.

Paolo

> Thanks,
> Tom
> 
>>
>> Running the x86/access.flat testcase from kvm-unit-tests on bare metal
>> suggests that all existing processors do neither of the above.
>>
>> In particular, the second would be a showstopper on AMD.
>>
>> Paolo
>>
> 


  reply	other threads:[~2020-06-22 22:20 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-19 15:39 [PATCH v2 00/11] KVM: Support guest MAXPHYADDR < host MAXPHYADDR 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
2020-06-22 18:01           ` Paolo Bonzini
2020-06-22 19:14             ` Tom Lendacky
2020-06-22 22:20               ` Paolo Bonzini [this message]
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=b0f3c36d-a6a5-f10d-443a-3270047d7bec@redhat.com \
    --to=pbonzini@redhat.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=sean.j.christopherson@intel.com \
    --cc=thomas.lendacky@amd.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.