Skip to content

Commit 45700a7

Browse files
committed
RISC-V: KVM: Fix error code returned for Smstateen ONE_REG
Return -ENOENT for Smstateen ONE_REG when: 1) Smstateen is not enabled for a VCPU 2) ONE_REG id is out of range This will make Smstateen ONE_REG error codes consistent with other ONE_REG interfaces of KVM RISC-V. Fixes: c04913f ("RISCV: KVM: Add sstateen0 to ONE_REG") Signed-off-by: Anup Patel <anup.patel@oss.qualcomm.com> Link: https://lore.kernel.org/r/20260120080013.2153519-2-anup.patel@oss.qualcomm.com Signed-off-by: Anup Patel <anup@brainfault.org>
1 parent 2dda6a9 commit 45700a7

1 file changed

Lines changed: 8 additions & 10 deletions

File tree

arch/riscv/kvm/vcpu_onereg.c

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -565,8 +565,10 @@ static inline int kvm_riscv_vcpu_smstateen_set_csr(struct kvm_vcpu *vcpu,
565565
unsigned long regs_max = sizeof(struct kvm_riscv_smstateen_csr) /
566566
sizeof(unsigned long);
567567

568+
if (!riscv_isa_extension_available(vcpu->arch.isa, SMSTATEEN))
569+
return -ENOENT;
568570
if (reg_num >= regs_max)
569-
return -EINVAL;
571+
return -ENOENT;
570572

571573
reg_num = array_index_nospec(reg_num, regs_max);
572574

@@ -582,8 +584,10 @@ static int kvm_riscv_vcpu_smstateen_get_csr(struct kvm_vcpu *vcpu,
582584
unsigned long regs_max = sizeof(struct kvm_riscv_smstateen_csr) /
583585
sizeof(unsigned long);
584586

587+
if (!riscv_isa_extension_available(vcpu->arch.isa, SMSTATEEN))
588+
return -ENOENT;
585589
if (reg_num >= regs_max)
586-
return -EINVAL;
590+
return -ENOENT;
587591

588592
reg_num = array_index_nospec(reg_num, regs_max);
589593

@@ -615,10 +619,7 @@ static int kvm_riscv_vcpu_get_reg_csr(struct kvm_vcpu *vcpu,
615619
rc = kvm_riscv_vcpu_aia_get_csr(vcpu, reg_num, &reg_val);
616620
break;
617621
case KVM_REG_RISCV_CSR_SMSTATEEN:
618-
rc = -EINVAL;
619-
if (riscv_has_extension_unlikely(RISCV_ISA_EXT_SMSTATEEN))
620-
rc = kvm_riscv_vcpu_smstateen_get_csr(vcpu, reg_num,
621-
&reg_val);
622+
rc = kvm_riscv_vcpu_smstateen_get_csr(vcpu, reg_num, &reg_val);
622623
break;
623624
default:
624625
rc = -ENOENT;
@@ -660,10 +661,7 @@ static int kvm_riscv_vcpu_set_reg_csr(struct kvm_vcpu *vcpu,
660661
rc = kvm_riscv_vcpu_aia_set_csr(vcpu, reg_num, reg_val);
661662
break;
662663
case KVM_REG_RISCV_CSR_SMSTATEEN:
663-
rc = -EINVAL;
664-
if (riscv_has_extension_unlikely(RISCV_ISA_EXT_SMSTATEEN))
665-
rc = kvm_riscv_vcpu_smstateen_set_csr(vcpu, reg_num,
666-
reg_val);
664+
rc = kvm_riscv_vcpu_smstateen_set_csr(vcpu, reg_num, reg_val);
667665
break;
668666
default:
669667
rc = -ENOENT;

0 commit comments

Comments
 (0)