From: Charlie Jenkins <charlie@rivosinc.com>
To: Samuel Holland <samuel.holland@sifive.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>,
linux-riscv@lists.infradead.org, devicetree@vger.kernel.org,
Catalin Marinas <catalin.marinas@arm.com>,
linux-kernel@vger.kernel.org, Anup Patel <anup@brainfault.org>,
Conor Dooley <conor@kernel.org>,
kasan-dev@googlegroups.com, Atish Patra <atishp@atishpatra.org>,
Evgenii Stepanov <eugenis@google.com>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Rob Herring <robh+dt@kernel.org>,
"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>
Subject: Re: [PATCH v4 04/10] riscv: Add support for userspace pointer masking
Date: Thu, 12 Sep 2024 18:52:09 -0700 [thread overview]
Message-ID: <ZuOayQEfZZeDWW7b@ghost> (raw)
In-Reply-To: <20240829010151.2813377-5-samuel.holland@sifive.com>
On Wed, Aug 28, 2024 at 06:01:26PM -0700, Samuel Holland wrote:
> RISC-V supports pointer masking with a variable number of tag bits
> (which is called "PMLEN" in the specification) and which is configured
> at the next higher privilege level.
>
> Wire up the PR_SET_TAGGED_ADDR_CTRL and PR_GET_TAGGED_ADDR_CTRL prctls
> so userspace can request a lower bound on the number of tag bits and
> determine the actual number of tag bits. As with arm64's
> PR_TAGGED_ADDR_ENABLE, the pointer masking configuration is
> thread-scoped, inherited on clone() and fork() and cleared on execve().
>
> Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
Reviewed-by: Charlie Jenkins <charlie@rivosinc.com>
Tested-by: Charlie Jenkins <charlie@rivosinc.com>
> ---
>
> Changes in v4:
> - Switch IS_ENABLED back to #ifdef to fix riscv32 build
>
> Changes in v3:
> - Rename CONFIG_RISCV_ISA_POINTER_MASKING to CONFIG_RISCV_ISA_SUPM,
> since it only controls the userspace part of pointer masking
> - Use IS_ENABLED instead of #ifdef when possible
> - Use an enum for the supported PMLEN values
> - Simplify the logic in set_tagged_addr_ctrl()
>
> Changes in v2:
> - Rebase on riscv/linux.git for-next
> - Add and use the envcfg_update_bits() helper function
> - Inline flush_tagged_addr_state()
>
> arch/riscv/Kconfig | 11 ++++
> arch/riscv/include/asm/processor.h | 8 +++
> arch/riscv/include/asm/switch_to.h | 11 ++++
> arch/riscv/kernel/process.c | 91 ++++++++++++++++++++++++++++++
> include/uapi/linux/prctl.h | 3 +
> 5 files changed, 124 insertions(+)
>
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index 0f3cd7c3a436..817437157138 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -512,6 +512,17 @@ config RISCV_ISA_C
>
> If you don't know what to do here, say Y.
>
> +config RISCV_ISA_SUPM
> + bool "Supm extension for userspace pointer masking"
> + depends on 64BIT
> + default y
> + help
> + Add support for pointer masking in userspace (Supm) when the
> + underlying hardware extension (Smnpm or Ssnpm) is detected at boot.
> +
> + If this option is disabled, userspace will be unable to use
> + the prctl(PR_{SET,GET}_TAGGED_ADDR_CTRL) API.
> +
> config RISCV_ISA_SVNAPOT
> bool "Svnapot extension support for supervisor mode NAPOT pages"
> depends on 64BIT && MMU
> diff --git a/arch/riscv/include/asm/processor.h b/arch/riscv/include/asm/processor.h
> index 586e4ab701c4..5c4d4fb97314 100644
> --- a/arch/riscv/include/asm/processor.h
> +++ b/arch/riscv/include/asm/processor.h
> @@ -200,6 +200,14 @@ extern int set_unalign_ctl(struct task_struct *tsk, unsigned int val);
> #define RISCV_SET_ICACHE_FLUSH_CTX(arg1, arg2) riscv_set_icache_flush_ctx(arg1, arg2)
> extern int riscv_set_icache_flush_ctx(unsigned long ctx, unsigned long per_thread);
>
> +#ifdef CONFIG_RISCV_ISA_SUPM
> +/* PR_{SET,GET}_TAGGED_ADDR_CTRL prctl */
> +long set_tagged_addr_ctrl(struct task_struct *task, unsigned long arg);
> +long get_tagged_addr_ctrl(struct task_struct *task);
> +#define SET_TAGGED_ADDR_CTRL(arg) set_tagged_addr_ctrl(current, arg)
> +#define GET_TAGGED_ADDR_CTRL() get_tagged_addr_ctrl(current)
> +#endif
> +
> #endif /* __ASSEMBLY__ */
>
> #endif /* _ASM_RISCV_PROCESSOR_H */
> diff --git a/arch/riscv/include/asm/switch_to.h b/arch/riscv/include/asm/switch_to.h
> index 9685cd85e57c..94e33216b2d9 100644
> --- a/arch/riscv/include/asm/switch_to.h
> +++ b/arch/riscv/include/asm/switch_to.h
> @@ -70,6 +70,17 @@ static __always_inline bool has_fpu(void) { return false; }
> #define __switch_to_fpu(__prev, __next) do { } while (0)
> #endif
>
> +static inline void envcfg_update_bits(struct task_struct *task,
> + unsigned long mask, unsigned long val)
> +{
> + unsigned long envcfg;
> +
> + envcfg = (task->thread.envcfg & ~mask) | val;
> + task->thread.envcfg = envcfg;
> + if (task == current)
> + csr_write(CSR_ENVCFG, envcfg);
> +}
> +
> static inline void __switch_to_envcfg(struct task_struct *next)
> {
> asm volatile (ALTERNATIVE("nop", "csrw " __stringify(CSR_ENVCFG) ", %0",
> diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c
> index e4bc61c4e58a..f39221ab5ddd 100644
> --- a/arch/riscv/kernel/process.c
> +++ b/arch/riscv/kernel/process.c
> @@ -7,6 +7,7 @@
> * Copyright (C) 2017 SiFive
> */
>
> +#include <linux/bitfield.h>
> #include <linux/cpu.h>
> #include <linux/kernel.h>
> #include <linux/sched.h>
> @@ -171,6 +172,10 @@ void flush_thread(void)
> memset(¤t->thread.vstate, 0, sizeof(struct __riscv_v_ext_state));
> clear_tsk_thread_flag(current, TIF_RISCV_V_DEFER_RESTORE);
> #endif
> +#ifdef CONFIG_RISCV_ISA_SUPM
> + if (riscv_has_extension_unlikely(RISCV_ISA_EXT_SUPM))
> + envcfg_update_bits(current, ENVCFG_PMM, ENVCFG_PMM_PMLEN_0);
> +#endif
> }
>
> void arch_release_task_struct(struct task_struct *tsk)
> @@ -233,3 +238,89 @@ void __init arch_task_cache_init(void)
> {
> riscv_v_setup_ctx_cache();
> }
> +
> +#ifdef CONFIG_RISCV_ISA_SUPM
> +enum {
> + PMLEN_0 = 0,
> + PMLEN_7 = 7,
> + PMLEN_16 = 16,
> +};
> +
> +static bool have_user_pmlen_7;
> +static bool have_user_pmlen_16;
> +
> +long set_tagged_addr_ctrl(struct task_struct *task, unsigned long arg)
> +{
> + unsigned long valid_mask = PR_PMLEN_MASK;
> + struct thread_info *ti = task_thread_info(task);
> + unsigned long pmm;
> + u8 pmlen;
> +
> + if (is_compat_thread(ti))
> + return -EINVAL;
> +
> + if (arg & ~valid_mask)
> + return -EINVAL;
> +
> + /*
> + * Prefer the smallest PMLEN that satisfies the user's request,
> + * in case choosing a larger PMLEN has a performance impact.
> + */
> + pmlen = FIELD_GET(PR_PMLEN_MASK, arg);
> + if (pmlen == PMLEN_0)
> + pmm = ENVCFG_PMM_PMLEN_0;
> + else if (pmlen <= PMLEN_7 && have_user_pmlen_7)
> + pmm = ENVCFG_PMM_PMLEN_7;
> + else if (pmlen <= PMLEN_16 && have_user_pmlen_16)
> + pmm = ENVCFG_PMM_PMLEN_16;
> + else
> + return -EINVAL;
> +
> + envcfg_update_bits(task, ENVCFG_PMM, pmm);
> +
> + return 0;
> +}
> +
> +long get_tagged_addr_ctrl(struct task_struct *task)
> +{
> + struct thread_info *ti = task_thread_info(task);
> + long ret = 0;
> +
> + if (is_compat_thread(ti))
> + return -EINVAL;
> +
> + switch (task->thread.envcfg & ENVCFG_PMM) {
> + case ENVCFG_PMM_PMLEN_7:
> + ret = FIELD_PREP(PR_PMLEN_MASK, PMLEN_7);
> + break;
> + case ENVCFG_PMM_PMLEN_16:
> + ret = FIELD_PREP(PR_PMLEN_MASK, PMLEN_16);
> + break;
> + }
> +
> + return ret;
> +}
> +
> +static bool try_to_set_pmm(unsigned long value)
> +{
> + csr_set(CSR_ENVCFG, value);
> + return (csr_read_clear(CSR_ENVCFG, ENVCFG_PMM) & ENVCFG_PMM) == value;
> +}
> +
> +static int __init tagged_addr_init(void)
> +{
> + if (!riscv_has_extension_unlikely(RISCV_ISA_EXT_SUPM))
> + return 0;
> +
> + /*
> + * envcfg.PMM is a WARL field. Detect which values are supported.
> + * Assume the supported PMLEN values are the same on all harts.
> + */
> + csr_clear(CSR_ENVCFG, ENVCFG_PMM);
> + have_user_pmlen_7 = try_to_set_pmm(ENVCFG_PMM_PMLEN_7);
> + have_user_pmlen_16 = try_to_set_pmm(ENVCFG_PMM_PMLEN_16);
> +
> + return 0;
> +}
> +core_initcall(tagged_addr_init);
> +#endif /* CONFIG_RISCV_ISA_SUPM */
> diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h
> index 35791791a879..6e84c827869b 100644
> --- a/include/uapi/linux/prctl.h
> +++ b/include/uapi/linux/prctl.h
> @@ -244,6 +244,9 @@ struct prctl_mm_map {
> # define PR_MTE_TAG_MASK (0xffffUL << PR_MTE_TAG_SHIFT)
> /* Unused; kept only for source compatibility */
> # define PR_MTE_TCF_SHIFT 1
> +/* RISC-V pointer masking tag length */
> +# define PR_PMLEN_SHIFT 24
> +# define PR_PMLEN_MASK (0x7fUL << PR_PMLEN_SHIFT)
>
> /* Control reclaim behavior when allocating memory */
> #define PR_SET_IO_FLUSHER 57
> --
> 2.45.1
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Charlie Jenkins <charlie@rivosinc.com>
To: Samuel Holland <samuel.holland@sifive.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>,
linux-riscv@lists.infradead.org, devicetree@vger.kernel.org,
Catalin Marinas <catalin.marinas@arm.com>,
linux-kernel@vger.kernel.org, Anup Patel <anup@brainfault.org>,
Conor Dooley <conor@kernel.org>,
kasan-dev@googlegroups.com, Atish Patra <atishp@atishpatra.org>,
Evgenii Stepanov <eugenis@google.com>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Rob Herring <robh+dt@kernel.org>,
"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>
Subject: Re: [PATCH v4 04/10] riscv: Add support for userspace pointer masking
Date: Thu, 12 Sep 2024 18:52:09 -0700 [thread overview]
Message-ID: <ZuOayQEfZZeDWW7b@ghost> (raw)
In-Reply-To: <20240829010151.2813377-5-samuel.holland@sifive.com>
On Wed, Aug 28, 2024 at 06:01:26PM -0700, Samuel Holland wrote:
> RISC-V supports pointer masking with a variable number of tag bits
> (which is called "PMLEN" in the specification) and which is configured
> at the next higher privilege level.
>
> Wire up the PR_SET_TAGGED_ADDR_CTRL and PR_GET_TAGGED_ADDR_CTRL prctls
> so userspace can request a lower bound on the number of tag bits and
> determine the actual number of tag bits. As with arm64's
> PR_TAGGED_ADDR_ENABLE, the pointer masking configuration is
> thread-scoped, inherited on clone() and fork() and cleared on execve().
>
> Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
Reviewed-by: Charlie Jenkins <charlie@rivosinc.com>
Tested-by: Charlie Jenkins <charlie@rivosinc.com>
> ---
>
> Changes in v4:
> - Switch IS_ENABLED back to #ifdef to fix riscv32 build
>
> Changes in v3:
> - Rename CONFIG_RISCV_ISA_POINTER_MASKING to CONFIG_RISCV_ISA_SUPM,
> since it only controls the userspace part of pointer masking
> - Use IS_ENABLED instead of #ifdef when possible
> - Use an enum for the supported PMLEN values
> - Simplify the logic in set_tagged_addr_ctrl()
>
> Changes in v2:
> - Rebase on riscv/linux.git for-next
> - Add and use the envcfg_update_bits() helper function
> - Inline flush_tagged_addr_state()
>
> arch/riscv/Kconfig | 11 ++++
> arch/riscv/include/asm/processor.h | 8 +++
> arch/riscv/include/asm/switch_to.h | 11 ++++
> arch/riscv/kernel/process.c | 91 ++++++++++++++++++++++++++++++
> include/uapi/linux/prctl.h | 3 +
> 5 files changed, 124 insertions(+)
>
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index 0f3cd7c3a436..817437157138 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -512,6 +512,17 @@ config RISCV_ISA_C
>
> If you don't know what to do here, say Y.
>
> +config RISCV_ISA_SUPM
> + bool "Supm extension for userspace pointer masking"
> + depends on 64BIT
> + default y
> + help
> + Add support for pointer masking in userspace (Supm) when the
> + underlying hardware extension (Smnpm or Ssnpm) is detected at boot.
> +
> + If this option is disabled, userspace will be unable to use
> + the prctl(PR_{SET,GET}_TAGGED_ADDR_CTRL) API.
> +
> config RISCV_ISA_SVNAPOT
> bool "Svnapot extension support for supervisor mode NAPOT pages"
> depends on 64BIT && MMU
> diff --git a/arch/riscv/include/asm/processor.h b/arch/riscv/include/asm/processor.h
> index 586e4ab701c4..5c4d4fb97314 100644
> --- a/arch/riscv/include/asm/processor.h
> +++ b/arch/riscv/include/asm/processor.h
> @@ -200,6 +200,14 @@ extern int set_unalign_ctl(struct task_struct *tsk, unsigned int val);
> #define RISCV_SET_ICACHE_FLUSH_CTX(arg1, arg2) riscv_set_icache_flush_ctx(arg1, arg2)
> extern int riscv_set_icache_flush_ctx(unsigned long ctx, unsigned long per_thread);
>
> +#ifdef CONFIG_RISCV_ISA_SUPM
> +/* PR_{SET,GET}_TAGGED_ADDR_CTRL prctl */
> +long set_tagged_addr_ctrl(struct task_struct *task, unsigned long arg);
> +long get_tagged_addr_ctrl(struct task_struct *task);
> +#define SET_TAGGED_ADDR_CTRL(arg) set_tagged_addr_ctrl(current, arg)
> +#define GET_TAGGED_ADDR_CTRL() get_tagged_addr_ctrl(current)
> +#endif
> +
> #endif /* __ASSEMBLY__ */
>
> #endif /* _ASM_RISCV_PROCESSOR_H */
> diff --git a/arch/riscv/include/asm/switch_to.h b/arch/riscv/include/asm/switch_to.h
> index 9685cd85e57c..94e33216b2d9 100644
> --- a/arch/riscv/include/asm/switch_to.h
> +++ b/arch/riscv/include/asm/switch_to.h
> @@ -70,6 +70,17 @@ static __always_inline bool has_fpu(void) { return false; }
> #define __switch_to_fpu(__prev, __next) do { } while (0)
> #endif
>
> +static inline void envcfg_update_bits(struct task_struct *task,
> + unsigned long mask, unsigned long val)
> +{
> + unsigned long envcfg;
> +
> + envcfg = (task->thread.envcfg & ~mask) | val;
> + task->thread.envcfg = envcfg;
> + if (task == current)
> + csr_write(CSR_ENVCFG, envcfg);
> +}
> +
> static inline void __switch_to_envcfg(struct task_struct *next)
> {
> asm volatile (ALTERNATIVE("nop", "csrw " __stringify(CSR_ENVCFG) ", %0",
> diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c
> index e4bc61c4e58a..f39221ab5ddd 100644
> --- a/arch/riscv/kernel/process.c
> +++ b/arch/riscv/kernel/process.c
> @@ -7,6 +7,7 @@
> * Copyright (C) 2017 SiFive
> */
>
> +#include <linux/bitfield.h>
> #include <linux/cpu.h>
> #include <linux/kernel.h>
> #include <linux/sched.h>
> @@ -171,6 +172,10 @@ void flush_thread(void)
> memset(¤t->thread.vstate, 0, sizeof(struct __riscv_v_ext_state));
> clear_tsk_thread_flag(current, TIF_RISCV_V_DEFER_RESTORE);
> #endif
> +#ifdef CONFIG_RISCV_ISA_SUPM
> + if (riscv_has_extension_unlikely(RISCV_ISA_EXT_SUPM))
> + envcfg_update_bits(current, ENVCFG_PMM, ENVCFG_PMM_PMLEN_0);
> +#endif
> }
>
> void arch_release_task_struct(struct task_struct *tsk)
> @@ -233,3 +238,89 @@ void __init arch_task_cache_init(void)
> {
> riscv_v_setup_ctx_cache();
> }
> +
> +#ifdef CONFIG_RISCV_ISA_SUPM
> +enum {
> + PMLEN_0 = 0,
> + PMLEN_7 = 7,
> + PMLEN_16 = 16,
> +};
> +
> +static bool have_user_pmlen_7;
> +static bool have_user_pmlen_16;
> +
> +long set_tagged_addr_ctrl(struct task_struct *task, unsigned long arg)
> +{
> + unsigned long valid_mask = PR_PMLEN_MASK;
> + struct thread_info *ti = task_thread_info(task);
> + unsigned long pmm;
> + u8 pmlen;
> +
> + if (is_compat_thread(ti))
> + return -EINVAL;
> +
> + if (arg & ~valid_mask)
> + return -EINVAL;
> +
> + /*
> + * Prefer the smallest PMLEN that satisfies the user's request,
> + * in case choosing a larger PMLEN has a performance impact.
> + */
> + pmlen = FIELD_GET(PR_PMLEN_MASK, arg);
> + if (pmlen == PMLEN_0)
> + pmm = ENVCFG_PMM_PMLEN_0;
> + else if (pmlen <= PMLEN_7 && have_user_pmlen_7)
> + pmm = ENVCFG_PMM_PMLEN_7;
> + else if (pmlen <= PMLEN_16 && have_user_pmlen_16)
> + pmm = ENVCFG_PMM_PMLEN_16;
> + else
> + return -EINVAL;
> +
> + envcfg_update_bits(task, ENVCFG_PMM, pmm);
> +
> + return 0;
> +}
> +
> +long get_tagged_addr_ctrl(struct task_struct *task)
> +{
> + struct thread_info *ti = task_thread_info(task);
> + long ret = 0;
> +
> + if (is_compat_thread(ti))
> + return -EINVAL;
> +
> + switch (task->thread.envcfg & ENVCFG_PMM) {
> + case ENVCFG_PMM_PMLEN_7:
> + ret = FIELD_PREP(PR_PMLEN_MASK, PMLEN_7);
> + break;
> + case ENVCFG_PMM_PMLEN_16:
> + ret = FIELD_PREP(PR_PMLEN_MASK, PMLEN_16);
> + break;
> + }
> +
> + return ret;
> +}
> +
> +static bool try_to_set_pmm(unsigned long value)
> +{
> + csr_set(CSR_ENVCFG, value);
> + return (csr_read_clear(CSR_ENVCFG, ENVCFG_PMM) & ENVCFG_PMM) == value;
> +}
> +
> +static int __init tagged_addr_init(void)
> +{
> + if (!riscv_has_extension_unlikely(RISCV_ISA_EXT_SUPM))
> + return 0;
> +
> + /*
> + * envcfg.PMM is a WARL field. Detect which values are supported.
> + * Assume the supported PMLEN values are the same on all harts.
> + */
> + csr_clear(CSR_ENVCFG, ENVCFG_PMM);
> + have_user_pmlen_7 = try_to_set_pmm(ENVCFG_PMM_PMLEN_7);
> + have_user_pmlen_16 = try_to_set_pmm(ENVCFG_PMM_PMLEN_16);
> +
> + return 0;
> +}
> +core_initcall(tagged_addr_init);
> +#endif /* CONFIG_RISCV_ISA_SUPM */
> diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h
> index 35791791a879..6e84c827869b 100644
> --- a/include/uapi/linux/prctl.h
> +++ b/include/uapi/linux/prctl.h
> @@ -244,6 +244,9 @@ struct prctl_mm_map {
> # define PR_MTE_TAG_MASK (0xffffUL << PR_MTE_TAG_SHIFT)
> /* Unused; kept only for source compatibility */
> # define PR_MTE_TCF_SHIFT 1
> +/* RISC-V pointer masking tag length */
> +# define PR_PMLEN_SHIFT 24
> +# define PR_PMLEN_MASK (0x7fUL << PR_PMLEN_SHIFT)
>
> /* Control reclaim behavior when allocating memory */
> #define PR_SET_IO_FLUSHER 57
> --
> 2.45.1
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2024-09-13 1:52 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-29 1:01 [PATCH v4 00/10] riscv: Userspace pointer masking and tagged address ABI Samuel Holland
2024-08-29 1:01 ` Samuel Holland
2024-08-29 1:01 ` [PATCH v4 01/10] dt-bindings: riscv: Add pointer masking ISA extensions Samuel Holland
2024-08-29 1:01 ` Samuel Holland
2024-09-13 1:08 ` Charlie Jenkins
2024-09-13 1:08 ` Charlie Jenkins
2024-08-29 1:01 ` [PATCH v4 02/10] riscv: Add ISA extension parsing for pointer masking Samuel Holland
2024-08-29 1:01 ` Samuel Holland
2024-09-13 1:09 ` Charlie Jenkins
2024-09-13 1:09 ` Charlie Jenkins
2024-08-29 1:01 ` [PATCH v4 03/10] riscv: Add CSR definitions " Samuel Holland
2024-08-29 1:01 ` Samuel Holland
2024-09-13 1:16 ` Charlie Jenkins
2024-09-13 1:16 ` Charlie Jenkins
2024-08-29 1:01 ` [PATCH v4 04/10] riscv: Add support for userspace " Samuel Holland
2024-08-29 1:01 ` Samuel Holland
2024-09-13 1:52 ` Charlie Jenkins [this message]
2024-09-13 1:52 ` Charlie Jenkins
2024-08-29 1:01 ` [PATCH v4 05/10] riscv: Add support for the tagged address ABI Samuel Holland
2024-08-29 1:01 ` Samuel Holland
2024-09-13 2:45 ` Charlie Jenkins
2024-09-13 2:45 ` Charlie Jenkins
2024-09-14 2:57 ` Samuel Holland
2024-09-14 2:57 ` Samuel Holland
2024-09-14 3:16 ` Charlie Jenkins
2024-09-14 3:16 ` Charlie Jenkins
2024-08-29 1:01 ` [PATCH v4 06/10] riscv: Allow ptrace control of " Samuel Holland
2024-08-29 1:01 ` Samuel Holland
2024-09-13 2:51 ` Charlie Jenkins
2024-09-13 2:51 ` Charlie Jenkins
2024-10-16 17:50 ` Samuel Holland
2024-10-16 17:50 ` Samuel Holland
2024-10-17 0:58 ` Charlie Jenkins
2024-10-17 0:58 ` Charlie Jenkins
2024-08-29 1:01 ` [PATCH v4 07/10] selftests: riscv: Add a pointer masking test Samuel Holland
2024-08-29 1:01 ` Samuel Holland
2024-09-13 2:54 ` Charlie Jenkins
2024-09-13 2:54 ` Charlie Jenkins
2024-08-29 1:01 ` [PATCH v4 08/10] riscv: hwprobe: Export the Supm ISA extension Samuel Holland
2024-08-29 1:01 ` Samuel Holland
2024-08-29 1:01 ` [PATCH v4 09/10] RISC-V: KVM: Allow Smnpm and Ssnpm extensions for guests Samuel Holland
2024-08-29 1:01 ` Samuel Holland
2024-09-04 12:17 ` Anup Patel
2024-09-04 12:17 ` Anup Patel
2024-09-04 14:31 ` Samuel Holland
2024-09-04 14:31 ` Samuel Holland
2024-09-04 14:31 ` Samuel Holland
2024-09-04 14:45 ` Anup Patel
2024-09-04 14:45 ` Anup Patel
2024-09-04 14:45 ` Anup Patel
2024-09-04 14:57 ` Samuel Holland
2024-09-04 14:57 ` Samuel Holland
2024-09-04 14:57 ` Samuel Holland
2024-09-04 15:20 ` Anup Patel
2024-09-04 15:20 ` Anup Patel
2024-09-04 15:20 ` Anup Patel
2024-09-04 15:55 ` Samuel Holland
2024-09-04 15:55 ` Samuel Holland
2024-09-04 15:55 ` Samuel Holland
2024-09-05 5:18 ` Anup Patel
2024-09-05 5:18 ` Anup Patel
2024-09-05 5:18 ` Anup Patel
2024-09-14 2:52 ` Samuel Holland
2024-09-14 2:52 ` Samuel Holland
2024-09-14 2:52 ` Samuel Holland
2024-08-29 1:01 ` [PATCH v4 10/10] KVM: riscv: selftests: Add Smnpm and Ssnpm to get-reg-list test Samuel Holland
2024-08-29 1:01 ` Samuel Holland
2024-09-04 12:22 ` Anup Patel
2024-09-04 12:22 ` Anup Patel
2024-09-04 12:32 ` [PATCH v4 00/10] riscv: Userspace pointer masking and tagged address ABI Anup Patel
2024-09-04 12:32 ` Anup Patel
2024-09-13 18:08 ` Charlie Jenkins
2024-09-13 18:08 ` Charlie Jenkins
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZuOayQEfZZeDWW7b@ghost \
--to=charlie@rivosinc.com \
--cc=anup@brainfault.org \
--cc=atishp@atishpatra.org \
--cc=catalin.marinas@arm.com \
--cc=conor@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=eugenis@google.com \
--cc=kasan-dev@googlegroups.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=palmer@dabbelt.com \
--cc=robh+dt@kernel.org \
--cc=samuel.holland@sifive.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.