[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RESEND][PATCH for-4.13] xen/arm: mm: Clear boot pagetables before bringing-up each secondary CPU
On Sat, 21 Sep 2019, Julien Grall wrote: > At the moment, boot pagetables are only cleared once at boot. This means > when booting CPU2 (and onwards) then boot pagetables will not be > cleared. > > To keep the interface exactly the same for all secondary CPU, the boot > pagetables are now cleared before bringing-up each secondary CPU. > > Signed-off-by: Julien Grall <julien.grall@xxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > --- > xen/arch/arm/mm.c | 27 ++++++++++++++++++--------- > 1 file changed, 18 insertions(+), 9 deletions(-) > > diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c > index 1129dc28c8..e14ee76ff8 100644 > --- a/xen/arch/arm/mm.c > +++ b/xen/arch/arm/mm.c > @@ -704,8 +704,20 @@ void __init setup_pagetables(unsigned long > boot_phys_offset) > > switch_ttbr(ttbr); > > - /* Clear the copy of the boot pagetables. Each secondary CPU > - * rebuilds these itself (see head.S) */ > + xen_pt_enforce_wnx(); > + > +#ifdef CONFIG_ARM_32 > + per_cpu(xen_pgtable, 0) = cpu0_pgtable; > + per_cpu(xen_dommap, 0) = cpu0_dommap; > +#endif > +} > + > +static void clear_boot_pagetables(void) > +{ > + /* > + * Clear the copy of the boot pagetables. Each secondary CPU > + * rebuilds these itself (see head.S) > + */ > clear_table(boot_pgtable); > #ifdef CONFIG_ARM_64 > clear_table(boot_first); > @@ -713,18 +725,13 @@ void __init setup_pagetables(unsigned long > boot_phys_offset) > #endif > clear_table(boot_second); > clear_table(boot_third); > - > - xen_pt_enforce_wnx(); > - > -#ifdef CONFIG_ARM_32 > - per_cpu(xen_pgtable, 0) = cpu0_pgtable; > - per_cpu(xen_dommap, 0) = cpu0_dommap; > -#endif > } > > #ifdef CONFIG_ARM_64 > int init_secondary_pagetables(int cpu) > { > + clear_boot_pagetables(); > + > /* Set init_ttbr for this CPU coming up. All CPus share a single setof > * pagetables, but rewrite it each time for consistency with 32 bit. */ > init_ttbr = (uintptr_t) xen_pgtable + phys_offset; > @@ -767,6 +774,8 @@ int init_secondary_pagetables(int cpu) > per_cpu(xen_pgtable, cpu) = first; > per_cpu(xen_dommap, cpu) = domheap; > > + clear_boot_pagetables(); > + > /* Set init_ttbr for this CPU coming up */ > init_ttbr = __pa(first); > clean_dcache(init_ttbr); > -- > 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 |