From: Joerg Roedel <joerg.roedel@amd.com>
To: Alexander Graf <agraf@suse.de>
Cc: "Michael S. Tsirkin" <mst@redhat.com>, kvm@vger.kernel.org
Subject: Re: [PATCH 2/6] MMU: don't bail on PAT bits in PTE
Date: Fri, 15 May 2009 15:19:43 +0200 [thread overview]
Message-ID: <20090515131943.GT9835@amd.com> (raw)
In-Reply-To: <44CC74E2-96C3-45C6-9412-A252A53C966A@suse.de>
On Fri, May 15, 2009 at 12:53:42PM +0200, Alexander Graf wrote:
>
> On 15.05.2009, at 12:25, Michael S. Tsirkin wrote:
>
>> On Fri, May 15, 2009 at 10:22:16AM +0200, Alexander Graf wrote:
>>> A 64bit PTE can have bit7 set to 1 which means "Use this bit for the
>>> PAT".
>>> Currently KVM's MMU code treats this bit as reserved, even though
>>> it's not.
>>>
>>> As long as we're not required to make use of the PAT bits which is
>>> only
>>> required for DMA/MMIO from my understanding, we can safely ignore it.
>>>
>>> Hyper-V uses this bit for kernel PTEs.
>>>
>>> Signed-off-by: Alexander Graf <agraf@suse.de>
>>> ---
>>> arch/x86/kvm/mmu.c | 2 +-
>>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
>>> index 8fcdae9..cce055a 100644
>>> --- a/arch/x86/kvm/mmu.c
>>> +++ b/arch/x86/kvm/mmu.c
>>> @@ -2169,7 +2169,7 @@ static void reset_rsvds_bits_mask(struct
>>> kvm_vcpu *vcpu, int level)
>>> context->rsvd_bits_mask[1][1] = exb_bit_rsvd |
>>> rsvd_bits(maxphyaddr, 51) |
>>> rsvd_bits(13, 20); /* large page */
>>> - context->rsvd_bits_mask[1][0] = ~0ull;
>>> + context->rsvd_bits_mask[1][0] = 0ull;
>>> break;
>>> }
>>> }
>>
>> Just to make sure I understand what this does: if guest sets bit7,
>> will
>> bit7 get set in shadow PTEs as well?
>
> I don't see any code that interprets bit7, so the shadow PTE should be
> completely unaffected.
>
> But to be sure I asked Jörg to take a look at it as well, as he's more
> familiar with the x86 SPT code than I am :-).
The PAT bit is not propagated into the shadow page tables. Anyway, the
problem is fixed the wrong way in this patch. The real problem is that a
4kb pte is checked with mask considered for large pages (which do not
exist on walker level 0). The attached patch fixes it the better way
imho.
From 7530aef3ed580b70a74224f8c04857754501c496 Mon Sep 17 00:00:00 2001
From: Joerg Roedel <joerg.roedel@amd.com>
Date: Fri, 15 May 2009 15:14:19 +0200
Subject: [PATCH] kvm/mmu: fix reserved bit checking on 4kb pte level
The reserved bits checking code looks at bit 7 of the pte to determine
if it has to use the mask for a large pte or a normal pde. This does not
work on 4kb pte level because bit 7 is used there for PAT. Account this
in the checking function.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
---
arch/x86/kvm/mmu.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 479e748..8d9552e 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -2124,9 +2124,11 @@ static void paging_free(struct kvm_vcpu *vcpu)
static bool is_rsvd_bits_set(struct kvm_vcpu *vcpu, u64 gpte, int level)
{
- int bit7;
+ int bit7 = 0;
+
+ if (level != PT_PAGE_TABLE_LEVEL)
+ bit7 = (gpte >> 7) & 1;
- bit7 = (gpte >> 7) & 1;
return (gpte & vcpu->arch.mmu.rsvd_bits_mask[bit7][level-1]) != 0;
}
--
1.6.2.4
--
| Advanced Micro Devices GmbH
Operating | Karl-Hammerschmidt-Str. 34, 85609 Dornach bei München
System |
Research | Geschäftsführer: Thomas M. McCoy, Giuliano Meroni
Center | Sitz: Dornach, Gemeinde Aschheim, Landkreis München
| Registergericht München, HRB Nr. 43632
next prev parent reply other threads:[~2009-05-15 13:19 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-15 8:22 [PATCH 0/6] Add rudimentary Hyper-V guest support Alexander Graf
2009-05-15 8:22 ` [PATCH 1/6] Add definition for IGNNE MSR Alexander Graf
2009-05-15 8:22 ` [PATCH 2/6] MMU: don't bail on PAT bits in PTE Alexander Graf
2009-05-15 8:22 ` [PATCH 3/6] Emulator: Inject #PF when page was not found Alexander Graf
2009-05-15 8:22 ` [PATCH 4/6] Implement Hyper-V MSRs Alexander Graf
2009-05-15 8:22 ` [PATCH 5/6] Nested SVM: Implement INVLPGA Alexander Graf
2009-05-15 8:22 ` [PATCH 6/6] Nested SVM: Improve interrupt injection Alexander Graf
2009-05-17 6:48 ` Gleb Natapov
2009-05-17 8:10 ` Alexander Graf
2009-05-18 11:47 ` Alexander Graf
2009-05-15 13:43 ` [PATCH 5/6] Nested SVM: Implement INVLPGA Joerg Roedel
2009-05-17 20:02 ` Avi Kivity
2009-05-17 20:03 ` Avi Kivity
2009-05-18 18:46 ` Marcelo Tosatti
2009-05-18 13:00 ` Alexander Graf
2009-05-17 9:54 ` [PATCH 4/6] Implement Hyper-V MSRs Avi Kivity
2009-05-17 19:57 ` Alexander Graf
2009-05-17 20:00 ` Avi Kivity
2009-05-17 20:27 ` Alexander Graf
2009-05-17 20:37 ` Alexander Graf
2009-05-15 13:40 ` [PATCH 3/6] Emulator: Inject #PF when page was not found Joerg Roedel
2009-05-17 19:59 ` Avi Kivity
2009-05-17 20:25 ` Alexander Graf
2009-05-17 20:58 ` Avi Kivity
2009-05-18 12:55 ` Alexander Graf
2009-05-15 10:25 ` [PATCH 2/6] MMU: don't bail on PAT bits in PTE Michael S. Tsirkin
2009-05-15 10:53 ` Alexander Graf
2009-05-15 13:19 ` Joerg Roedel [this message]
2009-05-17 9:51 ` Avi Kivity
2009-05-15 10:47 ` [PATCH 0/6] Add rudimentary Hyper-V guest support Alexander Graf
2009-05-17 21:08 ` Avi Kivity
2009-05-18 12:45 ` Alexander Graf
2009-05-18 13:29 ` Avi Kivity
2009-05-18 13:35 ` Alexander Graf
2009-05-18 13:44 ` Avi Kivity
2009-05-18 15:15 ` Alexander Graf
2009-05-18 15:20 ` Avi Kivity
2009-05-18 15:24 ` Alexander Graf
2009-05-18 15:28 ` Avi Kivity
2009-05-18 15:32 ` Alexander Graf
2009-05-18 15:35 ` Avi Kivity
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=20090515131943.GT9835@amd.com \
--to=joerg.roedel@amd.com \
--cc=agraf@suse.de \
--cc=kvm@vger.kernel.org \
--cc=mst@redhat.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