[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |