On Mon, May 11, 2026 at 7:06 PM Guodong Xu <[email protected]> wrote:
>
> From: Charlie Jenkins <[email protected]>
>
> The base extensions are often lowercase and were written as lowercase in
> hwcap, but other references to these extensions in the kernel are
> uppercase. Standardize the case to make it easier to handle macro
> expansion.
>
> Signed-off-by: Charlie Jenkins <[email protected]>
> [Apply KVM_ISA_EXT_ARR(), fixup all KVM use.]
> Signed-off-by: Andrew Jones <[email protected]>
> Signed-off-by: Guodong Xu <[email protected]>

LGTM.

Acked-by: Anup Patel <[email protected]>
Reviewed-by: Anup Patel <[email protected]>

@Paul, This patch is independent of other changes
in this series. If you are okay then I can take this single
patch through KVM RISC-V tree.

Regards,
Anup



>
> ---
> v2:
> - Rebased onto v7.1-rc2.
> - KVM_ISA_EXT_ARR() consolidation moved to its new upstream location
>   (kvm/isa.c); host-side checks now use kvm_riscv_isa_check_host().
> ---
>  arch/riscv/include/asm/hwcap.h     | 18 +++++++++---------
>  arch/riscv/include/asm/switch_to.h |  4 ++--
>  arch/riscv/kernel/cpufeature.c     | 32 ++++++++++++++++----------------
>  arch/riscv/kernel/sys_hwprobe.c    |  4 ++--
>  arch/riscv/kvm/isa.c               | 16 ++++++++--------
>  arch/riscv/kvm/main.c              |  2 +-
>  arch/riscv/kvm/vcpu_fp.c           | 20 ++++++++++----------
>  arch/riscv/kvm/vcpu_onereg.c       |  6 +++---
>  arch/riscv/kvm/vcpu_vector.c       | 10 +++++-----
>  9 files changed, 56 insertions(+), 56 deletions(-)
>
> diff --git a/arch/riscv/include/asm/hwcap.h b/arch/riscv/include/asm/hwcap.h
> index 7ef8e5f55c8dc..44bf8c7d8acc5 100644
> --- a/arch/riscv/include/asm/hwcap.h
> +++ b/arch/riscv/include/asm/hwcap.h
> @@ -10,15 +10,15 @@
>
>  #include <uapi/asm/hwcap.h>
>
> -#define RISCV_ISA_EXT_a                ('a' - 'a')
> -#define RISCV_ISA_EXT_c                ('c' - 'a')
> -#define RISCV_ISA_EXT_d                ('d' - 'a')
> -#define RISCV_ISA_EXT_f                ('f' - 'a')
> -#define RISCV_ISA_EXT_h                ('h' - 'a')
> -#define RISCV_ISA_EXT_i                ('i' - 'a')
> -#define RISCV_ISA_EXT_m                ('m' - 'a')
> -#define RISCV_ISA_EXT_q                ('q' - 'a')
> -#define RISCV_ISA_EXT_v                ('v' - 'a')
> +#define RISCV_ISA_EXT_A                ('a' - 'a')
> +#define RISCV_ISA_EXT_C                ('c' - 'a')
> +#define RISCV_ISA_EXT_D                ('d' - 'a')
> +#define RISCV_ISA_EXT_F                ('f' - 'a')
> +#define RISCV_ISA_EXT_H                ('h' - 'a')
> +#define RISCV_ISA_EXT_I                ('i' - 'a')
> +#define RISCV_ISA_EXT_M                ('m' - 'a')
> +#define RISCV_ISA_EXT_Q                ('q' - 'a')
> +#define RISCV_ISA_EXT_V                ('v' - 'a')
>
>  /*
>   * These macros represent the logical IDs of each multi-letter RISC-V ISA
> diff --git a/arch/riscv/include/asm/switch_to.h 
> b/arch/riscv/include/asm/switch_to.h
> index 0e71eb82f920c..ff35a4d04f85a 100644
> --- a/arch/riscv/include/asm/switch_to.h
> +++ b/arch/riscv/include/asm/switch_to.h
> @@ -60,8 +60,8 @@ static inline void __switch_to_fpu(struct task_struct *prev,
>
>  static __always_inline bool has_fpu(void)
>  {
> -       return riscv_has_extension_likely(RISCV_ISA_EXT_f) ||
> -               riscv_has_extension_likely(RISCV_ISA_EXT_d);
> +       return riscv_has_extension_likely(RISCV_ISA_EXT_F) ||
> +               riscv_has_extension_likely(RISCV_ISA_EXT_D);
>  }
>  #else
>  static __always_inline bool has_fpu(void) { return false; }
> diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
> index 1734f9a4c2fd7..5cf463570229d 100644
> --- a/arch/riscv/kernel/cpufeature.c
> +++ b/arch/riscv/kernel/cpufeature.c
> @@ -84,7 +84,7 @@ EXPORT_SYMBOL_GPL(__riscv_isa_extension_available);
>  static int riscv_ext_f_depends(const struct riscv_isa_ext_data *data,
>                                const unsigned long *isa_bitmap)
>  {
> -       if (__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_f))
> +       if (__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_F))
>                 return 0;
>
>         return -EPROBE_DEFER;
> @@ -146,7 +146,7 @@ static int riscv_ext_f_validate(const struct 
> riscv_isa_ext_data *data,
>          * Due to extension ordering, d is checked before f, so no deferral
>          * is required.
>          */
> -       if (!__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_d)) {
> +       if (!__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_D)) {
>                 pr_warn_once("This kernel does not support systems with F but 
> not D\n");
>                 return -EINVAL;
>         }
> @@ -189,7 +189,7 @@ static int riscv_ext_vector_float_validate(const struct 
> riscv_isa_ext_data *data
>          * Since this function validates vector only, and v/Zve* are probed
>          * after f/d, there's no need for a deferral here.
>          */
> -       if (!__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_d))
> +       if (!__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_D))
>                 return -EINVAL;
>
>         return 0;
> @@ -224,7 +224,7 @@ static int riscv_ext_zcd_validate(const struct 
> riscv_isa_ext_data *data,
>                                   const unsigned long *isa_bitmap)
>  {
>         if (__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_ZCA) &&
> -           __riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_d))
> +           __riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_D))
>                 return 0;
>
>         return -EPROBE_DEFER;
> @@ -237,7 +237,7 @@ static int riscv_ext_zcf_validate(const struct 
> riscv_isa_ext_data *data,
>                 return -EINVAL;
>
>         if (__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_ZCA) &&
> -           __riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_f))
> +           __riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_F))
>                 return 0;
>
>         return -EPROBE_DEFER;
> @@ -490,15 +490,15 @@ static const unsigned int riscv_c_exts[] = {
>   * New entries to this struct should follow the ordering rules described 
> above.
>   */
>  const struct riscv_isa_ext_data riscv_isa_ext[] = {
> -       __RISCV_ISA_EXT_DATA(i, RISCV_ISA_EXT_i),
> -       __RISCV_ISA_EXT_DATA(m, RISCV_ISA_EXT_m),
> -       __RISCV_ISA_EXT_SUPERSET(a, RISCV_ISA_EXT_a, riscv_a_exts),
> -       __RISCV_ISA_EXT_DATA_VALIDATE(f, RISCV_ISA_EXT_f, 
> riscv_ext_f_validate),
> -       __RISCV_ISA_EXT_DATA_VALIDATE(d, RISCV_ISA_EXT_d, 
> riscv_ext_d_validate),
> -       __RISCV_ISA_EXT_DATA(q, RISCV_ISA_EXT_q),
> -       __RISCV_ISA_EXT_SUPERSET(c, RISCV_ISA_EXT_c, riscv_c_exts),
> -       __RISCV_ISA_EXT_SUPERSET_VALIDATE(v, RISCV_ISA_EXT_v, riscv_v_exts, 
> riscv_ext_vector_float_validate),
> -       __RISCV_ISA_EXT_DATA(h, RISCV_ISA_EXT_h),
> +       __RISCV_ISA_EXT_DATA(i, RISCV_ISA_EXT_I),
> +       __RISCV_ISA_EXT_DATA(m, RISCV_ISA_EXT_M),
> +       __RISCV_ISA_EXT_SUPERSET(a, RISCV_ISA_EXT_A, riscv_a_exts),
> +       __RISCV_ISA_EXT_DATA_VALIDATE(f, RISCV_ISA_EXT_F, 
> riscv_ext_f_validate),
> +       __RISCV_ISA_EXT_DATA_VALIDATE(d, RISCV_ISA_EXT_D, 
> riscv_ext_d_validate),
> +       __RISCV_ISA_EXT_DATA(q, RISCV_ISA_EXT_Q),
> +       __RISCV_ISA_EXT_SUPERSET(c, RISCV_ISA_EXT_C, riscv_c_exts),
> +       __RISCV_ISA_EXT_SUPERSET_VALIDATE(v, RISCV_ISA_EXT_V, riscv_v_exts, 
> riscv_ext_vector_float_validate),
> +       __RISCV_ISA_EXT_DATA(h, RISCV_ISA_EXT_H),
>         __RISCV_ISA_EXT_SUPERSET_VALIDATE(zicbom, RISCV_ISA_EXT_ZICBOM, 
> riscv_xlinuxenvcfg_exts, riscv_ext_zicbom_validate),
>         __RISCV_ISA_EXT_DATA_VALIDATE(zicbop, RISCV_ISA_EXT_ZICBOP, 
> riscv_ext_zicbop_validate),
>         __RISCV_ISA_EXT_SUPERSET_VALIDATE(zicboz, RISCV_ISA_EXT_ZICBOZ, 
> riscv_xlinuxenvcfg_exts, riscv_ext_zicboz_validate),
> @@ -897,8 +897,8 @@ static void __init 
> riscv_fill_hwcap_from_isa_string(unsigned long *isa2hwcap)
>                  * marchid.
>                  */
>                 if (acpi_disabled && boot_vendorid == THEAD_VENDOR_ID && 
> boot_archid == 0x0) {
> -                       this_hwcap &= ~isa2hwcap[RISCV_ISA_EXT_v];
> -                       clear_bit(RISCV_ISA_EXT_v, source_isa);
> +                       this_hwcap &= ~isa2hwcap[RISCV_ISA_EXT_V];
> +                       clear_bit(RISCV_ISA_EXT_V, source_isa);
>                 }
>
>                 riscv_resolve_isa(source_isa, isainfo->isa, &this_hwcap, 
> isa2hwcap);
> diff --git a/arch/riscv/kernel/sys_hwprobe.c b/arch/riscv/kernel/sys_hwprobe.c
> index 1659d31fd288f..f8f68ba781b45 100644
> --- a/arch/riscv/kernel/sys_hwprobe.c
> +++ b/arch/riscv/kernel/sys_hwprobe.c
> @@ -88,10 +88,10 @@ static void hwprobe_isa_ext0(struct riscv_hwprobe *pair,
>         if (has_fpu())
>                 pair->value |= RISCV_HWPROBE_IMA_FD;
>
> -       if (riscv_isa_extension_available(NULL, c))
> +       if (riscv_isa_extension_available(NULL, C))
>                 pair->value |= RISCV_HWPROBE_IMA_C;
>
> -       if (has_vector() && riscv_isa_extension_available(NULL, v))
> +       if (has_vector() && riscv_isa_extension_available(NULL, V))
>                 pair->value |= RISCV_HWPROBE_IMA_V;
>
>         /*
> diff --git a/arch/riscv/kvm/isa.c b/arch/riscv/kvm/isa.c
> index 1132d909cc25c..94077117d1136 100644
> --- a/arch/riscv/kvm/isa.c
> +++ b/arch/riscv/kvm/isa.c
> @@ -17,14 +17,14 @@
>  /* Mapping between KVM ISA Extension ID & guest ISA extension ID */
>  static const unsigned long kvm_isa_ext_arr[] = {
>         /* Single letter extensions (alphabetically sorted) */
> -       [KVM_RISCV_ISA_EXT_A] = RISCV_ISA_EXT_a,
> -       [KVM_RISCV_ISA_EXT_C] = RISCV_ISA_EXT_c,
> -       [KVM_RISCV_ISA_EXT_D] = RISCV_ISA_EXT_d,
> -       [KVM_RISCV_ISA_EXT_F] = RISCV_ISA_EXT_f,
> -       [KVM_RISCV_ISA_EXT_H] = RISCV_ISA_EXT_h,
> -       [KVM_RISCV_ISA_EXT_I] = RISCV_ISA_EXT_i,
> -       [KVM_RISCV_ISA_EXT_M] = RISCV_ISA_EXT_m,
> -       [KVM_RISCV_ISA_EXT_V] = RISCV_ISA_EXT_v,
> +       KVM_ISA_EXT_ARR(A),
> +       KVM_ISA_EXT_ARR(C),
> +       KVM_ISA_EXT_ARR(D),
> +       KVM_ISA_EXT_ARR(F),
> +       KVM_ISA_EXT_ARR(H),
> +       KVM_ISA_EXT_ARR(I),
> +       KVM_ISA_EXT_ARR(M),
> +       KVM_ISA_EXT_ARR(V),
>         /* Multi letter extensions (alphabetically sorted) */
>         KVM_ISA_EXT_ARR(SMNPM),
>         KVM_ISA_EXT_ARR(SMSTATEEN),
> diff --git a/arch/riscv/kvm/main.c b/arch/riscv/kvm/main.c
> index cb8a65273c1f0..70640701310c8 100644
> --- a/arch/riscv/kvm/main.c
> +++ b/arch/riscv/kvm/main.c
> @@ -85,7 +85,7 @@ static int __init riscv_kvm_init(void)
>         char slist[64];
>         const char *str;
>
> -       if (!riscv_isa_extension_available(NULL, h)) {
> +       if (!riscv_isa_extension_available(NULL, H)) {
>                 kvm_info("hypervisor extension not available\n");
>                 return -ENODEV;
>         }
> diff --git a/arch/riscv/kvm/vcpu_fp.c b/arch/riscv/kvm/vcpu_fp.c
> index 6ad6df26a2fd4..bb11e6757d349 100644
> --- a/arch/riscv/kvm/vcpu_fp.c
> +++ b/arch/riscv/kvm/vcpu_fp.c
> @@ -21,8 +21,8 @@ void kvm_riscv_vcpu_fp_reset(struct kvm_vcpu *vcpu)
>         struct kvm_cpu_context *cntx = &vcpu->arch.guest_context;
>
>         cntx->sstatus &= ~SR_FS;
> -       if (riscv_isa_extension_available(vcpu->arch.isa, f) ||
> -           riscv_isa_extension_available(vcpu->arch.isa, d))
> +       if (riscv_isa_extension_available(vcpu->arch.isa, F) ||
> +           riscv_isa_extension_available(vcpu->arch.isa, D))
>                 cntx->sstatus |= SR_FS_INITIAL;
>         else
>                 cntx->sstatus |= SR_FS_OFF;
> @@ -38,9 +38,9 @@ void kvm_riscv_vcpu_guest_fp_save(struct kvm_cpu_context 
> *cntx,
>                                   const unsigned long *isa)
>  {
>         if ((cntx->sstatus & SR_FS) == SR_FS_DIRTY) {
> -               if (riscv_isa_extension_available(isa, d))
> +               if (riscv_isa_extension_available(isa, D))
>                         __kvm_riscv_fp_d_save(cntx);
> -               else if (riscv_isa_extension_available(isa, f))
> +               else if (riscv_isa_extension_available(isa, F))
>                         __kvm_riscv_fp_f_save(cntx);
>                 kvm_riscv_vcpu_fp_clean(cntx);
>         }
> @@ -50,9 +50,9 @@ void kvm_riscv_vcpu_guest_fp_restore(struct kvm_cpu_context 
> *cntx,
>                                      const unsigned long *isa)
>  {
>         if ((cntx->sstatus & SR_FS) != SR_FS_OFF) {
> -               if (riscv_isa_extension_available(isa, d))
> +               if (riscv_isa_extension_available(isa, D))
>                         __kvm_riscv_fp_d_restore(cntx);
> -               else if (riscv_isa_extension_available(isa, f))
> +               else if (riscv_isa_extension_available(isa, F))
>                         __kvm_riscv_fp_f_restore(cntx);
>                 kvm_riscv_vcpu_fp_clean(cntx);
>         }
> @@ -89,7 +89,7 @@ int kvm_riscv_vcpu_get_reg_fp(struct kvm_vcpu *vcpu,
>         void *reg_val;
>
>         if ((rtype == KVM_REG_RISCV_FP_F) &&
> -           riscv_isa_extension_available(vcpu->arch.isa, f)) {
> +           riscv_isa_extension_available(vcpu->arch.isa, F)) {
>                 if (KVM_REG_SIZE(reg->id) != sizeof(u32))
>                         return -EINVAL;
>                 if (reg_num == KVM_REG_RISCV_FP_F_REG(fcsr))
> @@ -102,7 +102,7 @@ int kvm_riscv_vcpu_get_reg_fp(struct kvm_vcpu *vcpu,
>                 } else
>                         return -ENOENT;
>         } else if ((rtype == KVM_REG_RISCV_FP_D) &&
> -                  riscv_isa_extension_available(vcpu->arch.isa, d)) {
> +                  riscv_isa_extension_available(vcpu->arch.isa, D)) {
>                 if (reg_num == KVM_REG_RISCV_FP_D_REG(fcsr)) {
>                         if (KVM_REG_SIZE(reg->id) != sizeof(u32))
>                                 return -EINVAL;
> @@ -138,7 +138,7 @@ int kvm_riscv_vcpu_set_reg_fp(struct kvm_vcpu *vcpu,
>         void *reg_val;
>
>         if ((rtype == KVM_REG_RISCV_FP_F) &&
> -           riscv_isa_extension_available(vcpu->arch.isa, f)) {
> +           riscv_isa_extension_available(vcpu->arch.isa, F)) {
>                 if (KVM_REG_SIZE(reg->id) != sizeof(u32))
>                         return -EINVAL;
>                 if (reg_num == KVM_REG_RISCV_FP_F_REG(fcsr))
> @@ -151,7 +151,7 @@ int kvm_riscv_vcpu_set_reg_fp(struct kvm_vcpu *vcpu,
>                 } else
>                         return -ENOENT;
>         } else if ((rtype == KVM_REG_RISCV_FP_D) &&
> -                  riscv_isa_extension_available(vcpu->arch.isa, d)) {
> +                  riscv_isa_extension_available(vcpu->arch.isa, D)) {
>                 if (reg_num == KVM_REG_RISCV_FP_D_REG(fcsr)) {
>                         if (KVM_REG_SIZE(reg->id) != sizeof(u32))
>                                 return -EINVAL;
> diff --git a/arch/riscv/kvm/vcpu_onereg.c b/arch/riscv/kvm/vcpu_onereg.c
> index bb920e8923c93..5cc7ddd4aa276 100644
> --- a/arch/riscv/kvm/vcpu_onereg.c
> +++ b/arch/riscv/kvm/vcpu_onereg.c
> @@ -770,7 +770,7 @@ static inline unsigned long num_fp_f_regs(const struct 
> kvm_vcpu *vcpu)
>  {
>         const struct kvm_cpu_context *cntx = &vcpu->arch.guest_context;
>
> -       if (riscv_isa_extension_available(vcpu->arch.isa, f))
> +       if (riscv_isa_extension_available(vcpu->arch.isa, F))
>                 return sizeof(cntx->fp.f) / sizeof(u32);
>         else
>                 return 0;
> @@ -799,7 +799,7 @@ static inline unsigned long num_fp_d_regs(const struct 
> kvm_vcpu *vcpu)
>  {
>         const struct kvm_cpu_context *cntx = &vcpu->arch.guest_context;
>
> -       if (riscv_isa_extension_available(vcpu->arch.isa, d))
> +       if (riscv_isa_extension_available(vcpu->arch.isa, D))
>                 return sizeof(cntx->fp.d.f) / sizeof(u64) + 1;
>         else
>                 return 0;
> @@ -878,7 +878,7 @@ static inline unsigned long num_sbi_regs(struct kvm_vcpu 
> *vcpu)
>
>  static inline unsigned long num_vector_regs(const struct kvm_vcpu *vcpu)
>  {
> -       if (!riscv_isa_extension_available(vcpu->arch.isa, v))
> +       if (!riscv_isa_extension_available(vcpu->arch.isa, V))
>                 return 0;
>
>         /* vstart, vl, vtype, vcsr, vlenb and 32 vector regs */
> diff --git a/arch/riscv/kvm/vcpu_vector.c b/arch/riscv/kvm/vcpu_vector.c
> index 62d2fb77bb9b9..f26108a4e601e 100644
> --- a/arch/riscv/kvm/vcpu_vector.c
> +++ b/arch/riscv/kvm/vcpu_vector.c
> @@ -26,7 +26,7 @@ void kvm_riscv_vcpu_vector_reset(struct kvm_vcpu *vcpu)
>
>         cntx->vector.vlenb = riscv_v_vsize / 32;
>
> -       if (riscv_isa_extension_available(isa, v)) {
> +       if (riscv_isa_extension_available(isa, V)) {
>                 cntx->sstatus |= SR_VS_INITIAL;
>                 WARN_ON(!cntx->vector.datap);
>                 memset(cntx->vector.datap, 0, riscv_v_vsize);
> @@ -45,7 +45,7 @@ void kvm_riscv_vcpu_guest_vector_save(struct 
> kvm_cpu_context *cntx,
>                                       unsigned long *isa)
>  {
>         if ((cntx->sstatus & SR_VS) == SR_VS_DIRTY) {
> -               if (riscv_isa_extension_available(isa, v))
> +               if (riscv_isa_extension_available(isa, V))
>                         __kvm_riscv_vector_save(cntx);
>                 kvm_riscv_vcpu_vector_clean(cntx);
>         }
> @@ -55,7 +55,7 @@ void kvm_riscv_vcpu_guest_vector_restore(struct 
> kvm_cpu_context *cntx,
>                                          unsigned long *isa)
>  {
>         if ((cntx->sstatus & SR_VS) != SR_VS_OFF) {
> -               if (riscv_isa_extension_available(isa, v))
> +               if (riscv_isa_extension_available(isa, V))
>                         __kvm_riscv_vector_restore(cntx);
>                 kvm_riscv_vcpu_vector_clean(cntx);
>         }
> @@ -154,7 +154,7 @@ int kvm_riscv_vcpu_get_reg_vector(struct kvm_vcpu *vcpu,
>         void *reg_addr;
>         int rc;
>
> -       if (!riscv_isa_extension_available(isa, v))
> +       if (!riscv_isa_extension_available(isa, V))
>                 return -ENOENT;
>
>         rc = kvm_riscv_vcpu_vreg_addr(vcpu, reg_num, reg_size, &reg_addr);
> @@ -180,7 +180,7 @@ int kvm_riscv_vcpu_set_reg_vector(struct kvm_vcpu *vcpu,
>         void *reg_addr;
>         int rc;
>
> -       if (!riscv_isa_extension_available(isa, v))
> +       if (!riscv_isa_extension_available(isa, V))
>                 return -ENOENT;
>
>         if (reg_num == KVM_REG_RISCV_VECTOR_CSR_REG(vlenb)) {
>
> --
> 2.43.0
>

Reply via email to