Re: [RFC PATCH] riscv: kvm: return SBI_ERR_FAILURE for PMU shmem OOM
Osama Abdelkader <[email protected]>
| Newsgroups | org.infradead.lists.kvm-riscv,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <agYJHrUHeSq_m788@osama> |
On Thu, May 14, 2026 at 07:13:04PM +0530, Anup Patel wrote: > On Thu, Apr 16, 2026 at 3:40 AM Osama Abdelkader > <[email protected]> wrote: > > > > kvm_riscv_vcpu_pmu_snapshot_set_shmem() and kvm_riscv_vcpu_pmu_event_info() > > returned -ENOMEM from the SBI extension handler, which caused > > kvm_riscv_vcpu_sbi_ecall() to abort KVM_RUN and surface the error to > > userspace instead of completing the ECALL with a negative SBI error in a0. > > Use SBI_ERR_FAILURE and the normal retdata path, matching other PMU > > handlers and kvm_sbi_ext_pmu_handler comment. > > > > Signed-off-by: Osama Abdelkader <[email protected]> > > Split this into two patches where: > > 1) One patch fixing kvm_riscv_vcpu_pmu_snapshot_set_shmem() > 2) Second patch fixing kvm_riscv_vcpu_pmu_event_info() > > Make sure to add Fixes tag in both patches. > > Regards, > Anup Thanks Anup for the review, I just did that. Regards, Osama > > > --- > > arch/riscv/kvm/vcpu_pmu.c | 12 ++++++++---- > > 1 file changed, 8 insertions(+), 4 deletions(-) > > > > diff --git a/arch/riscv/kvm/vcpu_pmu.c b/arch/riscv/kvm/vcpu_pmu.c > > index e873430e596b..f36b099f447c 100644 > > --- a/arch/riscv/kvm/vcpu_pmu.c > > +++ b/arch/riscv/kvm/vcpu_pmu.c > > @@ -435,8 +435,10 @@ int kvm_riscv_vcpu_pmu_snapshot_set_shmem(struct kvm_vcpu *vcpu, unsigned long s > > } > > > > kvpmu->sdata = kzalloc(snapshot_area_size, GFP_ATOMIC); > > - if (!kvpmu->sdata) > > - return -ENOMEM; > > + if (!kvpmu->sdata) { > > + sbiret = SBI_ERR_FAILURE; > > + goto out; > > + } > > > > /* No need to check writable slot explicitly as kvm_vcpu_write_guest does it internally */ > > if (kvm_vcpu_write_guest(vcpu, saddr, kvpmu->sdata, snapshot_area_size)) { > > @@ -480,8 +482,10 @@ int kvm_riscv_vcpu_pmu_event_info(struct kvm_vcpu *vcpu, unsigned long saddr_low > > } > > > > einfo = kzalloc(shmem_size, GFP_KERNEL); > > - if (!einfo) > > - return -ENOMEM; > > + if (!einfo) { > > + ret = SBI_ERR_FAILURE; > > + goto out; > > + } > > > > ret = kvm_vcpu_read_guest(vcpu, shmem, einfo, shmem_size); > > if (ret) { > > -- > > 2.43.0 > > -- kvm-riscv mailing list [email protected] http://lists.infradead.org/mailman/listinfo/kvm-riscv