Re: [RFC PATCH 2/4] mmu: Update ept specific valid bit values

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

 




On 21/06/2016 05:12, Bandan Das wrote:
>  
>  static int is_shadow_present_pte(u64 pte)
>  {
> -	return pte & PT_PRESENT_MASK && !is_mmio_spte(pte);
> +	int xbit = shadow_xonly_valid ? pte & shadow_x_mask : 0;
> +
> +	return (pte & PT_PRESENT_MASK) | xbit
> +		&& !is_mmio_spte(pte);
>  }

You can change this to just:

	return
	    (pte & (PT_PRESENT_MASK | shadow_x_mask)) &&
	    !is_mmio_spte(pte);

because you know this is only called on a valid spte.  Reserved bits are
checked elsewhere (and shouldn't be there anyway!).

>  static int is_large_pte(u64 pte)
> diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
> index bc019f7..9f5bd06 100644
> --- a/arch/x86/kvm/paging_tmpl.h
> +++ b/arch/x86/kvm/paging_tmpl.h
> @@ -133,7 +133,12 @@ static inline int FNAME(is_present_gpte)(unsigned long pte)
>  #if PTTYPE != PTTYPE_EPT
>  	return is_present_gpte(pte);
>  #else
> -	return pte & 7;
> +	/*
> +	 * For EPT, bits [2:0] can be 001, 100 or 111
> +	 * Further, for 100, logical processor should support
> +	 * execute-only.
> +	 */
> +	return (pte & 1) || (shadow_xonly_valid && (pte & 4));
>  #endif

Likewise, is_present_gpte is always followed by an is_rsvd_bits_set
check, which does check for execute-only.  Modify
reset_tdp_shadow_zero_bits_mask to pass the right execonly value to
__reset_rsvds_bits_mask_ept, and you can leave is_present_gpte as is.

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



[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