[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH MM-PART3 v2 07/12] xen/arm: mm: Rework xen_pt_update_entry to avoid use xenmap_operation
On Tue, 14 May 2019, Julien Grall wrote: > With the newly introduced flags, it is now possible to know how the page > will be updated through the flags. > > All the use of xenmap_operation are now replaced with the flags. At the > same time, validity check are now removed as they are gathered in > xen_pt_check_entry(). > > Signed-off-by: Julien Grall <julien.grall@xxxxxxx> > Reviewed-by: Andrii Anisov <andrii_anisov@xxxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > --- > > Changes in v2: > - Fix typo in the commit message > - Add Andrii's reviewed-by > --- > xen/arch/arm/mm.c | 47 +++++++++++++++++++++++------------------------ > 1 file changed, 23 insertions(+), 24 deletions(-) > > diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c > index 45a6f9287f..86e1faeeb5 100644 > --- a/xen/arch/arm/mm.c > +++ b/xen/arch/arm/mm.c > @@ -1067,34 +1067,33 @@ static int xen_pt_update_entry(enum xenmap_operation > op, unsigned long addr, > if ( !xen_pt_check_entry(*entry, mfn, flags) ) > return -EINVAL; > > - switch ( op ) { > - case INSERT: > - case RESERVE: > - if ( op == RESERVE ) > - break; > + /* If we are only populating page-table, then we are done. */ > + if ( flags & _PAGE_POPULATE ) > + return 0; > + > + /* We are removing the page */ > + if ( !(flags & _PAGE_PRESENT) ) > + memset(&pte, 0x00, sizeof(pte)); > + else > + { > + /* We are inserting a mapping => Create new pte. */ > + if ( !mfn_eq(mfn, INVALID_MFN) ) > + { > pte = mfn_to_xen_entry(mfn, PAGE_AI_MASK(flags)); > - pte.pt.ro = PAGE_RO_MASK(flags); > - pte.pt.xn = PAGE_XN_MASK(flags); > - BUG_ON(!pte.pt.ro && !pte.pt.xn); > + > + /* Third level entries set pte.pt.table = 1 */ > pte.pt.table = 1; > - write_pte(entry, pte); > - break; > - case MODIFY: > - case REMOVE: > - if ( op == REMOVE ) > - pte.bits = 0; > - else > - { > - pte = *entry; > - pte.pt.ro = PAGE_RO_MASK(flags); > - pte.pt.xn = PAGE_XN_MASK(flags); > - } > - write_pte(entry, pte); > - break; > - default: > - BUG(); > + } > + else /* We are updating the permission => Copy the current pte. */ > + pte = *entry; > + > + /* Set permission */ > + pte.pt.ro = PAGE_RO_MASK(flags); > + pte.pt.xn = PAGE_XN_MASK(flags); > } > > + write_pte(entry, pte); > + > return 0; > } > > -- > 2.11.0 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |