[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH V3 (resend) 03/19] x86/pv: Rewrite how building PV dom0 handles domheap mappings
On Mon, May 13, 2024 at 01:40:30PM +0000, Elias El Yandouzi wrote: > From: Hongyan Xia <hongyxia@xxxxxxxxxx> > > Building a PV dom0 is allocating from the domheap but uses it like the > xenheap. Use the pages as they should be. > > Signed-off-by: Hongyan Xia <hongyxia@xxxxxxxxxx> > Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx> > Signed-off-by: Elias El Yandouzi <eliasely@xxxxxxxxxx> > > ---- > Changes in V3: > * Fold following patch 'x86/pv: Map L4 page table for shim domain' > > Changes in V2: > * Clarify the commit message > * Break the patch in two parts > > Changes since Hongyan's version: > * Rebase > * Remove spurious newline > > diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c > index 807296c280..ac910b438a 100644 > --- a/xen/arch/x86/pv/dom0_build.c > +++ b/xen/arch/x86/pv/dom0_build.c > @@ -382,6 +382,10 @@ int __init dom0_construct_pv(struct domain *d, > l3_pgentry_t *l3tab = NULL, *l3start = NULL; > l2_pgentry_t *l2tab = NULL, *l2start = NULL; > l1_pgentry_t *l1tab = NULL, *l1start = NULL; > + mfn_t l4start_mfn = INVALID_MFN; > + mfn_t l3start_mfn = INVALID_MFN; > + mfn_t l2start_mfn = INVALID_MFN; > + mfn_t l1start_mfn = INVALID_MFN; > > /* > * This fully describes the memory layout of the initial domain. All > @@ -710,22 +714,32 @@ int __init dom0_construct_pv(struct domain *d, > v->arch.pv.event_callback_cs = FLAT_COMPAT_KERNEL_CS; > } > > +#define UNMAP_MAP_AND_ADVANCE(mfn_var, virt_var, maddr) \ > +do { \ > + unmap_domain_page(virt_var); \ > + mfn_var = maddr_to_mfn(maddr); \ > + maddr += PAGE_SIZE; \ > + virt_var = map_domain_page(mfn_var); \ FWIW, I would do the advance after the map, so that the order matches the name of the function. > +} while ( false ) > + > if ( !compat ) > { > maddr_to_page(mpt_alloc)->u.inuse.type_info = PGT_l4_page_table; > - l4start = l4tab = __va(mpt_alloc); mpt_alloc += PAGE_SIZE; > + UNMAP_MAP_AND_ADVANCE(l4start_mfn, l4start, mpt_alloc); > + l4tab = l4start; You could even make the macro return virt_var, and so use it like: l4tab = l4start = UNMAP_MAP_AND_ADVANCE(l4start_mfn, mpt_alloc); ? Anyway, no strong opinion. Thanks, Roger.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |