Re: [PATCH v2 01/19] riscv: hwprobe: factorize hwprobe ISA extension reporting
From: Clément Léger <hidden>
Date: 2023-10-19 09:47:07
Also in:
linux-doc, linux-riscv, lkml
On 18/10/2023 19:45, Evan Green wrote:
On Wed, Oct 18, 2023 at 10:37 AM Conor Dooley [off-list ref] wrote:quoted
On Wed, Oct 18, 2023 at 06:33:34PM +0100, Conor Dooley wrote:quoted
On Wed, Oct 18, 2023 at 10:24:15AM -0700, Evan Green wrote:quoted
On Tue, Oct 17, 2023 at 6:15 AM Clément Léger [off-list ref] wrote:quoted
Factorize ISA extension reporting by using a macro rather than copy/pasting extension names. This will allow adding new extensions more easily. Signed-off-by: Clément Léger <redacted> --- arch/riscv/kernel/sys_riscv.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-)diff --git a/arch/riscv/kernel/sys_riscv.c b/arch/riscv/kernel/sys_riscv.c index 473159b5f303..e207874e686e 100644 --- a/arch/riscv/kernel/sys_riscv.c +++ b/arch/riscv/kernel/sys_riscv.c@@ -145,20 +145,24 @@ static void hwprobe_isa_ext0(struct riscv_hwprobe *pair, for_each_cpu(cpu, cpus) { struct riscv_isainfo *isainfo = &hart_isa[cpu]; - if (riscv_isa_extension_available(isainfo->isa, ZBA)) - pair->value |= RISCV_HWPROBE_EXT_ZBA; - else - missing |= RISCV_HWPROBE_EXT_ZBA; - - if (riscv_isa_extension_available(isainfo->isa, ZBB)) - pair->value |= RISCV_HWPROBE_EXT_ZBB; - else - missing |= RISCV_HWPROBE_EXT_ZBB; - - if (riscv_isa_extension_available(isainfo->isa, ZBS)) - pair->value |= RISCV_HWPROBE_EXT_ZBS; - else - missing |= RISCV_HWPROBE_EXT_ZBS; +#define CHECK_ISA_EXT(__ext) \ + do { \ + if (riscv_isa_extension_available(isainfo->isa, __ext)) \ + pair->value |= RISCV_HWPROBE_EXT_##__ext; \ + else \ + missing |= RISCV_HWPROBE_EXT_##__ext; \ + } while (false) + + /* + * Only use CHECK_ISA_EXT() for extensions which can be exposed + * to userspace, regardless of the kernel's configuration, as no + * other checks, besides presence in the hart_isa bitmap, are + * made.This comment alludes to a dangerous trap, but I'm having trouble understanding what it is.You cannot, for example, use this for communicating the presence of F or D, since they require a config option to be set before their use is safe.Funnily enough, this comment is immediately contradicted by the vector subset extensions, where these CHECK_ISA_EXT() macros are used wrapped in has_vector(). The code looks valid to me, since has_vector() contains the Kconfig check, but does fly in the face of this comment.Ohh, got it. The word "can" is doing a lot of heavy lifting in that comment. So maybe something like: "This macro performs little in the way of extension-specific kernel readiness checks. It's assumed other gating factors like required Kconfig settings have already been confirmed to support exposing the given extension to usermode". ... But, you know, make it sparkle.
Hi Even, Indeed the comment was a bit misleading, is this more clear ? /* * Only use CHECK_ISA_EXT() for extensions which are usable by * userspace with respect to the kernel current configuration. * For instance, ISA extensions that uses float operations * should not be exposed when CONFIG_FPU is not set. */ Clément
-Evan