|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 1/3] xen/ppc: Set up a basic C environment
On 06.07.2023 21:04, Shawn Anastasio wrote:
> --- a/xen/arch/ppc/include/asm/config.h
> +++ b/xen/arch/ppc/include/asm/config.h
> @@ -43,7 +43,7 @@
>
> #define SMP_CACHE_BYTES (1 << 6)
>
> -#define STACK_ORDER 2
> +#define STACK_ORDER 0
> #define STACK_SIZE (PAGE_SIZE << STACK_ORDER)
In which way is this related to the change at hand? Aren't you going to
need to undo this rather sooner than later?
> --- a/xen/arch/ppc/ppc64/head.S
> +++ b/xen/arch/ppc/ppc64/head.S
> @@ -1,30 +1,30 @@
> /* SPDX-License-Identifier: GPL-2.0-or-later */
>
> +#include <asm/asm-defns.h>
> +
> .section .text.header, "ax", %progbits
>
> ENTRY(start)
> /*
> - * Depending on how we were booted, the CPU could be running in either
> - * Little Endian or Big Endian mode. The following trampoline from Linux
> - * cleverly uses an instruction that encodes to a NOP if the CPU's
> - * endianness matches the assumption of the assembler (LE, in our case)
> - * or a branch to code that performs the endian switch in the other case.
> + * NOTE: argument registers (r3-r9) must be preserved until the C
> entrypoint
> */
> - tdi 0, 0, 0x48 /* Reverse endian of b . + 8 */
> - b . + 44 /* Skip trampoline if endian is good */
> - .long 0xa600607d /* mfmsr r11 */
> - .long 0x01006b69 /* xori r11,r11,1 */
> - .long 0x00004039 /* li r10,0 */
> - .long 0x6401417d /* mtmsrd r10,1 */
> - .long 0x05009f42 /* bcl 20,31,$+4 */
> - .long 0xa602487d /* mflr r10 */
> - .long 0x14004a39 /* addi r10,r10,20 */
> - .long 0xa6035a7d /* mtsrr0 r10 */
> - .long 0xa6037b7d /* mtsrr1 r11 */
> - .long 0x2400004c /* rfid */
> -
> - /* Now that the endianness is confirmed, continue */
> -1: b 1b
> + FIXUP_ENDIAN
> +
> + /* set up the TOC pointer */
> + LOAD_IMM32(%r2, .TOC.)
> +
> + /* set up the initial stack */
> + LOAD_IMM32(%r1, cpu0_boot_stack)
Wouldn't this (and perhaps also .TOC.) better be calculated in a
PC-relative manner? Or is the plan to have Xen linked to an address
below 4Gb?
> + li %r11, 0
> + stdu %r11, -STACK_FRAME_OVERHEAD(%r1)
> +
> + /* call the C entrypoint */
> + bl start_xen
> +
> + /* should never return */
> + trap
>
> .size start, . - start
> .type start, %function
> +
> + .section .init.data, "aw", @progbits
What's this good for when no data follows?
> --- /dev/null
> +++ b/xen/arch/ppc/setup.c
> @@ -0,0 +1,19 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +#include <xen/init.h>
> +
> +/* Xen stack for bringing up the first CPU. */
> +unsigned char __initdata cpu0_boot_stack[STACK_SIZE] __aligned(STACK_SIZE);
This yields the entire array as zero-initialized. At which point I
don't see a need for the store in head.S.
> +/* Macro to adjust thread priority for hardware multithreading */
> +#define HMT_very_low() asm volatile (" or %r31, %r31, %r31 ")
Nit: Style. Wants to be
#define HMT_very_low() asm volatile ( "or %r31, %r31, %r31" )
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |