diff mbox

[2/6] MMU: don't bail on PAT bits in PTE

Message ID 1242375740-31222-3-git-send-email-agraf@suse.de (mailing list archive)
State New, archived
Headers show

Commit Message

Alexander Graf May 15, 2009, 8:22 a.m. UTC
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(-)

Comments

Michael S. Tsirkin May 15, 2009, 10:25 a.m. UTC | #1
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?
Alexander Graf May 15, 2009, 10:53 a.m. UTC | #2
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 :-).

Alex

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

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;
 	}
 }