|
[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 |