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

Re: [Xen-devel] [PATCH RFC 08/14] xen: vmx: Added setup spp page structure.



On Thu, Oct 19, 2017 at 2:12 AM, Zhang Yi <yi.z.zhang@xxxxxxxxxxxxxxx> wrote:
> From: Zhang Yi Z <yi.z.zhang@xxxxxxxxxxxxxxx>
>
> The hardware uses the guest-physical address and bits 11:7 of the
> address accessed to lookup the SPPT to fetch a write permission bit for
> the 128 byte wide sub-page region being accessed within the 4K
> guest-physical page. If the sub-page region write permission bit is set,
> the write is allowed; otherwise the write is disallowed and results in
> an EPT violation.
>
> Guest-physical pages mapped via leaf EPT-paging-structures for which the
> accumulated write-access bit and the SPP bits are both clear (0)
> generate
> EPT violations on memory writes accesses. Guest-physical pages mapped
> via EPT-paging-structure for which the accumulated write-access bit is
> set (1) allow writes, effectively ignoring the SPP bit on the leaf
> EPT-paging structure.
>
> Software will setup the spp page table level4,3,2 as well as EPT page
> structure, and fill the level1 via the 32 bit bitmap per a single 4K
> page.
> Now it could be divided to 32 x 128 sub-pages.
>
> Signed-off-by: Zhang Yi Z <yi.z.zhang@xxxxxxxxxxxxxxx>
> ---
>  xen/arch/x86/mm/mem_access.c      | 35 +++++++++++++++
>  xen/arch/x86/mm/p2m-ept.c         | 94 
> +++++++++++++++++++++++++++++++++++++++
>  xen/include/asm-x86/hvm/vmx/vmx.h | 10 +++++
>  xen/include/asm-x86/p2m.h         |  3 ++
>  4 files changed, 142 insertions(+)
>
> diff --git a/xen/arch/x86/mm/mem_access.c b/xen/arch/x86/mm/mem_access.c
> index a471c74..1b97469 100644
> --- a/xen/arch/x86/mm/mem_access.c
> +++ b/xen/arch/x86/mm/mem_access.c
> @@ -490,6 +490,41 @@ unlock_exit:
>      return rc;
>  }
>
> +static u64 format_spp_spte(u32 spp_wp_bitmap)
> +{
> +       u64 new_spte = 0;
> +       int i = 0;
> +
> +       /*
> +        * One 4K page contains 32 sub-pages, in SPP table L4E, old bits
> +        * are reserved, so we need to transfer u32 subpage write
> +        * protect bitmap to u64 SPP L4E format.
> +        */
> +       while ( i < 32 ) {
> +               if ( spp_wp_bitmap & (1ULL << i) )
> +                       new_spte |= 1ULL << (i * 2);
> +
> +               i++;
> +       }
> +
> +       return new_spte;
> +}
> +
> +int p2m_set_spp_page_st(struct domain *d, gfn_t gfn, uint32_t access_map)

So nothing in this patch makes use of this function. Could you please
re-organize the patchset so this is included with the patch that
starts using it?

> +{
> +    struct p2m_domain *p2m = p2m_get_hostp2m(d);
> +    u64 access = format_spp_spte(access_map);
> +    unsigned long gfn_l = gfn_x(gfn);
> +    int ret = -1;
> +
> +    p2m_lock(p2m);
> +    if ( p2m->spp_set_entry )
> +        ret = p2m->spp_set_entry(p2m, gfn_l, access);
> +    p2m_unlock(p2m);
> +
> +    return ret;
> +}
> +
>  /*
>   * Local variables:
>   * mode: C

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.