[v7, 01/10] riscv: Add support for kernel mode vector
Eric Biggers
ebiggers at kernel.org
Thu Dec 21 21:30:14 PST 2023
On Thu, Dec 21, 2023 at 01:43:08PM +0000, Andy Chiu wrote:
> +/*
> + * We use a flag to track in-kernel Vector context. Currently the flag has the
> + * following meaning:
> + *
> + * - bit 0-7 indicates whether the in-kernel Vector context is active. The
> + * activation of this state disables the preemption. On a non-RT kernel, it
> + * also disable bh. Currently only 0 and 1 are valid value for this field.
> + * Other values are reserved for future uses.
> + */
> +
> +#define RISCV_KERNEL_MODE_V_MASK 0xff
> +
> +#define RISCV_KERNEL_MODE_V 0x1
Is there a reason this isn't just a single bit flag?
> +static inline void riscv_v_ctx_cnt_add(u32 offset)
> +{
> + current->thread.riscv_v_flags += offset;
> + barrier();
> +}
> +
> +static inline void riscv_v_ctx_cnt_sub(u32 offset)
> +{
> + barrier();
> + current->thread.riscv_v_flags -= offset;
> +}
What is the purpose of the barriers above?
> +static inline u32 riscv_v_ctx_cnt(void)
> +{
> + return READ_ONCE(current->thread.riscv_v_flags);
> +}
What is the purpose of using READ_ONCE() here?
> diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c
> index 4f21d970a129..5c4dcf518684 100644
> --- a/arch/riscv/kernel/process.c
> +++ b/arch/riscv/kernel/process.c
> @@ -187,7 +187,6 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
> *dst = *src;
> /* clear entire V context, including datap for a new task */
> memset(&dst->thread.vstate, 0, sizeof(struct __riscv_v_ext_state));
> -
> return 0;
> }
Unnecessary whitespace change.
Otherwise this patch looks good, thanks!
- Eric
More information about the linux-riscv
mailing list