|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 18/23] xen/riscv: add minimal stuff to processor.h to build full Xen
On 26.02.2024 18:39, Oleksii Kurochko wrote:
> --- /dev/null
> +++ b/docs/misc/riscv/booting.txt
> @@ -0,0 +1,8 @@
> +System requirements
> +===================
> +
> +The following extensions are expected to be supported by a system on which
> +Xen is run:
> +- Zihintpause:
> + On a system that doesn't have this extension, cpu_relax() should be
> + implemented properly. Otherwise, an illegal instruction exception will
> arise.
This decision wants justifying in the (presently once again empty) description.
Furthermore - will there really be an illegal instruction exception otherwise?
Isn't it the nature of hints that they are NOPs if not serving their designated
purpose?
> --- a/xen/arch/riscv/arch.mk
> +++ b/xen/arch/riscv/arch.mk
> @@ -5,6 +5,12 @@ $(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS))
>
> CFLAGS-$(CONFIG_RISCV_64) += -mabi=lp64
>
> +ifeq ($(CONFIG_RISCV_64),y)
> +has_zihintpause = $(call as-insn,$(CC) -mabi=lp64 -march=rv64i_zihintpause,
> "pause",_zihintpause,)
> +else
> +has_zihintpause = $(call as-insn,$(CC) -mabi=ilp32 -march=rv32i_zihintpause,
> "pause",_zihintpause,)
> +endif
Considering that down the road likely more such tests will want adding, I think
this wants further abstracting for the rv32/rv64 difference (ideally in a way
that wouldn't make future RV128 wrongly and silently take the RV32 branch).
This would include eliminating the -mabi=lp64 redundancy with what's visible in
context, perhaps by way of introducing a separate helper macro, e.g.
riscv-abi-$(CONFIG_RISCV_32) := -mabi=ilp32
riscv-abi-$(CONFIG_RISCV_64) := -mabi=lp64
I further see nothing wrong with also using $(riscv-march-y) here. I.e.
overall
_zihintpause := $(call as-insn,$(CC) $(riscv-abi-y)
$(riscv-march-y)_zihintpause,"pause",_zihintpause)
(still with potential of abstracting further through another macro such
that not every such construct would need to spell out the ABI and arch
compiler options).
Plus a macro named has_* imo can be expected to expand to y or n. I would
suggest to simply drop the "has", thus ...
> @@ -12,7 +18,7 @@ riscv-march-$(CONFIG_RISCV_ISA_C) := $(riscv-march-y)c
> # into the upper half _or_ the lower half of the address space.
> # -mcmodel=medlow would force Xen into the lower half.
>
> -CFLAGS += -march=$(riscv-march-y) -mstrict-align -mcmodel=medany
> +CFLAGS += -march=$(riscv-march-y)$(has_zihintpause) -mstrict-align
> -mcmodel=medany
... also making the use site look
> --- a/xen/arch/riscv/include/asm/processor.h
> +++ b/xen/arch/riscv/include/asm/processor.h
> @@ -12,6 +12,9 @@
>
> #ifndef __ASSEMBLY__
>
> +/* TODO: need to be implemeted */
> +#define smp_processor_id() 0
> +
> /* On stack VCPU state */
> struct cpu_user_regs
> {
> @@ -53,6 +56,26 @@ struct cpu_user_regs
> unsigned long pregs;
> };
>
> +/* TODO: need to implement */
> +#define cpu_to_core(cpu) (0)
> +#define cpu_to_socket(cpu) (0)
Nit: Like above in smp_processor_id() no need for parentheses here.
> +static inline void cpu_relax(void)
> +{
> +#ifdef __riscv_zihintpause
> + /*
> + * Reduce instruction retirement.
> + * This assumes the PC changes.
What is this 2nd sentence about?
> + */
> + __asm__ __volatile__ ( "pause" );
> +#else
> + /* Encoding of the pause instruction */
> + __asm__ __volatile__ ( ".insn 0x100000F" );
May I ask that you spell out the leading zero here, to make clear there
aren't, by mistake, one to few zeroes in the middle?
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |