From: Hongyan Xia Date: Wed, 11 Sep 2019 09:37:14 +0000 (+0100) Subject: x86/mapcache: initialise the mapcache even for the idle domain X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=e8a96e2c0a3278f7ff284911dfa9f0e02360b0cc;p=people%2Fpauldu%2Fxen.git x86/mapcache: initialise the mapcache even for the idle domain In situations where PMAP cannot be used or the mapcache of a domain is simply not ready, we need to have a mapcache in the idle domain to map pages when there is no direct map. Signed-off-by: Hongyan Xia --- diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index df62b9d7bc..a199a46b55 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -6025,6 +6025,9 @@ int create_perdomain_mapping(struct domain *d, unsigned long va, l3tab = __map_domain_page(pg); clear_page(l3tab); d->arch.perdomain_l3_pg = pg; + if ( is_idle_domain(d) ) + idle_pg_table[l4_table_offset(PERDOMAIN_VIRT_START)] = + l4e_from_page(pg, __PAGE_HYPERVISOR_RW); if ( !nr ) { unmap_domain_page(l3tab); diff --git a/xen/common/schedule.c b/xen/common/schedule.c index e70cc70a65..f151b7109b 100644 --- a/xen/common/schedule.c +++ b/xen/common/schedule.c @@ -2740,6 +2740,9 @@ void __init scheduler_init(void) BUG_ON(nr_cpu_ids > ARRAY_SIZE(idle_vcpu)); idle_domain->vcpu = idle_vcpu; idle_domain->max_vcpus = nr_cpu_ids; +#ifndef CONFIG_DIRECTMAP + mapcache_domain_init(idle_domain); +#endif if ( vcpu_create(idle_domain, 0) == NULL ) BUG();