Re: [RFC PATCH] riscv: kvm: return SBI_ERR_FAILURE for PMU shmem OOM

Anup Patel <[email protected]>
Newsgroups org.infradead.lists.kvm-riscv,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel
Message-ID <CAAhSdy3LpnWtc9iTnND2ez4WK8WJUF_edYaDfD9Nd8_F3dPJFg@mail.gmail.com>
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

> ---
>  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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.