[PATCH v5 3/3] RISC-V: KVM: add KVM_CAP_RISCV_SET_HGATP_MODE

Andrew Jones andrew.jones at oss.qualcomm.com
Thu Feb 5 06:55:29 PST 2026


On Thu, Feb 05, 2026 at 09:28:08AM +0800, fangyu.yu at linux.alibaba.com wrote:
> >> From: Fangyu Yu <fangyu.yu at linux.alibaba.com>
> >> 
> >> Add a VM capability that allows userspace to select the G-stage page table
> >> format by setting HGATP.MODE on a per-VM basis.
> >> 
> >> Userspace enables the capability via KVM_ENABLE_CAP, passing the requested
> >> HGATP.MODE in args[0]. The request is rejected with -EINVAL if the mode is
> >> not supported by the host, and with -EBUSY if the VM has already been
> >> committed (e.g. vCPUs have been created or any memslot is populated).
> >> 
> >> KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE) returns a bitmask of the
> >> HGATP.MODE formats supported by the host.
> >> 
> >> Signed-off-by: Fangyu Yu <fangyu.yu at linux.alibaba.com>
> >> ---
> >>  Documentation/virt/kvm/api.rst | 27 +++++++++++++++++++++++++++
> >>  arch/riscv/kvm/vm.c            | 19 +++++++++++++++++--
> >>  include/uapi/linux/kvm.h       |  1 +
> >>  3 files changed, 45 insertions(+), 2 deletions(-)
> >> 
> >> diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst
> >> index 01a3abef8abb..62dc120857c1 100644
> >> --- a/Documentation/virt/kvm/api.rst
> >> +++ b/Documentation/virt/kvm/api.rst
> >> @@ -8765,6 +8765,33 @@ helpful if user space wants to emulate instructions which are not
> >>  This capability can be enabled dynamically even if VCPUs were already
> >>  created and are running.
> >>  
> >> +7.47 KVM_CAP_RISCV_SET_HGATP_MODE
> >> +---------------------------------
> >> +
> >> +:Architectures: riscv
> >> +:Type: VM
> >> +:Parameters: args[0] contains the requested HGATP mode
> >> +:Returns:
> >> +  - 0 on success.
> >> +  - -EINVAL if args[0] is outside the range of HGATP modes supported by the
> >> +    hardware.
> >> +  - -EBUSY if vCPUs have already been created for the VM, if the VM has any
> >> +    non-empty memslots.
> >> +
> >
> >Currently the documentation for KVM_SET_ONE_REG has this for EBUSY
> >
> >  EBUSY    (riscv) changing register value not allowed after the vcpu
> >           has run at least once
> >
> >I suggest we update the KVM_SET_ONE_REG EBUSY description to say
> >
> >(riscv) changing register value not allowed. This may occur after the vcpu
> >has run at least once or when other setup has completed which depends on
> >the value of the register.
> 
> Thanks for the suggestion.
> 
> In this series the HGATP mode is configured via KVM_ENABLE_CAP at the VM level
> (kvm_vm_ioctl_enable_cap), not via KVM_SET_ONE_REG. Updating the KVM_SET_ONE_REG
> -EBUSY description might be misleading since it is vCPU one-reg specific and not
> directly related to this series.

Oh, right. I'm so used to adding registers I forgot we're only adding a
cap...

Thanks,
drew



More information about the linux-riscv mailing list