* [PATCH v2] RISC-V: Enable cbo.clean/flush in usermode
@ 2024-12-24 12:39 Yunhui Cui
2024-12-24 14:11 ` Andrew Jones
0 siblings, 1 reply; 3+ messages in thread
From: Yunhui Cui @ 2024-12-24 12:39 UTC (permalink / raw)
To: paul.walmsley, palmer, aou, conor, charlie, ajones,
samuel.holland, cleger, andybnac, alexghiti, linux-riscv,
linux-kernel
Cc: Yunhui Cui
Enabling cbo.clean and cbo.flush in user mode makes it more
convenient to manage the cache state and achieve better performance.
Signed-off-by: Yunhui Cui <cuiyunhui@bytedance.com>
---
arch/riscv/kernel/cpufeature.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
index c0916ed318c2..60d180b98f52 100644
--- a/arch/riscv/kernel/cpufeature.c
+++ b/arch/riscv/kernel/cpufeature.c
@@ -30,6 +30,7 @@
#define NUM_ALPHA_EXTS ('z' - 'a' + 1)
static bool any_cpu_has_zicboz;
+static bool any_cpu_has_zicbom;
unsigned long elf_hwcap __read_mostly;
@@ -87,6 +88,8 @@ static int riscv_ext_zicbom_validate(const struct riscv_isa_ext_data *data,
pr_err("Zicbom disabled as cbom-block-size present, but is not a power-of-2\n");
return -EINVAL;
}
+
+ any_cpu_has_zicbom = true;
return 0;
}
@@ -944,6 +947,11 @@ void __init riscv_user_isa_enable(void)
current->thread.envcfg |= ENVCFG_CBZE;
else if (any_cpu_has_zicboz)
pr_warn("Zicboz disabled as it is unavailable on some harts\n");
+
+ if (riscv_has_extension_unlikely(RISCV_ISA_EXT_ZICBOM))
+ current->thread.envcfg |= ENVCFG_CBCFE;
+ else if (any_cpu_has_zicbom)
+ pr_warn("Zicbom disabled as it is unavailable on some harts\n");
}
#ifdef CONFIG_RISCV_ALTERNATIVE
--
2.39.2
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2] RISC-V: Enable cbo.clean/flush in usermode
2024-12-24 12:39 [PATCH v2] RISC-V: Enable cbo.clean/flush in usermode Yunhui Cui
@ 2024-12-24 14:11 ` Andrew Jones
2024-12-25 2:38 ` [External] " yunhui cui
0 siblings, 1 reply; 3+ messages in thread
From: Andrew Jones @ 2024-12-24 14:11 UTC (permalink / raw)
To: Yunhui Cui
Cc: paul.walmsley, palmer, aou, conor, charlie, samuel.holland,
cleger, andybnac, alexghiti, linux-riscv, linux-kernel
On Tue, Dec 24, 2024 at 08:39:46PM +0800, Yunhui Cui wrote:
> Enabling cbo.clean and cbo.flush in user mode makes it more
> convenient to manage the cache state and achieve better performance.
>
> Signed-off-by: Yunhui Cui <cuiyunhui@bytedance.com>
> ---
> arch/riscv/kernel/cpufeature.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
> index c0916ed318c2..60d180b98f52 100644
> --- a/arch/riscv/kernel/cpufeature.c
> +++ b/arch/riscv/kernel/cpufeature.c
> @@ -30,6 +30,7 @@
> #define NUM_ALPHA_EXTS ('z' - 'a' + 1)
>
> static bool any_cpu_has_zicboz;
> +static bool any_cpu_has_zicbom;
>
> unsigned long elf_hwcap __read_mostly;
>
> @@ -87,6 +88,8 @@ static int riscv_ext_zicbom_validate(const struct riscv_isa_ext_data *data,
> pr_err("Zicbom disabled as cbom-block-size present, but is not a power-of-2\n");
> return -EINVAL;
> }
> +
> + any_cpu_has_zicbom = true;
> return 0;
> }
>
> @@ -944,6 +947,11 @@ void __init riscv_user_isa_enable(void)
> current->thread.envcfg |= ENVCFG_CBZE;
> else if (any_cpu_has_zicboz)
> pr_warn("Zicboz disabled as it is unavailable on some harts\n");
> +
> + if (riscv_has_extension_unlikely(RISCV_ISA_EXT_ZICBOM))
> + current->thread.envcfg |= ENVCFG_CBCFE;
> + else if (any_cpu_has_zicbom)
> + pr_warn("Zicbom disabled as it is unavailable on some harts\n");
> }
>
> #ifdef CONFIG_RISCV_ALTERNATIVE
> --
> 2.39.2
>
This looks good, so
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
but, as a separate patch, we should also provide hwprobe support like
zicboz has, i.e. add ZICBOM to the IMA ext0 key and add a key for the
zicbom block size. And then, as another patch, add a test_zicbom()
function to tools/testing/selftests/riscv/hwprobe/cbo.c.
Thanks,
drew
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [External] Re: [PATCH v2] RISC-V: Enable cbo.clean/flush in usermode
2024-12-24 14:11 ` Andrew Jones
@ 2024-12-25 2:38 ` yunhui cui
0 siblings, 0 replies; 3+ messages in thread
From: yunhui cui @ 2024-12-25 2:38 UTC (permalink / raw)
To: Andrew Jones
Cc: paul.walmsley, palmer, aou, conor, charlie, samuel.holland,
cleger, andybnac, alexghiti, linux-riscv, linux-kernel
Hi drew,
On Tue, Dec 24, 2024 at 10:11 PM Andrew Jones <ajones@ventanamicro.com> wrote:
>
> On Tue, Dec 24, 2024 at 08:39:46PM +0800, Yunhui Cui wrote:
> > Enabling cbo.clean and cbo.flush in user mode makes it more
> > convenient to manage the cache state and achieve better performance.
> >
> > Signed-off-by: Yunhui Cui <cuiyunhui@bytedance.com>
> > ---
> > arch/riscv/kernel/cpufeature.c | 8 ++++++++
> > 1 file changed, 8 insertions(+)
> >
> > diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
> > index c0916ed318c2..60d180b98f52 100644
> > --- a/arch/riscv/kernel/cpufeature.c
> > +++ b/arch/riscv/kernel/cpufeature.c
> > @@ -30,6 +30,7 @@
> > #define NUM_ALPHA_EXTS ('z' - 'a' + 1)
> >
> > static bool any_cpu_has_zicboz;
> > +static bool any_cpu_has_zicbom;
> >
> > unsigned long elf_hwcap __read_mostly;
> >
> > @@ -87,6 +88,8 @@ static int riscv_ext_zicbom_validate(const struct riscv_isa_ext_data *data,
> > pr_err("Zicbom disabled as cbom-block-size present, but is not a power-of-2\n");
> > return -EINVAL;
> > }
> > +
> > + any_cpu_has_zicbom = true;
> > return 0;
> > }
> >
> > @@ -944,6 +947,11 @@ void __init riscv_user_isa_enable(void)
> > current->thread.envcfg |= ENVCFG_CBZE;
> > else if (any_cpu_has_zicboz)
> > pr_warn("Zicboz disabled as it is unavailable on some harts\n");
> > +
> > + if (riscv_has_extension_unlikely(RISCV_ISA_EXT_ZICBOM))
> > + current->thread.envcfg |= ENVCFG_CBCFE;
> > + else if (any_cpu_has_zicbom)
> > + pr_warn("Zicbom disabled as it is unavailable on some harts\n");
> > }
> >
> > #ifdef CONFIG_RISCV_ALTERNATIVE
> > --
> > 2.39.2
> >
>
> This looks good, so
>
> Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
>
> but, as a separate patch, we should also provide hwprobe support like
> zicboz has, i.e. add ZICBOM to the IMA ext0 key and add a key for the
> zicbom block size. And then, as another patch, add a test_zicbom()
> function to tools/testing/selftests/riscv/hwprobe/cbo.c.
>
> Thanks,
> drew
Thank you for your review. Even though hwprobe doesn't export ZICBOM
currently, user-mode workarounds can still be used.
Alright, I'll send two patches next to support hwprobe's export of
ZICBOM and improve the cbo.c in selftests/.
Thanks,
Yunhui
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-12-25 2:38 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-24 12:39 [PATCH v2] RISC-V: Enable cbo.clean/flush in usermode Yunhui Cui
2024-12-24 14:11 ` Andrew Jones
2024-12-25 2:38 ` [External] " yunhui cui
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox