[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.