Re: [PATCH v3 3/4] RISC-V: KVM: Reset the SBI extension when disable it
Anup Patel <[email protected]> Thu, 30 Jul 2026 12:04:45 +0530
| Newsgroups | org.infradead.lists.linux-riscv,org.infradead.lists.kvm-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAAhSdy2dMcuYv=vvVDabxv92OwM6HMU5LuH84Qqu86YZfEDV5Q@mail.gmail.com> |
On Thu, Jul 30, 2026 at 4:55 AM Inochi Amaoto <[email protected]> wrote: > > The SBI extension validation callback can only fix the parameter if > the extension is enabled. However, if the extension is disabled after > modifty some parameters, the state of the extension is still broken. > > Reset the extension when the extension is disabled so it can have > a clear context. > > Signed-off-by: Inochi Amaoto <[email protected]> LGTM. Reviewed-by: Anup Patel <[email protected]> Thanks, Anup > --- > arch/riscv/kvm/vcpu_sbi.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c > index b737e9a7a12a..1c4f874368fb 100644 > --- a/arch/riscv/kvm/vcpu_sbi.c > +++ b/arch/riscv/kvm/vcpu_sbi.c > @@ -221,6 +221,7 @@ static int riscv_vcpu_set_sbi_ext_single(struct kvm_vcpu *vcpu, > { > struct kvm_vcpu_sbi_context *scontext = &vcpu->arch.sbi_context; > const struct kvm_riscv_sbi_extension_entry *sext; > + const struct kvm_vcpu_sbi_extension *ext; > > if (reg_val != 1 && reg_val != 0) > return -EINVAL; > @@ -229,6 +230,12 @@ static int riscv_vcpu_set_sbi_ext_single(struct kvm_vcpu *vcpu, > if (!sext || scontext->ext_status[sext->ext_idx] == KVM_RISCV_SBI_EXT_STATUS_UNAVAILABLE) > return -ENOENT; > > + ext = sext->ext_ptr; > + > + if (!reg_val && scontext->ext_status[sext->ext_idx] == KVM_RISCV_SBI_EXT_STATUS_ENABLED && > + ext->reset) > + ext->reset(vcpu); > + > scontext->ext_status[sext->ext_idx] = (reg_val) ? > KVM_RISCV_SBI_EXT_STATUS_ENABLED : > KVM_RISCV_SBI_EXT_STATUS_DISABLED; > -- > 2.55.0 > _______________________________________________ linux-riscv mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-riscv