|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 1/2] xen/arm32: head: Rework how the fixmap and early UART mapping are prepared
Hi Julien,
On 11/01/2024 19:34, Julien Grall wrote:
>
>
> From: Julien Grall <jgrall@xxxxxxxxxx>
>
> Since commit 5e213f0f4d2c ("xen/arm32: head: Widen the use of the
> temporary mapping"), boot_second (used to cover regions like Xen and
> the fixmap) will not be mapped if the identity mapping overlap.
>
> So it is ok to prepare the fixmap table and link it in boot_second
> earlier. With that, the fixmap can also be used earlier via the
> temporary mapping.
>
> Therefore split setup_fixmap() in two:
> * The table is now linked in create_page_tables() because
> the boot page tables needs to be recreated for every CPU.
> * The early UART mapping is only added for the boot CPU0 as the
> fixmap table is not cleared when secondary CPUs boot.
>
> Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx>
Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx>
with below 2 adjustments:
>
> ----
>
> Changelog since v1:
> * Rebase
> * Move the UART mapping enable_mm_boot_cpu()
> ---
> xen/arch/arm/arm32/mmu/head.S | 61 ++++++++---------------------------
> 1 file changed, 14 insertions(+), 47 deletions(-)
>
> diff --git a/xen/arch/arm/arm32/mmu/head.S b/xen/arch/arm/arm32/mmu/head.S
> index 4e6395e7876d..a90799ad5451 100644
> --- a/xen/arch/arm/arm32/mmu/head.S
> +++ b/xen/arch/arm/arm32/mmu/head.S
> @@ -165,11 +165,6 @@
> * Rebuild the boot pagetable's first-level entries. The structure
> * is described in mm.c.
> *
> - * After the CPU enables paging it will add the fixmap mapping
> - * to these page tables, however this may clash with the 1:1
> - * mapping. So each CPU must rebuild the page tables here with
> - * the 1:1 in place.
> - *
> * Inputs:
> * r9 : paddr(start)
> * r10: phys offset
> @@ -197,6 +192,10 @@ create_page_tables:
> add r5, r5, #PAGE_SIZE /* r5 := Next table */
> .endr
>
> + /* Map the fixmap into boot_second */
> + mov_w r0, FIXMAP_ADDR(0)
> + create_table_entry boot_second, xen_fixmap, r0, 2
> +
> /*
> * Find the size of Xen in pages and multiply by the size of a
> * PTE. This will then be compared in the mapping loop below.
> @@ -442,19 +441,20 @@ ENDPROC(enable_secondary_cpu_mm)
> ENTRY(enable_boot_cpu_mm)
> mov r6, lr
>
> +#ifdef CONFIG_EARLY_PRINTK
> + /*
> + * Add the UART mapping to the fixmap so the UART can be used
> + * as the MMU is on. This only need to do done on the boot CPU.
s/need to do done/needs to be done/
> + */
> + mov_w r0, EARLY_UART_VIRTUAL_ADDRESS
> + create_mapping_entry xen_fixmap, r0, r11, type=PT_DEV_L3
Would you mind listing r11 in the Input section of a comment?
~Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |