On 20/01/2023 2:59 pm, Oleksii Kurochko wrote: > diff --git a/xen/arch/riscv/include/asm/processor.h > b/xen/arch/riscv/include/asm/processor.h > new file mode 100644 > index 0000000000..5898a09ce6 > --- /dev/null > +++ b/xen/arch/riscv/include/asm/processor.h > @@ -0,0 +1,114 @@ > +/* SPDX-License-Identifier: MIT */ > +/****************************************************************************** > + * > + * Copyright 2019 (C) Alistair Francis <alistair.fran...@wdc.com> > + * Copyright 2021 (C) Bobby Eshleman <bobby.eshle...@gmail.com> > + * Copyright 2023 (C) Vates > + * > + */ > + > +#ifndef _ASM_RISCV_PROCESSOR_H > +#define _ASM_RISCV_PROCESSOR_H > + > +#include <asm/types.h> > + > +#define RISCV_CPU_USER_REGS_zero 0 > +#define RISCV_CPU_USER_REGS_ra 1 > +#define RISCV_CPU_USER_REGS_sp 2 > +#define RISCV_CPU_USER_REGS_gp 3 > +#define RISCV_CPU_USER_REGS_tp 4 > +#define RISCV_CPU_USER_REGS_t0 5 > +#define RISCV_CPU_USER_REGS_t1 6 > +#define RISCV_CPU_USER_REGS_t2 7 > +#define RISCV_CPU_USER_REGS_s0 8 > +#define RISCV_CPU_USER_REGS_s1 9 > +#define RISCV_CPU_USER_REGS_a0 10 > +#define RISCV_CPU_USER_REGS_a1 11 > +#define RISCV_CPU_USER_REGS_a2 12 > +#define RISCV_CPU_USER_REGS_a3 13 > +#define RISCV_CPU_USER_REGS_a4 14 > +#define RISCV_CPU_USER_REGS_a5 15 > +#define RISCV_CPU_USER_REGS_a6 16 > +#define RISCV_CPU_USER_REGS_a7 17 > +#define RISCV_CPU_USER_REGS_s2 18 > +#define RISCV_CPU_USER_REGS_s3 19 > +#define RISCV_CPU_USER_REGS_s4 20 > +#define RISCV_CPU_USER_REGS_s5 21 > +#define RISCV_CPU_USER_REGS_s6 22 > +#define RISCV_CPU_USER_REGS_s7 23 > +#define RISCV_CPU_USER_REGS_s8 24 > +#define RISCV_CPU_USER_REGS_s9 25 > +#define RISCV_CPU_USER_REGS_s10 26 > +#define RISCV_CPU_USER_REGS_s11 27 > +#define RISCV_CPU_USER_REGS_t3 28 > +#define RISCV_CPU_USER_REGS_t4 29 > +#define RISCV_CPU_USER_REGS_t5 30 > +#define RISCV_CPU_USER_REGS_t6 31 > +#define RISCV_CPU_USER_REGS_sepc 32 > +#define RISCV_CPU_USER_REGS_sstatus 33 > +#define RISCV_CPU_USER_REGS_pregs 34 > +#define RISCV_CPU_USER_REGS_last 35
This block wants moving into the asm-offsets infrastructure, but I suspect they won't want to survive in this form. edit: yeah, definitely not this form. RISCV_CPU_USER_REGS_OFFSET is a recipe for bugs. > + > +#define RISCV_CPU_USER_REGS_OFFSET(x) ((RISCV_CPU_USER_REGS_##x) * > __SIZEOF_POINTER__) > +#define RISCV_CPU_USER_REGS_SIZE RISCV_CPU_USER_REGS_OFFSET(last) > + > +#ifndef __ASSEMBLY__ > + > +/* On stack VCPU state */ > +struct cpu_user_regs > +{ > + register_t zero; unsigned long. > + register_t ra; > + register_t sp; > + register_t gp; > + register_t tp; > + register_t t0; > + register_t t1; > + register_t t2; > + register_t s0; > + register_t s1; > + register_t a0; > + register_t a1; > + register_t a2; > + register_t a3; > + register_t a4; > + register_t a5; > + register_t a6; > + register_t a7; > + register_t s2; > + register_t s3; > + register_t s4; > + register_t s5; > + register_t s6; > + register_t s7; > + register_t s8; > + register_t s9; > + register_t s10; > + register_t s11; > + register_t t3; > + register_t t4; > + register_t t5; > + register_t t6; > + register_t sepc; > + register_t sstatus; > + /* pointer to previous stack_cpu_regs */ > + register_t pregs; Stale comment? Also, surely this wants to be cpu_user_regs *pregs; ? > +}; > + > +static inline void wait_for_interrupt(void) There's no point writing out the name in longhand for a wrapper around a single instruction. ~Andrew