[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH V3 (resend) 05/19] x86/mapcache: Initialise the mapcache for the idle domain
On Mon, May 13, 2024 at 01:40:32PM +0000, Elias El Yandouzi wrote: > From: Hongyan Xia <hongyxia@xxxxxxxxxx> > > In order to use the mapcache in the idle domain, we also have to > populate its page tables in the PERDOMAIN region, and we need to move > mapcache_domain_init() earlier in arch_domain_create(). Oh, so this is the reason for the remark on the previous commit message: idle domain init gets short-circuited earlier in arch_domain_create() and never gets to the mapcache_domain_init() call. > Note, commit 'x86: lift mapcache variable to the arch level' has > initialised the mapcache for HVM domains. With this patch, PV, HVM, > idle domains now all initialise the mapcache. > > Signed-off-by: Wei Wang <wawei@xxxxxxxxx> > Signed-off-by: Hongyan Xia <hongyxia@xxxxxxxxxx> > Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx> > Signed-off-by: Elias El Yandouzi <eliasely@xxxxxxxxxx> > > ---- > > Changes in V2: > * Free resources if mapcache initialisation fails > * Remove `is_idle_domain()` check from `create_perdomain_mappings()` I'm not seeing any is_idle_domain() in create_perdomain_mapping(), and neither anything removed by this patch. > > diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c > index 507d704f16..3303bdb53e 100644 > --- a/xen/arch/x86/domain.c > +++ b/xen/arch/x86/domain.c > @@ -758,9 +758,16 @@ int arch_domain_create(struct domain *d, > > spin_lock_init(&d->arch.e820_lock); > > + if ( (rc = mapcache_domain_init(d)) != 0) > + { > + free_perdomain_mappings(d); > + return rc; What about all the error paths below here that don't use the fail label, don't you need to also call free_perdomain_mappings() on them? Or alternatively arrange the fail label to be suitable to be used this early if it's not already the case. > + } > + > /* Minimal initialisation for the idle domain. */ > if ( unlikely(is_idle_domain(d)) ) > { > + struct page_info *pg = d->arch.perdomain_l3_pg; const? > static const struct arch_csw idle_csw = { > .from = paravirt_ctxt_switch_from, > .to = paravirt_ctxt_switch_to, > @@ -771,6 +778,9 @@ int arch_domain_create(struct domain *d, > > d->arch.cpu_policy = ZERO_BLOCK_PTR; /* Catch stray misuses. */ > > + idle_pg_table[l4_table_offset(PERDOMAIN_VIRT_START)] = > + l4e_from_page(pg, __PAGE_HYPERVISOR_RW); Albeit I think you could just use d->arch.perdomain_l3_pg directly here and avoid the local pg variable? Would you mind adding: /* Slot 260: Per-domain mappings. */ I wonder if it won't be better to just use init_xen_l4_slots() and special case the idle domain in there, instead of open-coding the L4 population for the idle domain like this. Thanks, Roger.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |