[{"id":3672764,"web_url":"http://patchwork.ozlabs.org/comment/3672764/","msgid":"<CAAhSdy1dXxdF0pb_r+hS+rdZ21VVxezwaZ=MCMmDD+vRCyRUdA@mail.gmail.com>","list_archive_url":null,"date":"2026-04-02T14:50:21","subject":"Re: [PATCH v7 4/4] RISC-V: KVM: add KVM_CAP_RISCV_SET_HGATP_MODE","submitter":{"id":33417,"url":"http://patchwork.ozlabs.org/api/people/33417/","name":"Anup Patel","email":"anup@brainfault.org"},"content":"On Thu, Apr 2, 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com> wrote:\n>\n> From: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n>\n> Add a VM capability that allows userspace to select the G-stage page table\n> format by setting HGATP.MODE on a per-VM basis.\n>\n> Userspace enables the capability via KVM_ENABLE_CAP, passing the requested\n> HGATP.MODE in args[0]. The request is rejected with -EINVAL if the mode is\n> not supported by the host, and with -EBUSY if the VM has already been\n> committed (e.g. vCPUs have been created or any memslot is populated).\n>\n> KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE) returns a bitmask of the\n> HGATP.MODE formats supported by the host.\n>\n> Signed-off-by: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n> Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com>\n> Reviewed-by: Guo Ren <guoren@kernel.org>\n> ---\n>  Documentation/virt/kvm/api.rst | 27 +++++++++++++++++++++++++++\n>  arch/riscv/kvm/vm.c            | 18 ++++++++++++++++--\n>  include/uapi/linux/kvm.h       |  1 +\n>  3 files changed, 44 insertions(+), 2 deletions(-)\n>\n> diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst\n> index 032516783e96..9d7f6958fa81 100644\n> --- a/Documentation/virt/kvm/api.rst\n> +++ b/Documentation/virt/kvm/api.rst\n> @@ -8902,6 +8902,33 @@ helpful if user space wants to emulate instructions which are not\n>  This capability can be enabled dynamically even if VCPUs were already\n>  created and are running.\n>\n> +7.47 KVM_CAP_RISCV_SET_HGATP_MODE\n> +---------------------------------\n> +\n> +:Architectures: riscv\n> +:Type: VM\n> +:Parameters: args[0] contains the requested HGATP mode\n> +:Returns:\n> +  - 0 on success.\n> +  - -EINVAL if args[0] is outside the range of HGATP modes supported by the\n> +    hardware.\n> +  - -EBUSY if vCPUs have already been created for the VM, if the VM has any\n> +    non-empty memslots.\n> +\n> +This capability allows userspace to explicitly select the HGATP mode for\n> +the VM. The selected mode must be supported by both KVM and hardware. This\n> +capability must be enabled before creating any vCPUs or memslots.\n> +\n> +If this capability is not enabled, KVM will select the default HGATP mode\n> +automatically. The default is the highest HGATP.MODE value supported by\n> +hardware.\n> +\n> +``KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE)`` returns a bitmask of\n> +HGATP.MODE values supported by the host. A return value of 0 indicates that\n> +the capability is not supported. Supported-mode bitmask use HGATP.MODE\n> +encodings as defined by the RISC-V privileged specification, such as Sv39x4\n> +corresponds to HGATP.MODE=8, so userspace should test bitmask & BIT(8).\n> +\n>  8. Other capabilities.\n>  ======================\n>\n> diff --git a/arch/riscv/kvm/vm.c b/arch/riscv/kvm/vm.c\n> index 4d82a886102c..5e82a3ad3ad0 100644\n> --- a/arch/riscv/kvm/vm.c\n> +++ b/arch/riscv/kvm/vm.c\n> @@ -201,6 +201,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n>         case KVM_CAP_VM_GPA_BITS:\n>                 r = kvm_riscv_gstage_gpa_bits(kvm->arch.pgd_levels);\n>                 break;\n> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n> +               r = kvm_riscv_get_hgatp_mode_mask();\n> +               break;\n\nIntroducing a new RISC-V capability looks a bit complex.\nInstead of KVM_CAP_RISCV_SET_HGATP_MODE, we can\nsimply re-use KVM_CAP_VM_GPA_BITS.\n\nThe kvm_vm_ioctl_check_extension() for KVM_CAP_VM_GPA_BITS\nreturn number of GPA bits which in-directly implies the underlying\nhgatp.MODE. As we know, if it return 59 bits GPA then it means\nSv57x4 is the selected hgatp.MODE and Sv48x4 and Sv39x4 modes\nare also supported as-per RISC-V privileged specification.\n\nThe kvm_vm_ioctl_enable_cap() for KVM_CAP_VM_GPA_BITS\nwill take the desired number of GPA bits and downsize the selected\nhgatp.MODE. For example, if user-space ask GPA bits <= 50 and\nGPA bits > 41 then we select Sv48x4. If user-space ask GPA\nbits <= 41 then we select Sv39x4. If user-space ask GPA bits <= 59\nand GPA bits > 50 then we select Sv57x4.\n\n>         default:\n>                 r = 0;\n>                 break;\n> @@ -211,12 +214,23 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n>\n>  int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)\n>  {\n> +       if (cap->flags)\n> +               return -EINVAL;\n> +\n>         switch (cap->cap) {\n>         case KVM_CAP_RISCV_MP_STATE_RESET:\n> -               if (cap->flags)\n> -                       return -EINVAL;\n>                 kvm->arch.mp_state_reset = true;\n>                 return 0;\n> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n> +               if (!kvm_riscv_hgatp_mode_is_valid(cap->args[0]))\n> +                       return -EINVAL;\n> +\n> +               if (kvm->created_vcpus || !kvm_are_all_memslots_empty(kvm))\n> +                       return -EBUSY;\n> +#ifdef CONFIG_64BIT\n> +               kvm->arch.pgd_levels = 3 + cap->args[0] - HGATP_MODE_SV39X4;\n> +#endif\n> +               return 0;\n>         default:\n>                 return -EINVAL;\n>         }\n> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h\n> index 80364d4dbebb..a74a80fd4046 100644\n> --- a/include/uapi/linux/kvm.h\n> +++ b/include/uapi/linux/kvm.h\n> @@ -989,6 +989,7 @@ struct kvm_enable_cap {\n>  #define KVM_CAP_ARM_SEA_TO_USER 245\n>  #define KVM_CAP_S390_USER_OPEREXEC 246\n>  #define KVM_CAP_S390_KEYOP 247\n> +#define KVM_CAP_RISCV_SET_HGATP_MODE 248\n>\n>  struct kvm_irq_routing_irqchip {\n>         __u32 irqchip;\n> --\n> 2.50.1\n>\n\nRegards,\nAnup","headers":{"Return-Path":"\n <kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=gkwbz36a;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=brainfault-org.20230601.gappssmtp.com\n header.i=@brainfault-org.20230601.gappssmtp.com header.a=rsa-sha256\n header.s=20230601 header.b=Zu9uZJP1;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fmlCK6zXfz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 01:50:37 +1100 (AEDT)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8JNU-00000000NXW-0qvm;\n\tThu, 02 Apr 2026 14:50:36 +0000","from mail-oo1-xc34.google.com ([2607:f8b0:4864:20::c34])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8JNR-00000000NWn-2vOL\n\tfor kvm-riscv@lists.infradead.org;\n\tThu, 02 Apr 2026 14:50:34 +0000","by mail-oo1-xc34.google.com with SMTP id\n 006d021491bc7-6811db37922so311979eaf.3\n        for <kvm-riscv@lists.infradead.org>;\n Thu, 02 Apr 2026 07:50:33 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From:\n\tIn-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=WNqSN+rwAEI315mD0bJnJclN5u+4AZetVPIpUwGF0uI=; b=gkwbz36agm/O72\n\tPQRAJSuz3kHaoGJZ238gxKZIqsfLARUYQjauwe2Oc0SCr2KQtx8T0u0Xk4IKVMbl6HkDZmRQ05T5I\n\tHct6ghFzqx7MEk9od49UdQDP8a8ncmiOg5QAnFtYuZIjun8Iy2cTzIHAflxu4P/dAlv1KjBQZBKv9\n\th+4XZ8NXwWsk9jb8PI/dKqcB0mQvU0vTKKW9csvEOpmjKX1p59qeRDlNNOY9KdIXtWgTZzVloZI9H\n\tH6B/m2+b84H9JfL6xPFg6MWssuHTraO0Mcn0c6i05Vvsx5zPp+idNHtMauWuIFid1Ar14E2X0kBOy\n\tFy6w+Jq9WA8a+TlcSb+w==;","v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=brainfault-org.20230601.gappssmtp.com; s=20230601; t=1775141433;\n x=1775746233; darn=lists.infradead.org;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=za6pvBAfLHdL3QlDjUc6Bu/xHQp9xLt2WtsbUx+6jAc=;\n        b=Zu9uZJP1fDw5BGukaShmk9bu41zMcEl68wbnNaK1uehpB2ODYN4BdMFa9AQskvaKFH\n         VybUtpwyMG0zLlIZpDch1WBVz862E+WGuIgX3XhYtoMh6PRDWdoKjpEJpALpCr/Yd2Xg\n         XAf/FmJXbBh6MkR8Eq0s679XaXbDHoeGTf4ikfg+U0IgO2apK3k4gXq3FviooChNib1D\n         ZJlC+ulfBBPqfGU2GSqN1wOpzsJ5dX/gzix3US3Wc+0ZvcTd8Avi7GVp5+hyE8gu/do4\n         FL6lqz3QcPp1NerdXz4WNHDaEx3ov8ph2bi4yhA91yA0U/B+0c52/5QVpHLkIyXL2p77\n         +lcA=="],"ARC-Seal":"i=1; a=rsa-sha256; t=1775141433; cv=none;\n        d=google.com; s=arc-20240605;\n        b=TPSQOjeUJz9BqqmsPqqM++zUY1Z8vZKOVja2gG3AK9cIXuMAx5/cCqin415D9n9orN\n         Es7fJ+a3Ztj+TM6ymnrejXBorgzB3evScvvUs9AyU0J4jU8yxqjzwVM9euvwt4hyzbzO\n         pLCPJugOIlHm7XRHYDsoXVLmow3iv1EsQTAEg8KCBwymrwM4duyf31Cwiusu0wCmlr2Q\n         6hQw3b2mfLbFzdqUhLHvdWtc/79NejgbfU1JqCBstlQ7q0xqf2QvYyLPp9HadcxJR9+W\n         /SAVxY5GVTb9YujITsRTDGtvGxB/QThbKNUicg/ZJBHVsUNjR766KtPRpBhtpQLE63K0\n         jenA==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:dkim-signature;\n        bh=za6pvBAfLHdL3QlDjUc6Bu/xHQp9xLt2WtsbUx+6jAc=;\n        fh=nM9imlWv4avUByxkBVz0/Mwnclr0/tC19CzLG0t32EA=;\n        b=GzFFlFIyb5FRGHBubRDKAM5Je/ZJTm5zohHdNMGheQLUHAWooUPoxZHpuRXrEKja7r\n         d9P63kT0DEy2RwHQrNPNkAKZUGMjouJf3PyNxBPwZBu6wi3u3d02BgoADRZA0JZX8rIJ\n         Fdct4SxN+T93nUKtfg+gta0een9TKPhw9dMeF+VQl6i4F+pGYGwD/vVM7aUANVm2cudO\n         COdtZhRM3s9YwHaiP0rNRBuwSMfgmtqPN24TdxXDeQhQ3qaNlLHOg/Q3F9B31a/lqplE\n         O76muxIu8Uj8eO8T2eJ1nBj5NNgAgsKhh03QneEkKEtwTeZ5Q9gZL1Hzla7GJfVMy0rr\n         ZemA==;\n        darn=lists.infradead.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1775141433; x=1775746233;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n         :to:cc:subject:date:message-id:reply-to;\n        bh=za6pvBAfLHdL3QlDjUc6Bu/xHQp9xLt2WtsbUx+6jAc=;\n        b=AfwhGItRa1ldLt5a20hgvrhjqgVQdyqIdp/IMCqLjCzd9AZEH3VBsv5wymviky9UV4\n         3Gpzc2Ogv5Iesi1OpWdrjKLpOKLJn2aXHkvAIhPrCt6JsSSy6OVBAgbKmPm2XwR22bvB\n         taUTrzpXfh1/QEsL/lVGQbxvfOYeK68mS4l4/2wEevpU7pqB87fvsPXTe5fBXj37amX/\n         rhGby4VNxq8U2cyWdJVAnnWL/13jL/G6s9v+KZQKZFyMFkkv7SKqojqKGKjAmkr6tiJS\n         kmziab1Rn14CpCVl2kn1zM2mLoup4TUuFN+TgvzD20NOpeJy11jzIzT0h4UAYyDLG0En\n         F2dw==","X-Forwarded-Encrypted":"i=1;\n AJvYcCXE1fiL4xB1o5BE2lp2h5S9vucdBVrU4+d9owzULigv0fKX3ioWcuCQWqZUiVyyVMBlqIXN3J9M370=@lists.infradead.org","X-Gm-Message-State":"AOJu0YzOtlBTFVZh/ZsMHcZD4G/WgbIJJzbHsZiwtHOHpbweyTslUBh5\n\t0IfuR0QM8vC6mHn1IpZTFwENnKY1Ja5lyjZSVKvV4y3vO1QvFexeTdRduDkATmrd1HE6iUtZg/H\n\tSLtBFsi1Zge5v/zQ9mKxBtPuIkId8oRmZmkHKhVlbWA==","X-Gm-Gg":"ATEYQzw2rc157P9G8GwVubjWKFC+K5o1dTInFyyXWwfwqQOa3GDycimf1SdGLHLylY1\n\t5OYlTuyNUgUHOzz9RW3BH4e4S2OJxNWlMZyOcJZynFXGhvLwA7xVGKOKqmkAXlZ2OQPfkCqA9TR\n\tBhj5x6LwrfvjH6786TehS0eIXgw65FRzW4FCwl1DhdDVTVNo3Qk6oS3rNDRQGPUIs/RAM/z/hQc\n\t64qEEn/U3oLShgiDqkUeItPmQJWYLVldfZgHTlVHgddSbhUQk53Ta6deEnscTJ+HjWCwkn7tlia\n\tsXFKqSqQtTdrLzg+1i9Wp9OWkEzualTo3JTxpMeXUzUZrtJlbbU2DXApV4SlXzGzwr9e6I+nBzJ\n\txFy/kUexXRxd4XfhMyIF3D82KMw==","X-Received":"by 2002:a05:6820:f02d:b0:67c:2d5e:e9dd with SMTP id\n 006d021491bc7-680a7a68576mr2046653eaf.41.1775141432576; Thu, 02 Apr 2026\n 07:50:32 -0700 (PDT)","MIME-Version":"1.0","References":"<20260402132303.6252-1-fangyu.yu@linux.alibaba.com>\n <20260402132303.6252-5-fangyu.yu@linux.alibaba.com>","In-Reply-To":"<20260402132303.6252-5-fangyu.yu@linux.alibaba.com>","From":"Anup Patel <anup@brainfault.org>","Date":"Thu, 2 Apr 2026 20:20:21 +0530","X-Gm-Features":"AQROBzDsAUAZSEerDJEeGwby7bjL0ghYgE-l4zOLT0yiweIOZblDgrBFsbDEbI0","Message-ID":"\n <CAAhSdy1dXxdF0pb_r+hS+rdZ21VVxezwaZ=MCMmDD+vRCyRUdA@mail.gmail.com>","Subject":"Re: [PATCH v7 4/4] RISC-V: KVM: add KVM_CAP_RISCV_SET_HGATP_MODE","To":"fangyu.yu@linux.alibaba.com","Cc":"pbonzini@redhat.com, corbet@lwn.net, atish.patra@linux.dev,\n pjw@kernel.org,\n\tpalmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr,\n\tskhan@linuxfoundation.org, guoren@kernel.org, radim.krcmar@oss.qualcomm.com,\n\tandrew.jones@oss.qualcomm.com, linux-doc@vger.kernel.org,\n kvm@vger.kernel.org,\n\tkvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org,\n\tlinux-kernel@vger.kernel.org","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260402_075033_768060_B63BC79B ","X-CRM114-Status":"GOOD (  28.63  )","X-Spam-Score":"-1.9 (-)","X-Spam-Report":"Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  On Thu, Apr 2,\n 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com>\n    wrote: > > From: Fangyu Yu <fangyu.yu@linux.alibaba.com> > > Add a VM\n capability\n    that allows userspace to select the G-stage page table > f [...]\n Content analysis details:   (-1.9 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/, no\n                             trust\n                             [2607:f8b0:4864:20:0:0:0:c34 listed in]\n                             [list.dnswl.org]\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n  0.0 SPF_NONE               SPF: sender does not publish an SPF Record\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]","X-BeenThere":"kvm-riscv@lists.infradead.org","X-Mailman-Version":"2.1.34","Precedence":"list","List-Id":"<kvm-riscv.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/kvm-riscv/>","List-Post":"<mailto:kvm-riscv@lists.infradead.org>","List-Help":"<mailto:kvm-riscv-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=subscribe>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}},{"id":3672849,"web_url":"http://patchwork.ozlabs.org/comment/3672849/","msgid":"<DHIVQI1DY4MK.27YZ2NPDXF5WM@oss.qualcomm.com>","list_archive_url":null,"date":"2026-04-02T18:27:33","subject":"Re: [PATCH v7 4/4] RISC-V: KVM: add KVM_CAP_RISCV_SET_HGATP_MODE","submitter":{"id":92440,"url":"http://patchwork.ozlabs.org/api/people/92440/","name":"Radim Krčmář","email":"radim.krcmar@oss.qualcomm.com"},"content":"2026-04-02T21:23:03+08:00, <fangyu.yu@linux.alibaba.com>:\n> From: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n>\n> Add a VM capability that allows userspace to select the G-stage page table\n> format by setting HGATP.MODE on a per-VM basis.\n>\n> Userspace enables the capability via KVM_ENABLE_CAP, passing the requested\n> HGATP.MODE in args[0]. The request is rejected with -EINVAL if the mode is\n> not supported by the host, and with -EBUSY if the VM has already been\n> committed (e.g. vCPUs have been created or any memslot is populated).\n>\n> KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE) returns a bitmask of the\n> HGATP.MODE formats supported by the host.\n>\n> Signed-off-by: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n> Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com>\n> Reviewed-by: Guo Ren <guoren@kernel.org>\n> ---\n> diff --git a/arch/riscv/kvm/vm.c b/arch/riscv/kvm/vm.c\n> @@ -211,12 +214,23 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n>  \n>  int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)\n>  {\n> +\tcase KVM_CAP_RISCV_SET_HGATP_MODE:\n> +\t\tif (!kvm_riscv_hgatp_mode_is_valid(cap->args[0]))\n> +\t\t\treturn -EINVAL;\n> +\n> +\t\tif (kvm->created_vcpus || !kvm_are_all_memslots_empty(kvm))\n> +\t\t\treturn -EBUSY;\n\nSince multiple VM ioctls can execute concurrently, I would protect\ncreated_vcpus by kvm->lock and kvm_are_all_memslots_empty by\nkvm->slots_lock.\n\nThanks.","headers":{"Return-Path":"\n <kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=IcnIfIS6;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=lIx2Etkh;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=Pzj5FWLG;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fmr1r1nkRz1yGH\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 05:27:44 +1100 (AEDT)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8Mla-00000000ebD-1uci;\n\tThu, 02 Apr 2026 18:27:42 +0000","from mx0a-0031df01.pphosted.com ([205.220.168.131])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8MlX-00000000ea5-1Bse\n\tfor kvm-riscv@lists.infradead.org;\n\tThu, 02 Apr 2026 18:27:40 +0000","from pps.filterd (m0279862.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 632G4ZUF3485895\n\tfor <kvm-riscv@lists.infradead.org>; Thu, 2 Apr 2026 18:27:38 GMT","from mail-qt1-f199.google.com (mail-qt1-f199.google.com\n [209.85.160.199])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d9heeub3d-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <kvm-riscv@lists.infradead.org>; Thu, 02 Apr 2026 18:27:38 +0000 (GMT)","by mail-qt1-f199.google.com with SMTP id\n d75a77b69052e-50b323c43fdso24453131cf.2\n        for <kvm-riscv@lists.infradead.org>;\n Thu, 02 Apr 2026 11:27:38 -0700 (PDT)","from localhost (ip-86-49-249-15.bb.vodafone.cz. [86.49.249.15])\n        by smtp.gmail.com with ESMTPSA id\n a640c23a62f3a-b9c3cff128bsm116569366b.53.2026.04.02.11.27.35\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Thu, 02 Apr 2026 11:27:36 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:In-Reply-To:References:To:Cc:Subject:\n\tFrom:Message-Id:Date:Mime-Version:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=xIFiiiaC6uCTUpPKACzoBbJ7+7ITJE1pitZCb0B5S2Y=; b=IcnIfIS6sPiXdm\n\tqL59S8U4HQs8+Zp2hi5ZHzl0lQXPKqL2QH2Ig4kxb/ilxReaINMUwIXY1q8FdivX3oUuglETF5QZQ\n\tXQbPmAJvTCLZGKA4txkh1AhYu/acLb9lT1MMl5GuWIhhnmf3FibaEQB/x7OaxjTeF6Pi2L3qR5fKn\n\tT7IgCs/KoQJBos8ff0K1iiqNxv2q5Zo56KmFb7OdjoVtQj2QfOPAxTuXcerrrDVS8jBm6BRWak1LQ\n\txpX7azgWz4pby+Bu7e2Cau4ciews6i0aNfB1BV0L8FHreteAc2e/JJSshCFqxLM9Dy3VA+2N1bgZ6\n\tI/5vqeIcCGxy9wr3Z3bw==;","v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcc:content-transfer-encoding:content-type:date:from:in-reply-to\n\t:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=\n\tTU8QdhgxiCPZ6ep8IVIJN8LEHXfbUR2Kb96nB47jKKM=; b=lIx2EtkhreUt/UB8\n\tTcY4yytliO4NobIg6t5Web89r/EuGQJD0W+TOYbx/0zqiBGnYZhjcTYORLrFUcD0\n\tCQ22tk0nHZDuW6ArbPcr2JjmsgUZsP/FKJ1ch1dJN3nvxgiSYtSQP4qs3S23u5Li\n\ty5rxkGDmTD/JDnPxxbp1aPOxqHKGBZA/nzxnvEyDK9Uxzz94QYwWtvt1auGNQP9H\n\tgSSWo3Ph083pXVrIr7q8EkdHbX/vks9hqlkBzadws5X26MR+qekYnRchKF4/XgWN\n\t1yDMjOvziZ4/RyLbnZLN/57PySHYG+W7hbHSPHq0Uvy/7inQ6fTsrYCp0Z1Wxh8G\n\t+LGErA==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=oss.qualcomm.com; s=google; t=1775154458; x=1775759258;\n darn=lists.infradead.org;\n        h=in-reply-to:references:to:cc:subject:from:message-id:date\n         :content-transfer-encoding:mime-version:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=TU8QdhgxiCPZ6ep8IVIJN8LEHXfbUR2Kb96nB47jKKM=;\n        b=Pzj5FWLGYRV4+QcvQHdHT3joX00v6SS8HYUQpCqERpT27Bed/VmIMXejTaZDbFgJ0k\n         9j/hMTXK34qrpT2og3h9O6lbQZQqyTZrmYAhYzf7GEgqo+Lrrs2XFM6W9r+q/yYwm040\n         yUAV1GBv4db4IWfFJznYjAtYdSl3cJVBTVB8aJJ1sdj0xivAyld1HwwH5zHgYrOmhqkQ\n         qwQqfq3qnKxqhie/V0m/0VmDuAC1hE8anCltPQ8fS4kD9iwt4SRdPr23z3LmDeA41DxA\n         Bcm5mrk2nkFqpUEHw4QEcOoAQbRic57b97XxclFzR3wWdouSKfpbrPvXLie2nK0UltRS\n         syJQ=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1775154458; x=1775759258;\n        h=in-reply-to:references:to:cc:subject:from:message-id:date\n         :content-transfer-encoding:mime-version:x-gm-gg:x-gm-message-state\n         :from:to:cc:subject:date:message-id:reply-to;\n        bh=TU8QdhgxiCPZ6ep8IVIJN8LEHXfbUR2Kb96nB47jKKM=;\n        b=FqMZDdGu//NOZyGa5/yKZD8/fHcc030MOwDeTEQMVBH8pr4yXQEJZU5KMDQijZwWjP\n         k9BuGA7Njl/E44WYSSMtDHPVC4y2LRYXg4wuQ9NQpWTQTBplsR/fbffmx8VCpPmpP6KX\n         ySGY4x+Xw8wo4jh6kWNPYV3PeTG/Xs+VKXRe47Yj+PIZFsuDd/C7WJgUWWNwnwjV0051\n         ITaDbgYJA41tWqfznLKoMGUka7HrBfxKbg1il25O7+hLreBX6Jo+G8mJ3ujLZ9hAtCb6\n         mV18TLNH1o0G5m5CqFxd6WcYrujzR5twxh5V6f+773dR/rpbxMuh/PRvG/XQDj0SMyCa\n         eCaA==","X-Forwarded-Encrypted":"i=1;\n AJvYcCXS1OLe0VfL8pCy+cAmxK0rxbUmjg74NZloBhcGLNpAKLmrhxq5ObjfiULlBAp+DbscaDtEyz7WRww=@lists.infradead.org","X-Gm-Message-State":"AOJu0Yy0Kw6DowZj80mYrIKwFAy0633lr2i4ZprDRVEFb3MhYN1zIheU\n\trbh3W0CmuYl2QRArahH+VeC3G55a/Flq/zvn1DP4lrbDpnoUwZpxbN86UJXf25xw0WTQ79aYApi\n\tMB9bkHIGWuKEQuqqfGMNQqYclD+dOsWVhfmNfETrnLokiOhoifZ0Rn5mxFP4R1NjnGJhH","X-Gm-Gg":"ATEYQzyDfaGv/n8l+5nfvbOPCEvRNDeay/zn1fbmEV2b3pOH/uRMT4k1fGioGNSbdE3\n\ttyOEtySB66pTxoE5HQYUOqGqJGpJLtyhQASLBAhIG4z9mcsFDkfKRAEK/W8XMGQi8+b9Popzemb\n\tvh1Wq2ox5ZQ53GGXkCauGg75linkiVwpVrsPKKYFGJlhAfyxZsKC2a3Ixg8jqECqwh/oqvCvEj1\n\tqTuLjxzGjTqBLdmsbvaTx8QVx4FlpNBgFVM74/FABMX84W2NawiSqqPdkIVTObkVDMPuWLt2v8c\n\tBhz/X/ywqYzpU6qb2uPJ/1cvyHqLBdXjrLYhfOj8aPZJ3AhWhvlFQF2GoqSNaNUy18x0sCGZnyL\n\tNcbOJXuJo/GGqbV7MUrHFaijb3Zv1RF7FadmoTDtTp7TTcj4wEZWjjMheVJLY","X-Received":["by 2002:a05:622a:790c:b0:509:15d8:2c0a with SMTP id\n d75a77b69052e-50d62a8e346mr5227601cf.32.1775154457633;\n        Thu, 02 Apr 2026 11:27:37 -0700 (PDT)","by 2002:a05:622a:790c:b0:509:15d8:2c0a with SMTP id\n d75a77b69052e-50d62a8e346mr5227311cf.32.1775154457216;\n        Thu, 02 Apr 2026 11:27:37 -0700 (PDT)"],"Mime-Version":"1.0","Date":"Thu, 02 Apr 2026 20:27:33 +0200","Message-Id":"<DHIVQI1DY4MK.27YZ2NPDXF5WM@oss.qualcomm.com>","From":"=?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= <radim.krcmar@oss.qualcomm.com>","Subject":"Re: [PATCH v7 4/4] RISC-V: KVM: add KVM_CAP_RISCV_SET_HGATP_MODE","Cc":"<guoren@kernel.org>, <andrew.jones@oss.qualcomm.com>,\n        <linux-doc@vger.kernel.org>, <kvm@vger.kernel.org>,\n        <kvm-riscv@lists.infradead.org>, <linux-riscv@lists.infradead.org>,\n        <linux-kernel@vger.kernel.org>","To":"<fangyu.yu@linux.alibaba.com>, <pbonzini@redhat.com>, <corbet@lwn.net>,\n        <anup@brainfault.org>, <atish.patra@linux.dev>, <pjw@kernel.org>,\n        <palmer@dabbelt.com>, <aou@eecs.berkeley.edu>, <alex@ghiti.fr>,\n        <skhan@linuxfoundation.org>","References":"<20260402132303.6252-1-fangyu.yu@linux.alibaba.com>\n <20260402132303.6252-5-fangyu.yu@linux.alibaba.com>","In-Reply-To":"<20260402132303.6252-5-fangyu.yu@linux.alibaba.com>","X-Proofpoint-ORIG-GUID":"XZ_hcbuMw-b4anWEROAm1J54geGlEGQK","X-Authority-Analysis":"v=2.4 cv=VY36/Vp9 c=1 sm=1 tr=0 ts=69ceb51a cx=c_pps\n a=WeENfcodrlLV9YRTxbY/uA==:117 a=fuErIE+P63Icv3tqjtEZBw==:17\n a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=M51BFTxLslgA:10 a=s4-Qcg_JpJYA:10\n a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22\n a=SRrdq9N9AAAA:8 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=YvLePRtRmKwuc7oy_z8A:9\n a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22","X-Proofpoint-GUID":"XZ_hcbuMw-b4anWEROAm1J54geGlEGQK","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDAyMDE2NSBTYWx0ZWRfX2AHy69pMxgOf\n 4WyEVnlGX2WITGituXQxOnPc5wnAkI/XvcFqBkEE6ZryF0nFFSSX7DJZq7qPKJTu9imsBeWakdC\n lVbFUICdp5TGSxehXIHxEXnq2pWGG7zhgGWKysfxhIHVFCKhgCNAC9z1zPWx2Y9KbaIStSzspeY\n DyNDon0ziiqDbT688svCdCI1jY0AJ4re6a9MB6ZzVmw2vDAso6Z6MHdZwbYR9ixpq9YbDibEYOb\n rbBk8OD52Ko23pBgwM4Qd5S6IgrgP3p0C55DK+lBQXD6sAZaZF/F3zWhQptJvlyB+fmr3+bezs8\n lfA7Xea5QDuHtXDJf+lf9qoiqKpk7ZTrXItdiRjWxLI9s998UFByIV92v0u4InzB8mAgrK9G6HA\n /n//QDqPevDHlbgcHLzYIeTjlZek3ClrOs9G9ueXTHpSc+iO4cajLnksPTqkZa2/qYMcETIWSwJ\n dbnj/6SbmrYwmgaEUVQ==","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-02_03,2026-04-02_05,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n phishscore=0 bulkscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501\n malwarescore=0 spamscore=0 adultscore=0 impostorscore=0 suspectscore=0\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020165","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260402_112739_357693_AF24E92C ","X-CRM114-Status":"GOOD (  13.03  )","X-Spam-Score":"-2.8 (--)","X-Spam-Report":"Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  2026-04-02T21:23:03+08:00, <fangyu.yu@linux.alibaba.com>:\n   > From: Fangyu Yu <fangyu.yu@linux.alibaba.com> > > Add a VM capability\n that\n    allows userspace to select the G-stage page table > format by set [...]\n Content analysis details:   (-2.8 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -0.7 RCVD_IN_DNSWL_LOW      RBL: Sender listed at https://www.dnswl.org/, low\n                             trust\n                             [205.220.168.131 listed in list.dnswl.org]\n -0.0 SPF_PASS               SPF: sender matches SPF record\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID_EF          Message has a valid DKIM or DK signature from\n                             envelope-from domain\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n author's\n                             domain\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]\n  0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [205.220.168.131 listed in\n sa-accredit.habeas.com]\n  0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE: The\n                             query to Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                        [205.220.168.131 listed in\n sa-trusted.bondedsender.org]\n  0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                           [205.220.168.131 listed in\n bl.score.senderscore.com]","X-BeenThere":"kvm-riscv@lists.infradead.org","X-Mailman-Version":"2.1.34","Precedence":"list","List-Id":"<kvm-riscv.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/kvm-riscv/>","List-Post":"<mailto:kvm-riscv@lists.infradead.org>","List-Help":"<mailto:kvm-riscv-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}},{"id":3672954,"web_url":"http://patchwork.ozlabs.org/comment/3672954/","msgid":"<20260403013137.32604-1-fangyu.yu@linux.alibaba.com>","list_archive_url":null,"date":"2026-04-03T01:31:37","subject":"Re: Re: [PATCH v7 4/4] RISC-V: KVM: add KVM_CAP_RISCV_SET_HGATP_MODE","submitter":{"id":91416,"url":"http://patchwork.ozlabs.org/api/people/91416/","name":null,"email":"fangyu.yu@linux.alibaba.com"},"content":">On Thu, Apr 2, 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com> wrote:\n>>\n>> From: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n>>\n>> Add a VM capability that allows userspace to select the G-stage page table\n>> format by setting HGATP.MODE on a per-VM basis.\n>>\n>> Userspace enables the capability via KVM_ENABLE_CAP, passing the requested\n>> HGATP.MODE in args[0]. The request is rejected with -EINVAL if the mode is\n>> not supported by the host, and with -EBUSY if the VM has already been\n>> committed (e.g. vCPUs have been created or any memslot is populated).\n>>\n>> KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE) returns a bitmask of the\n>> HGATP.MODE formats supported by the host.\n>>\n>> Signed-off-by: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n>> Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com>\n>> Reviewed-by: Guo Ren <guoren@kernel.org>\n>> ---\n>>  Documentation/virt/kvm/api.rst | 27 +++++++++++++++++++++++++++\n>>  arch/riscv/kvm/vm.c            | 18 ++++++++++++++++--\n>>  include/uapi/linux/kvm.h       |  1 +\n>>  3 files changed, 44 insertions(+), 2 deletions(-)\n>>\n>> diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst\n>> index 032516783e96..9d7f6958fa81 100644\n>> --- a/Documentation/virt/kvm/api.rst\n>> +++ b/Documentation/virt/kvm/api.rst\n>> @@ -8902,6 +8902,33 @@ helpful if user space wants to emulate instructions which are not\n>>  This capability can be enabled dynamically even if VCPUs were already\n>>  created and are running.\n>>\n>> +7.47 KVM_CAP_RISCV_SET_HGATP_MODE\n>> +---------------------------------\n>> +\n>> +:Architectures: riscv\n>> +:Type: VM\n>> +:Parameters: args[0] contains the requested HGATP mode\n>> +:Returns:\n>> +  - 0 on success.\n>> +  - -EINVAL if args[0] is outside the range of HGATP modes supported by the\n>> +    hardware.\n>> +  - -EBUSY if vCPUs have already been created for the VM, if the VM has any\n>> +    non-empty memslots.\n>> +\n>> +This capability allows userspace to explicitly select the HGATP mode for\n>> +the VM. The selected mode must be supported by both KVM and hardware. This\n>> +capability must be enabled before creating any vCPUs or memslots.\n>> +\n>> +If this capability is not enabled, KVM will select the default HGATP mode\n>> +automatically. The default is the highest HGATP.MODE value supported by\n>> +hardware.\n>> +\n>> +``KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE)`` returns a bitmask of\n>> +HGATP.MODE values supported by the host. A return value of 0 indicates that\n>> +the capability is not supported. Supported-mode bitmask use HGATP.MODE\n>> +encodings as defined by the RISC-V privileged specification, such as Sv39x4\n>> +corresponds to HGATP.MODE=8, so userspace should test bitmask & BIT(8).\n>> +\n>>  8. Other capabilities.\n>>  ======================\n>>\n>> diff --git a/arch/riscv/kvm/vm.c b/arch/riscv/kvm/vm.c\n>> index 4d82a886102c..5e82a3ad3ad0 100644\n>> --- a/arch/riscv/kvm/vm.c\n>> +++ b/arch/riscv/kvm/vm.c\n>> @@ -201,6 +201,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n>>         case KVM_CAP_VM_GPA_BITS:\n>>                 r = kvm_riscv_gstage_gpa_bits(kvm->arch.pgd_levels);\n>>                 break;\n>> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n>> +               r = kvm_riscv_get_hgatp_mode_mask();\n>> +               break;\n>\n>Introducing a new RISC-V capability looks a bit complex.\n>Instead of KVM_CAP_RISCV_SET_HGATP_MODE, we can\n>simply re-use KVM_CAP_VM_GPA_BITS.\n>\n>The kvm_vm_ioctl_check_extension() for KVM_CAP_VM_GPA_BITS\n>return number of GPA bits which in-directly implies the underlying\n>hgatp.MODE. As we know, if it return 59 bits GPA then it means\n>Sv57x4 is the selected hgatp.MODE and Sv48x4 and Sv39x4 modes\n>are also supported as-per RISC-V privileged specification.\n>\n>The kvm_vm_ioctl_enable_cap() for KVM_CAP_VM_GPA_BITS\n>will take the desired number of GPA bits and downsize the selected\n>hgatp.MODE. For example, if user-space ask GPA bits <= 50 and\n>GPA bits > 41 then we select Sv48x4. If user-space ask GPA\n>bits <= 41 then we select Sv39x4. If user-space ask GPA bits <= 59\n>and GPA bits > 50 then we select Sv57x4.\n>\n\nThanks, that makes sense.\n\nIn v8 I’ll drop KVM_CAP_RISCV_SET_HGATP_MODE and re-use KVM_CAP_VM_GPA_BITS\nfor both discovery and selection.\n\nThanks,\nFangyu\n\n>>         default:\n>>                 r = 0;\n>>                 break;\n>> @@ -211,12 +214,23 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n>>\n>>  int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)\n>>  {\n>> +       if (cap->flags)\n>> +               return -EINVAL;\n>> +\n>>         switch (cap->cap) {\n>>         case KVM_CAP_RISCV_MP_STATE_RESET:\n>> -               if (cap->flags)\n>> -                       return -EINVAL;\n>>                 kvm->arch.mp_state_reset = true;\n>>                 return 0;\n>> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n>> +               if (!kvm_riscv_hgatp_mode_is_valid(cap->args[0]))\n>> +                       return -EINVAL;\n>> +\n>> +               if (kvm->created_vcpus || !kvm_are_all_memslots_empty(kvm))\n>> +                       return -EBUSY;\n>> +#ifdef CONFIG_64BIT\n>> +               kvm->arch.pgd_levels = 3 + cap->args[0] - HGATP_MODE_SV39X4;\n>> +#endif\n>> +               return 0;\n>>         default:\n>>                 return -EINVAL;\n>>         }\n>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h\n>> index 80364d4dbebb..a74a80fd4046 100644\n>> --- a/include/uapi/linux/kvm.h\n>> +++ b/include/uapi/linux/kvm.h\n>> @@ -989,6 +989,7 @@ struct kvm_enable_cap {\n>>  #define KVM_CAP_ARM_SEA_TO_USER 245\n>>  #define KVM_CAP_S390_USER_OPEREXEC 246\n>>  #define KVM_CAP_S390_KEYOP 247\n>> +#define KVM_CAP_RISCV_SET_HGATP_MODE 248\n>>\n>>  struct kvm_irq_routing_irqchip {\n>>         __u32 irqchip;\n>> --\n>> 2.50.1\n>>\n>\n>Regards,\n>Anup","headers":{"Return-Path":"\n <kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=VZa1Thg5;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=linux.alibaba.com header.i=@linux.alibaba.com\n header.a=rsa-sha256 header.s=default header.b=tKaFuDCC;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fn1RK2g63z1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 12:31:57 +1100 (AEDT)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8TO7-000000013RQ-2hbd;\n\tFri, 03 Apr 2026 01:31:55 +0000","from out30-101.freemail.mail.aliyun.com ([115.124.30.101])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8TO3-000000013QF-18LM;\n\tFri, 03 Apr 2026 01:31:53 +0000","from localhost.localdomain(mailfrom:fangyu.yu@linux.alibaba.com\n fp:SMTPD_---0X0IV4qf_1775179902 cluster:ay36)\n          by smtp.aliyun-inc.com;\n          Fri, 03 Apr 2026 09:31:43 +0800"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:\n\tMessage-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=hCPymucSqLs4vvPVNLzAy/Wv1LM2XjcMA00QmO3PFhs=; b=VZa1Thg5p0x3gZ\n\tFQSPQREsNNzW4R1zet9gJcvK4xHbCO7fEADCatZh2VZBvakHmuxMQH6TWQpiU2T6GcDonBIAAnQU+\n\tdiAgTpW9WmrNOSYea8zoqBnr4qg5Cruy3Sjsn/PapP6Jf3CzNOWbipd8WnCQqgWXGDrHXT/mqxqzy\n\t6H5zabIPJ1BegHj3W89S1ODFoJiSkRPC9vn/F77qnjeYwpWlPzlVyBsxThyp6Wff6e1eIEWVksSP8\n\t3X+3iQek658peNCK3/rVKKPCyMcaslvGXR/rwX2l+Gbp2XXb96HoGSUb0VRih+H5TpK5qyeZT/pdx\n\tPUQOdWfjG/bLz+Z6tgMQ==;","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linux.alibaba.com; s=default;\n\tt=1775179905; h=From:To:Subject:Date:Message-Id:MIME-Version:Content-Type;\n\tbh=M+qCrzuXjzCg6dbRyJgE26YGs/aoiqwjPjQvm1evl3o=;\n\tb=tKaFuDCCorMU3BGZN52g21QEE6zn6esi+nMFn47RDCqrjWEgIAUpdsQB3f+NiRllEROnTn5I8rl7WdnBxzAJgIoEg5iaCZMLhJ6lH9wdo5nxS98WKHFkQnNZZ3qm1Um3KSWa5Z72DDAacKbI+GLShJSoIa6XDCpGrp8zIt09+cQ="],"X-Alimail-AntiSpam":"\n AC=PASS;BC=-1|-1;BR=01201311R171e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=maildocker-contentspam033032089153;MF=fangyu.yu@linux.alibaba.com;NM=1;PH=DS;RN=18;SR=0;TI=SMTPD_---0X0IV4qf_1775179902;","From":"fangyu.yu@linux.alibaba.com","To":"anup@brainfault.org","Cc":"alex@ghiti.fr,\n\tandrew.jones@oss.qualcomm.com,\n\taou@eecs.berkeley.edu,\n\tatish.patra@linux.dev,\n\tcorbet@lwn.net,\n\tfangyu.yu@linux.alibaba.com,\n\tguoren@kernel.org,\n\tkvm-riscv@lists.infradead.org,\n\tkvm@vger.kernel.org,\n\tlinux-doc@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tlinux-riscv@lists.infradead.org,\n\tpalmer@dabbelt.com,\n\tpbonzini@redhat.com,\n\tpjw@kernel.org,\n\tradim.krcmar@oss.qualcomm.com,\n\tskhan@linuxfoundation.org","Subject":"Re: Re: [PATCH v7 4/4] RISC-V: KVM: add KVM_CAP_RISCV_SET_HGATP_MODE","Date":"Fri,  3 Apr 2026 09:31:37 +0800","Message-Id":"<20260403013137.32604-1-fangyu.yu@linux.alibaba.com>","X-Mailer":"git-send-email 2.39.3 (Apple Git-146)","In-Reply-To":"\n <CAAhSdy1dXxdF0pb_r+hS+rdZ21VVxezwaZ=MCMmDD+vRCyRUdA@mail.gmail.com>","References":"\n <CAAhSdy1dXxdF0pb_r+hS+rdZ21VVxezwaZ=MCMmDD+vRCyRUdA@mail.gmail.com>","MIME-Version":"1.0","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260402_183152_201885_08498725 ","X-CRM114-Status":"GOOD (  20.68  )","X-Spam-Score":"-17.6 (-----------------)","X-Spam-Report":"Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  >On Thu, Apr 2,\n 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com>\n    wrote: >> >> From: Fangyu Yu <fangyu.yu@linux.alibaba.com> >> >> Add a VM\n    capability that allows userspace to select the G-stage page tabl [...]\n Content analysis details:   (-17.6 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/, no\n                             trust\n                             [115.124.30.101 listed in list.dnswl.org]\n  0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [115.124.30.101 listed in sa-accredit.habeas.com]\n  0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE: The\n                             query to Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                         [115.124.30.101 listed in\n sa-trusted.bondedsender.org]\n  0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                            [115.124.30.101 listed in\n bl.score.senderscore.com]\n -0.0 SPF_PASS               SPF: sender matches SPF record\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n -7.5 USER_IN_DEF_DKIM_WL    From: address is in the default DKIM welcome-list\n -7.5 USER_IN_DEF_SPF_WL     From: address is in the default SPF welcome-list\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID_EF          Message has a valid DKIM or DK signature from\n                             envelope-from domain\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n author's\n                             domain\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]\n -0.5 ENV_AND_HDR_SPF_MATCH  Env and Hdr From used in default SPF WL Match\n  0.0 UNPARSEABLE_RELAY      Informational: message has unparseable relay\n lines","X-BeenThere":"kvm-riscv@lists.infradead.org","X-Mailman-Version":"2.1.34","Precedence":"list","List-Id":"<kvm-riscv.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/kvm-riscv/>","List-Post":"<mailto:kvm-riscv@lists.infradead.org>","List-Help":"<mailto:kvm-riscv-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=subscribe>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}},{"id":3672961,"web_url":"http://patchwork.ozlabs.org/comment/3672961/","msgid":"<20260403020249.36676-1-fangyu.yu@linux.alibaba.com>","list_archive_url":null,"date":"2026-04-03T02:02:49","subject":"Re: Re: Re: [PATCH v7 4/4] RISC-V: KVM: add\n KVM_CAP_RISCV_SET_HGATP_MODE","submitter":{"id":91416,"url":"http://patchwork.ozlabs.org/api/people/91416/","name":null,"email":"fangyu.yu@linux.alibaba.com"},"content":">>On Thu, Apr 2, 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com> wrote:\n>>>\n>>> From: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n>>>\n>>> Add a VM capability that allows userspace to select the G-stage page table\n>>> format by setting HGATP.MODE on a per-VM basis.\n>>>\n>>> Userspace enables the capability via KVM_ENABLE_CAP, passing the requested\n>>> HGATP.MODE in args[0]. The request is rejected with -EINVAL if the mode is\n>>> not supported by the host, and with -EBUSY if the VM has already been\n>>> committed (e.g. vCPUs have been created or any memslot is populated).\n>>>\n>>> KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE) returns a bitmask of the\n>>> HGATP.MODE formats supported by the host.\n>>>\n>>> Signed-off-by: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n>>> Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com>\n>>> Reviewed-by: Guo Ren <guoren@kernel.org>\n>>> ---\n>>>  Documentation/virt/kvm/api.rst | 27 +++++++++++++++++++++++++++\n>>>  arch/riscv/kvm/vm.c            | 18 ++++++++++++++++--\n>>>  include/uapi/linux/kvm.h       |  1 +\n>>>  3 files changed, 44 insertions(+), 2 deletions(-)\n>>>\n>>> diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst\n>>> index 032516783e96..9d7f6958fa81 100644\n>>> --- a/Documentation/virt/kvm/api.rst\n>>> +++ b/Documentation/virt/kvm/api.rst\n>>> @@ -8902,6 +8902,33 @@ helpful if user space wants to emulate instructions which are not\n>>>  This capability can be enabled dynamically even if VCPUs were already\n>>>  created and are running.\n>>>\n>>> +7.47 KVM_CAP_RISCV_SET_HGATP_MODE\n>>> +---------------------------------\n>>> +\n>>> +:Architectures: riscv\n>>> +:Type: VM\n>>> +:Parameters: args[0] contains the requested HGATP mode\n>>> +:Returns:\n>>> +  - 0 on success.\n>>> +  - -EINVAL if args[0] is outside the range of HGATP modes supported by the\n>>> +    hardware.\n>>> +  - -EBUSY if vCPUs have already been created for the VM, if the VM has any\n>>> +    non-empty memslots.\n>>> +\n>>> +This capability allows userspace to explicitly select the HGATP mode for\n>>> +the VM. The selected mode must be supported by both KVM and hardware. This\n>>> +capability must be enabled before creating any vCPUs or memslots.\n>>> +\n>>> +If this capability is not enabled, KVM will select the default HGATP mode\n>>> +automatically. The default is the highest HGATP.MODE value supported by\n>>> +hardware.\n>>> +\n>>> +``KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE)`` returns a bitmask of\n>>> +HGATP.MODE values supported by the host. A return value of 0 indicates that\n>>> +the capability is not supported. Supported-mode bitmask use HGATP.MODE\n>>> +encodings as defined by the RISC-V privileged specification, such as Sv39x4\n>>> +corresponds to HGATP.MODE=8, so userspace should test bitmask & BIT(8).\n>>> +\n>>>  8. Other capabilities.\n>>>  ======================\n>>>\n>>> diff --git a/arch/riscv/kvm/vm.c b/arch/riscv/kvm/vm.c\n>>> index 4d82a886102c..5e82a3ad3ad0 100644\n>>> --- a/arch/riscv/kvm/vm.c\n>>> +++ b/arch/riscv/kvm/vm.c\n>>> @@ -201,6 +201,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n>>>         case KVM_CAP_VM_GPA_BITS:\n>>>                 r = kvm_riscv_gstage_gpa_bits(kvm->arch.pgd_levels);\n>>>                 break;\n>>> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n>>> +               r = kvm_riscv_get_hgatp_mode_mask();\n>>> +               break;\n>>\n>>Introducing a new RISC-V capability looks a bit complex.\n>>Instead of KVM_CAP_RISCV_SET_HGATP_MODE, we can\n>>simply re-use KVM_CAP_VM_GPA_BITS.\n>>\n>>The kvm_vm_ioctl_check_extension() for KVM_CAP_VM_GPA_BITS\n>>return number of GPA bits which in-directly implies the underlying\n>>hgatp.MODE. As we know, if it return 59 bits GPA then it means\n>>Sv57x4 is the selected hgatp.MODE and Sv48x4 and Sv39x4 modes\n>>are also supported as-per RISC-V privileged specification.\n>>\n>>The kvm_vm_ioctl_enable_cap() for KVM_CAP_VM_GPA_BITS\n>>will take the desired number of GPA bits and downsize the selected\n>>hgatp.MODE. For example, if user-space ask GPA bits <= 50 and\n>>GPA bits > 41 then we select Sv48x4. If user-space ask GPA\n>>bits <= 41 then we select Sv39x4. If user-space ask GPA bits <= 59\n>>and GPA bits > 50 then we select Sv57x4.\n>>\n>\n>Thanks, that makes sense.\n>\n>In v8 I’ll drop KVM_CAP_RISCV_SET_HGATP_MODE and re-use KVM_CAP_VM_GPA_BITS\n>for both discovery and selection.\n>\n\nHi Anup,\n\nWhile working on the respin reusing KVM_CAP_VM_GPA_BITS, I realized\na potential ambiguity in CHECK_EXTENSION semantics and wanted to confirm the\nintended ABI before posting v8.\n\nOne concern about the semantics: today KVM_CHECK_EXTENSION(KVM_CAP_VM_GPA_BITS)\non a VM fd may be interpreted as “the GPA bits for this VM” (or at least what\nthis VM can use). If we also use KVM_ENABLE_CAP(KVM_CAP_VM_GPA_BITS) to downsize\nthe selected HGATP.MODE for a particular VM (e.g. to Sv48x4 => 50 bits), then a\nsubsequent CHECK_EXTENSION(KVM_CAP_VM_GPA_BITS) on the same VM fd would return 50.\nUserspace might then assume 50 is the maximum supported by that VM/host and lose\nthe information that the host actually supports 59 (Sv57x4).\n\nThanks,\nFangyu\n\n>Thanks,\n>Fangyu\n>\n>>>         default:\n>>>                 r = 0;\n>>>                 break;\n>>> @@ -211,12 +214,23 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n>>>\n>>>  int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)\n>>>  {\n>>> +       if (cap->flags)\n>>> +               return -EINVAL;\n>>> +\n>>>         switch (cap->cap) {\n>>>         case KVM_CAP_RISCV_MP_STATE_RESET:\n>>> -               if (cap->flags)\n>>> -                       return -EINVAL;\n>>>                 kvm->arch.mp_state_reset = true;\n>>>                 return 0;\n>>> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n>>> +               if (!kvm_riscv_hgatp_mode_is_valid(cap->args[0]))\n>>> +                       return -EINVAL;\n>>> +\n>>> +               if (kvm->created_vcpus || !kvm_are_all_memslots_empty(kvm))\n>>> +                       return -EBUSY;\n>>> +#ifdef CONFIG_64BIT\n>>> +               kvm->arch.pgd_levels = 3 + cap->args[0] - HGATP_MODE_SV39X4;\n>>> +#endif\n>>> +               return 0;\n>>>         default:\n>>>                 return -EINVAL;\n>>>         }\n>>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h\n>>> index 80364d4dbebb..a74a80fd4046 100644\n>>> --- a/include/uapi/linux/kvm.h\n>>> +++ b/include/uapi/linux/kvm.h\n>>> @@ -989,6 +989,7 @@ struct kvm_enable_cap {\n>>>  #define KVM_CAP_ARM_SEA_TO_USER 245\n>>>  #define KVM_CAP_S390_USER_OPEREXEC 246\n>>>  #define KVM_CAP_S390_KEYOP 247\n>>> +#define KVM_CAP_RISCV_SET_HGATP_MODE 248\n>>>\n>>>  struct kvm_irq_routing_irqchip {\n>>>         __u32 irqchip;\n>>> --\n>>> 2.50.1\n>>>\n>>\n>>Regards,\n>>Anup","headers":{"Return-Path":"\n <kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=X4+kNOWZ;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=linux.alibaba.com header.i=@linux.alibaba.com\n header.a=rsa-sha256 header.s=default header.b=UZ/DrhBZ;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fn27V2jp8z1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 13:03:14 +1100 (AEDT)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8TsI-0000000150Z-1FZG;\n\tFri, 03 Apr 2026 02:03:06 +0000","from out30-97.freemail.mail.aliyun.com ([115.124.30.97])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8TsD-00000001508-1y2u;\n\tFri, 03 Apr 2026 02:03:04 +0000","from localhost.localdomain(mailfrom:fangyu.yu@linux.alibaba.com\n fp:SMTPD_---0X0IdJa6_1775181770 cluster:ay36)\n          by smtp.aliyun-inc.com;\n          Fri, 03 Apr 2026 10:02:51 +0800"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:\n\tMessage-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=WJEvrSSUX7xW7yXvSvW/+PBeGgiYTIiFWg0urb0KMSw=; b=X4+kNOWZqRZ6Ns\n\tvZcKbsJVN0vySoW+FsASRobn2xHZ1RV6TJx4DYctPkxZ0Zz1DNG438PmyAoiJDpHILsFRbU9HKNyN\n\tM5/dTJUg4xo36QoNKIGTIXs1EcPaJ7j7C2icch413MWpamF+sTSXOe8G1ce4l/nz+4KfTjOTrakJy\n\tClgK6/0E+efTXiMx+UWReJXIntb/Mbg2sY3skhNuIwpVAuepv/pLnb+dWtTv8tIJvdslJuR6wvot0\n\tvEi4W1I9xy8kFrIESS+/5K8tHxAOSpG0F2gvYpHbgvBwoZeoW2szWDl83C/3Nc03UepLjXT2nk7V3\n\tQCftg56E9B3L7NXFl6lg==;","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linux.alibaba.com; s=default;\n\tt=1775181776; h=From:To:Subject:Date:Message-Id:MIME-Version:Content-Type;\n\tbh=OyHftAN8dhMQg9njDh58Weo7ed5uJBi0NSC4k8bM2NY=;\n\tb=UZ/DrhBZGlpVj6eaYvaAsoMsv5LwL+y70X4n/Cy3ssmSxP+Vjz2/qeaDkEM4AAPa9JMAXv0E0xhkIck7/vavlLTlAc6Xjk3hV56BbNEqCknmMvR20Ojnzt+IJJc5RF7dyFFc5kz+cKLAP5wTTK0062/ghGxwRdyvg49jPIoL/vQ="],"X-Alimail-AntiSpam":"\n AC=PASS;BC=-1|-1;BR=01201311R111e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=maildocker-contentspam033045133197;MF=fangyu.yu@linux.alibaba.com;NM=1;PH=DS;RN=18;SR=0;TI=SMTPD_---0X0IdJa6_1775181770;","From":"fangyu.yu@linux.alibaba.com","To":"fangyu.yu@linux.alibaba.com,\n\tanup@brainfault.org","Cc":"alex@ghiti.fr,\n\tandrew.jones@oss.qualcomm.com,\n\taou@eecs.berkeley.edu,\n\tatish.patra@linux.dev,\n\tcorbet@lwn.net,\n\tguoren@kernel.org,\n\tkvm-riscv@lists.infradead.org,\n\tkvm@vger.kernel.org,\n\tlinux-doc@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tlinux-riscv@lists.infradead.org,\n\tpalmer@dabbelt.com,\n\tpbonzini@redhat.com,\n\tpjw@kernel.org,\n\tradim.krcmar@oss.qualcomm.com,\n\tskhan@linuxfoundation.org","Subject":"Re: Re: Re: [PATCH v7 4/4] RISC-V: KVM: add\n KVM_CAP_RISCV_SET_HGATP_MODE","Date":"Fri,  3 Apr 2026 10:02:49 +0800","Message-Id":"<20260403020249.36676-1-fangyu.yu@linux.alibaba.com>","X-Mailer":"git-send-email 2.39.3 (Apple Git-146)","In-Reply-To":"<20260403013137.32604-1-fangyu.yu@linux.alibaba.com>","References":"<20260403013137.32604-1-fangyu.yu@linux.alibaba.com>","MIME-Version":"1.0","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260402_190302_181844_1B90EC3F ","X-CRM114-Status":"GOOD (  18.12  )","X-Spam-Score":"-17.6 (-----------------)","X-Spam-Report":"Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  >>On Thu, Apr 2,\n 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com>\n    wrote: >>> >>> From: Fangyu Yu <fangyu.yu@linux.alibaba.com> >>> >>> Add\n   a VM capability that allows userspace to select the G-stage page [...]\n Content analysis details:   (-17.6 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n  0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE: The\n                             query to Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                          [115.124.30.97 listed in\n sa-trusted.bondedsender.org]\n  0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [115.124.30.97 listed in sa-accredit.habeas.com]\n -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/, no\n                             trust\n                             [115.124.30.97 listed in list.dnswl.org]\n  0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [115.124.30.97 listed in\n bl.score.senderscore.com]\n -0.0 SPF_PASS               SPF: sender matches SPF record\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n -7.5 USER_IN_DEF_DKIM_WL    From: address is in the default DKIM welcome-list\n -7.5 USER_IN_DEF_SPF_WL     From: address is in the default SPF welcome-list\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID_EF          Message has a valid DKIM or DK signature from\n                             envelope-from domain\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n author's\n                             domain\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]\n -0.5 ENV_AND_HDR_SPF_MATCH  Env and Hdr From used in default SPF WL Match\n  0.0 UNPARSEABLE_RELAY      Informational: message has unparseable relay\n lines","X-BeenThere":"kvm-riscv@lists.infradead.org","X-Mailman-Version":"2.1.34","Precedence":"list","List-Id":"<kvm-riscv.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/kvm-riscv/>","List-Post":"<mailto:kvm-riscv@lists.infradead.org>","List-Help":"<mailto:kvm-riscv-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=subscribe>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}},{"id":3672966,"web_url":"http://patchwork.ozlabs.org/comment/3672966/","msgid":"<20260403025939.43841-1-fangyu.yu@linux.alibaba.com>","list_archive_url":null,"date":"2026-04-03T02:59:39","subject":"Re: Re: [PATCH v7 4/4] RISC-V: KVM: add KVM_CAP_RISCV_SET_HGATP_MODE ","submitter":{"id":91416,"url":"http://patchwork.ozlabs.org/api/people/91416/","name":null,"email":"fangyu.yu@linux.alibaba.com"},"content":">> From: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n>>\n>> Add a VM capability that allows userspace to select the G-stage page table\n>> format by setting HGATP.MODE on a per-VM basis.\n>>\n>> Userspace enables the capability via KVM_ENABLE_CAP, passing the requested\n>> HGATP.MODE in args[0]. The request is rejected with -EINVAL if the mode is\n>> not supported by the host, and with -EBUSY if the VM has already been\n>> committed (e.g. vCPUs have been created or any memslot is populated).\n>>\n>> KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE) returns a bitmask of the\n>> HGATP.MODE formats supported by the host.\n>>\n>> Signed-off-by: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n>> Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com>\n>> Reviewed-by: Guo Ren <guoren@kernel.org>\n>> ---\n>> diff --git a/arch/riscv/kvm/vm.c b/arch/riscv/kvm/vm.c\n>> @@ -211,12 +214,23 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n>>\n>>  int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)\n>>  {\n>> +\tcase KVM_CAP_RISCV_SET_HGATP_MODE:\n>> +\t\tif (!kvm_riscv_hgatp_mode_is_valid(cap->args[0]))\n>> +\t\t\treturn -EINVAL;\n>> +\n>> +\t\tif (kvm->created_vcpus || !kvm_are_all_memslots_empty(kvm))\n>> +\t\t\treturn -EBUSY;\n>\n>Since multiple VM ioctls can execute concurrently, I would protect\n>created_vcpus by kvm->lock and kvm_are_all_memslots_empty by\n>kvm->slots_lock.\n>\n\nAgreed. I’ll protect created_vcpus with kvm->lock and call\nkvm_are_all_memslots_empty() under kvm->slots_lock, following the\nkvm->lock -> kvm->slots_lock ordering in v8.\n\nThanks,\nFangyu\n\n>Thanks.","headers":{"Return-Path":"\n <kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=CLpp6+Yw;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=linux.alibaba.com header.i=@linux.alibaba.com\n header.a=rsa-sha256 header.s=default header.b=B986jNBK;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fn3Np6jzZz1yCs\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 13:59:54 +1100 (AEDT)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8UlE-000000017dC-41n9;\n\tFri, 03 Apr 2026 02:59:52 +0000","from out30-119.freemail.mail.aliyun.com ([115.124.30.119])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8UlA-000000017cV-2mg5;\n\tFri, 03 Apr 2026 02:59:51 +0000","from localhost.localdomain(mailfrom:fangyu.yu@linux.alibaba.com\n fp:SMTPD_---0X0IpQik_1775185180 cluster:ay36)\n          by smtp.aliyun-inc.com;\n          Fri, 03 Apr 2026 10:59:42 +0800"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:\n\tMessage-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=dy9tBXyEBil5LGG9ErngaBvsVPi7LpabSpZajVRHkuo=; b=CLpp6+YwlaPMMz\n\tmrxQXSNcRM5w+y/ZvUA7GJtP7jmRXSJCeBQ7eBAdOkwhp6jqOCT2TlCUMEZsmwWZ3oyhMjHH2ZkRk\n\t2nKgJ/Z8jElXLBuDgImGS1tqh/utaX47ka1ivILsgBVoQ/SKlp8KfpjO0JUPf6ISYgMPBsmEXka5K\n\tL6/uViLrHgClzPKRFqf0TXqddNf5swO9smwZvOjIZF5YGCHIyRjxYJuTBpW+0tiogS1kvFldcc0AE\n\tDXuzXvmVZ+Uo/5/qN1b3rkGZZMo1h2qkVFnClCEGlZXXBF7mjDy068wOqIgGdOhfa9It01WNM6ZeE\n\tnpFbC0tTNQsCY4eFhjsw==;","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linux.alibaba.com; s=default;\n\tt=1775185183; h=From:To:Subject:Date:Message-Id:MIME-Version:Content-Type;\n\tbh=hz8Xf0WjqAmv02QAnNq4g/lk3QXHFKGIGokcVeGTTF4=;\n\tb=B986jNBKMGo1IJA+kIrcLCKVTxNX9SgZ32f9+lYPtIyqtr10HpQ0QlHANsR78PGZZ8uDRt8WU252nkpGo1jwRO+LLaVbGCWwTkXrwy2ab/anNuBwhR/DSapy3dpkdzdHGUkuqzgqJGzdVdXKaN95zxyngCV3px7L5oZ4GyHdmxk="],"X-Alimail-AntiSpam":"\n AC=PASS;BC=-1|-1;BR=01201311R391e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=maildocker-contentspam033037033178;MF=fangyu.yu@linux.alibaba.com;NM=1;PH=DS;RN=18;SR=0;TI=SMTPD_---0X0IpQik_1775185180;","From":"fangyu.yu@linux.alibaba.com","To":"radim.krcmar@oss.qualcomm.com","Cc":"alex@ghiti.fr,\n\tandrew.jones@oss.qualcomm.com,\n\tanup@brainfault.org,\n\taou@eecs.berkeley.edu,\n\tatish.patra@linux.dev,\n\tcorbet@lwn.net,\n\tfangyu.yu@linux.alibaba.com,\n\tguoren@kernel.org,\n\tkvm-riscv@lists.infradead.org,\n\tkvm@vger.kernel.org,\n\tlinux-doc@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tlinux-riscv@lists.infradead.org,\n\tpalmer@dabbelt.com,\n\tpbonzini@redhat.com,\n\tpjw@kernel.org,\n\tskhan@linuxfoundation.org","Subject":"Re: Re: [PATCH v7 4/4] RISC-V: KVM: add KVM_CAP_RISCV_SET_HGATP_MODE ","Date":"Fri,  3 Apr 2026 10:59:39 +0800","Message-Id":"<20260403025939.43841-1-fangyu.yu@linux.alibaba.com>","X-Mailer":"git-send-email 2.39.3 (Apple Git-146)","In-Reply-To":"<DHIVQI1DY4MK.27YZ2NPDXF5WM@oss.qualcomm.com>","References":"<DHIVQI1DY4MK.27YZ2NPDXF5WM@oss.qualcomm.com>","MIME-Version":"1.0","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260402_195949_576980_FD6D78A5 ","X-CRM114-Status":"UNSURE (   6.89  )","X-CRM114-Notice":"Please train this message.","X-Spam-Score":"-17.6 (-----------------)","X-Spam-Report":"Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  >> From: Fangyu Yu <fangyu.yu@linux.alibaba.com> >> >> Add\n    a VM capability that allows userspace to select the G-stage page table >>\n    format by setting HGATP.MODE on a per-VM basis. >> >> Userspace ena [...]    \n Content analysis details:   (-17.6 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/, no\n                             trust\n                             [115.124.30.119 listed in list.dnswl.org]\n  0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [115.124.30.119 listed in sa-accredit.habeas.com]\n  0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE: The\n                             query to Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                         [115.124.30.119 listed in\n sa-trusted.bondedsender.org]\n  0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                            [115.124.30.119 listed in\n bl.score.senderscore.com]\n -0.0 SPF_PASS               SPF: sender matches SPF record\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n -7.5 USER_IN_DEF_DKIM_WL    From: address is in the default DKIM welcome-list\n -7.5 USER_IN_DEF_SPF_WL     From: address is in the default SPF welcome-list\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID_EF          Message has a valid DKIM or DK signature from\n                             envelope-from domain\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n author's\n                             domain\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]\n -0.5 ENV_AND_HDR_SPF_MATCH  Env and Hdr From used in default SPF WL Match\n  0.0 UNPARSEABLE_RELAY      Informational: message has unparseable relay\n lines","X-BeenThere":"kvm-riscv@lists.infradead.org","X-Mailman-Version":"2.1.34","Precedence":"list","List-Id":"<kvm-riscv.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/kvm-riscv/>","List-Post":"<mailto:kvm-riscv@lists.infradead.org>","List-Help":"<mailto:kvm-riscv-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=subscribe>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}},{"id":3672996,"web_url":"http://patchwork.ozlabs.org/comment/3672996/","msgid":"<CAAhSdy2CibJNXJYxCvyofXC3CUpCT5KdricNt2aViRSYCOWrrA@mail.gmail.com>","list_archive_url":null,"date":"2026-04-03T06:19:09","subject":"Re: Re: Re: [PATCH v7 4/4] RISC-V: KVM: add\n KVM_CAP_RISCV_SET_HGATP_MODE","submitter":{"id":33417,"url":"http://patchwork.ozlabs.org/api/people/33417/","name":"Anup Patel","email":"anup@brainfault.org"},"content":"On Fri, Apr 3, 2026 at 7:32 AM <fangyu.yu@linux.alibaba.com> wrote:\n>\n> >>On Thu, Apr 2, 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com> wrote:\n> >>>\n> >>> From: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n> >>>\n> >>> Add a VM capability that allows userspace to select the G-stage page table\n> >>> format by setting HGATP.MODE on a per-VM basis.\n> >>>\n> >>> Userspace enables the capability via KVM_ENABLE_CAP, passing the requested\n> >>> HGATP.MODE in args[0]. The request is rejected with -EINVAL if the mode is\n> >>> not supported by the host, and with -EBUSY if the VM has already been\n> >>> committed (e.g. vCPUs have been created or any memslot is populated).\n> >>>\n> >>> KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE) returns a bitmask of the\n> >>> HGATP.MODE formats supported by the host.\n> >>>\n> >>> Signed-off-by: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n> >>> Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com>\n> >>> Reviewed-by: Guo Ren <guoren@kernel.org>\n> >>> ---\n> >>>  Documentation/virt/kvm/api.rst | 27 +++++++++++++++++++++++++++\n> >>>  arch/riscv/kvm/vm.c            | 18 ++++++++++++++++--\n> >>>  include/uapi/linux/kvm.h       |  1 +\n> >>>  3 files changed, 44 insertions(+), 2 deletions(-)\n> >>>\n> >>> diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst\n> >>> index 032516783e96..9d7f6958fa81 100644\n> >>> --- a/Documentation/virt/kvm/api.rst\n> >>> +++ b/Documentation/virt/kvm/api.rst\n> >>> @@ -8902,6 +8902,33 @@ helpful if user space wants to emulate instructions which are not\n> >>>  This capability can be enabled dynamically even if VCPUs were already\n> >>>  created and are running.\n> >>>\n> >>> +7.47 KVM_CAP_RISCV_SET_HGATP_MODE\n> >>> +---------------------------------\n> >>> +\n> >>> +:Architectures: riscv\n> >>> +:Type: VM\n> >>> +:Parameters: args[0] contains the requested HGATP mode\n> >>> +:Returns:\n> >>> +  - 0 on success.\n> >>> +  - -EINVAL if args[0] is outside the range of HGATP modes supported by the\n> >>> +    hardware.\n> >>> +  - -EBUSY if vCPUs have already been created for the VM, if the VM has any\n> >>> +    non-empty memslots.\n> >>> +\n> >>> +This capability allows userspace to explicitly select the HGATP mode for\n> >>> +the VM. The selected mode must be supported by both KVM and hardware. This\n> >>> +capability must be enabled before creating any vCPUs or memslots.\n> >>> +\n> >>> +If this capability is not enabled, KVM will select the default HGATP mode\n> >>> +automatically. The default is the highest HGATP.MODE value supported by\n> >>> +hardware.\n> >>> +\n> >>> +``KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE)`` returns a bitmask of\n> >>> +HGATP.MODE values supported by the host. A return value of 0 indicates that\n> >>> +the capability is not supported. Supported-mode bitmask use HGATP.MODE\n> >>> +encodings as defined by the RISC-V privileged specification, such as Sv39x4\n> >>> +corresponds to HGATP.MODE=8, so userspace should test bitmask & BIT(8).\n> >>> +\n> >>>  8. Other capabilities.\n> >>>  ======================\n> >>>\n> >>> diff --git a/arch/riscv/kvm/vm.c b/arch/riscv/kvm/vm.c\n> >>> index 4d82a886102c..5e82a3ad3ad0 100644\n> >>> --- a/arch/riscv/kvm/vm.c\n> >>> +++ b/arch/riscv/kvm/vm.c\n> >>> @@ -201,6 +201,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n> >>>         case KVM_CAP_VM_GPA_BITS:\n> >>>                 r = kvm_riscv_gstage_gpa_bits(kvm->arch.pgd_levels);\n> >>>                 break;\n> >>> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n> >>> +               r = kvm_riscv_get_hgatp_mode_mask();\n> >>> +               break;\n> >>\n> >>Introducing a new RISC-V capability looks a bit complex.\n> >>Instead of KVM_CAP_RISCV_SET_HGATP_MODE, we can\n> >>simply re-use KVM_CAP_VM_GPA_BITS.\n> >>\n> >>The kvm_vm_ioctl_check_extension() for KVM_CAP_VM_GPA_BITS\n> >>return number of GPA bits which in-directly implies the underlying\n> >>hgatp.MODE. As we know, if it return 59 bits GPA then it means\n> >>Sv57x4 is the selected hgatp.MODE and Sv48x4 and Sv39x4 modes\n> >>are also supported as-per RISC-V privileged specification.\n> >>\n> >>The kvm_vm_ioctl_enable_cap() for KVM_CAP_VM_GPA_BITS\n> >>will take the desired number of GPA bits and downsize the selected\n> >>hgatp.MODE. For example, if user-space ask GPA bits <= 50 and\n> >>GPA bits > 41 then we select Sv48x4. If user-space ask GPA\n> >>bits <= 41 then we select Sv39x4. If user-space ask GPA bits <= 59\n> >>and GPA bits > 50 then we select Sv57x4.\n> >>\n> >\n> >Thanks, that makes sense.\n> >\n> >In v8 I’ll drop KVM_CAP_RISCV_SET_HGATP_MODE and re-use KVM_CAP_VM_GPA_BITS\n> >for both discovery and selection.\n> >\n>\n> Hi Anup,\n>\n> While working on the respin reusing KVM_CAP_VM_GPA_BITS, I realized\n> a potential ambiguity in CHECK_EXTENSION semantics and wanted to confirm the\n> intended ABI before posting v8.\n>\n> One concern about the semantics: today KVM_CHECK_EXTENSION(KVM_CAP_VM_GPA_BITS)\n> on a VM fd may be interpreted as “the GPA bits for this VM” (or at least what\n> this VM can use). If we also use KVM_ENABLE_CAP(KVM_CAP_VM_GPA_BITS) to downsize\n> the selected HGATP.MODE for a particular VM (e.g. to Sv48x4 => 50 bits), then a\n> subsequent CHECK_EXTENSION(KVM_CAP_VM_GPA_BITS) on the same VM fd would return 50.\n> Userspace might then assume 50 is the maximum supported by that VM/host and lose\n> the information that the host actually supports 59 (Sv57x4).\n\nI think there is no violation of the semantics because we are providing\na way to allow KVM user space change \"the GPA bits for this VM”\nusing KVM_ENABLE_CAP(KVM_CAP_VM_GPA_BITS) so subsequent\nCHECK_EXTENSION(KVM_CAP_VM_GPA_BITS) must return\neffective number of GPA bits visible to the VM.\n\nThe only additional constraint I would enforce is that the\nKVM_ENABLE_CAP(KVM_CAP_VM_GPA_BITS) must\nreturn -EBUSY if any of the Guest VCPUs have\nran_atleast_once set.\n\nRegards,\nAnup\n\n>\n> Thanks,\n> Fangyu\n>\n> >Thanks,\n> >Fangyu\n> >\n> >>>         default:\n> >>>                 r = 0;\n> >>>                 break;\n> >>> @@ -211,12 +214,23 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n> >>>\n> >>>  int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)\n> >>>  {\n> >>> +       if (cap->flags)\n> >>> +               return -EINVAL;\n> >>> +\n> >>>         switch (cap->cap) {\n> >>>         case KVM_CAP_RISCV_MP_STATE_RESET:\n> >>> -               if (cap->flags)\n> >>> -                       return -EINVAL;\n> >>>                 kvm->arch.mp_state_reset = true;\n> >>>                 return 0;\n> >>> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n> >>> +               if (!kvm_riscv_hgatp_mode_is_valid(cap->args[0]))\n> >>> +                       return -EINVAL;\n> >>> +\n> >>> +               if (kvm->created_vcpus || !kvm_are_all_memslots_empty(kvm))\n> >>> +                       return -EBUSY;\n> >>> +#ifdef CONFIG_64BIT\n> >>> +               kvm->arch.pgd_levels = 3 + cap->args[0] - HGATP_MODE_SV39X4;\n> >>> +#endif\n> >>> +               return 0;\n> >>>         default:\n> >>>                 return -EINVAL;\n> >>>         }\n> >>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h\n> >>> index 80364d4dbebb..a74a80fd4046 100644\n> >>> --- a/include/uapi/linux/kvm.h\n> >>> +++ b/include/uapi/linux/kvm.h\n> >>> @@ -989,6 +989,7 @@ struct kvm_enable_cap {\n> >>>  #define KVM_CAP_ARM_SEA_TO_USER 245\n> >>>  #define KVM_CAP_S390_USER_OPEREXEC 246\n> >>>  #define KVM_CAP_S390_KEYOP 247\n> >>> +#define KVM_CAP_RISCV_SET_HGATP_MODE 248\n> >>>\n> >>>  struct kvm_irq_routing_irqchip {\n> >>>         __u32 irqchip;\n> >>> --\n> >>> 2.50.1\n> >>>\n> >>\n> >>Regards,\n> >>Anup","headers":{"Return-Path":"\n <kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=SVYpK9LJ;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=brainfault-org.20251104.gappssmtp.com\n header.i=@brainfault-org.20251104.gappssmtp.com header.a=rsa-sha256\n header.s=20251104 header.b=gTo1EDMY;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fn7q42hTtz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 17:19:28 +1100 (AEDT)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8XsM-00000001Nyr-20d0;\n\tFri, 03 Apr 2026 06:19:26 +0000","from mail-qt1-x82d.google.com ([2607:f8b0:4864:20::82d])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8XsJ-00000001Ny7-36Gc\n\tfor kvm-riscv@lists.infradead.org;\n\tFri, 03 Apr 2026 06:19:25 +0000","by mail-qt1-x82d.google.com with SMTP id\n d75a77b69052e-506bcb23a78so14065901cf.3\n        for <kvm-riscv@lists.infradead.org>;\n Thu, 02 Apr 2026 23:19:23 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From:\n\tIn-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=btxC2RiGT60X9SN1/Qhr46rn4jXSZ94xk0D0bL2/Wd8=; b=SVYpK9LJqU0PZr\n\t8K2za+IC0Msv+GU+G0MW5RNliM1XgALYy8kzvdjjBxvfjaPfklSerEaNyKQA03kSCprfhzdtp74mP\n\tklKG87S18IunMblDQZIHdIbV6Sa0WeQPPDiCVxmrJsxPOXWNZMl7t7SoS5lhtfNj1qAAYrtleeuV9\n\tl/BSI9m2+vwQv/gpz+1YHjxdVoMGYvfjcRB84sDUFuukPVSmKpKQqyc6L6+AgUelAVcu8032++nFi\n\tfuBWIV+gQRZnic3+h6Z2GyIQnUay8EsdBlZaJtqu9yUIcV99K0nYflg0PZidi3Rmo3r32RimbDeGV\n\t9vCJSdqi9/Qw7l5poa9w==;","v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=brainfault-org.20251104.gappssmtp.com; s=20251104; t=1775197162;\n x=1775801962; darn=lists.infradead.org;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=kx6Vr/oJKHrL9MwhUSHyoeKfqKn3quqamoeA29dEegU=;\n        b=gTo1EDMYXsIXY6xtENxZt8zZ1CaQUD411NiaK+7jg0fYSmOwTDrHK6uwztTFYKp0Fe\n         DBL1u/zxrE6nHAKKJmQ+9QdxJYXf3+2ZJtr3m7Csx+QQV9CfMOpIAhZb/JO+AqjRiCVe\n         8W0a+F/JyUvX0gVKi9HxGsGK1k70wCsKUQcJPEGtp06C2jxhJEx/hUhOn3jN0iWsUMpb\n         wQaXwqWWaNQhcCdmk4C5VxEtSGCcvv8D8KfgkIjb7Sb9t8s7WfdxJ5lAcT6dwu3m/D9E\n         Wntky+79+CTPrMSjsaoHGPPd34jewbvgb2JppOuDbtNZ+h/L/0CONx8Aku7eibq1k49s\n         WjwQ=="],"ARC-Seal":"i=1; a=rsa-sha256; t=1775197162; cv=none;\n        d=google.com; s=arc-20240605;\n        b=UiuNzeYqLIcaL4syLdvc4MAoWFclAeyVBTnec4RiYQj1YkAkU8D8nY9wgt+pMKXwIr\n         ZGv5H1sbQKFr+S4Sx6pFiZkWmOsu2xwToN+Y4vVY/oWOLr0wM8Pmb64uzHtEnQwxZ+Yg\n         6c10U6Zo8KbJ/FpJ/O8cqzYPMVFA8ru8DqOrc9QDYEw/Z6sLIYd1X2wr8Rr7UbF0o+/V\n         G+WEYPDM8nlOwwnswOM0rgO+WkmqICZ2cBcN5Pr+3qYOR6x1qXaMu0iYWsojcWfS0Muf\n         GMRGHzVK4xJRF8uktCIcWyXtg0s+Z0IxDYUe8jqSeVf8AU7DrbpHg5Gw285m9AP4/kds\n         jzug==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:dkim-signature;\n        bh=kx6Vr/oJKHrL9MwhUSHyoeKfqKn3quqamoeA29dEegU=;\n        fh=DesnG9veSaUkbU6NdIbbmLpcJb9BirEQi8lCLqjAQCY=;\n        b=OxpzduJ76kh16X9fRW9TUn3GHjFTuBE5Lmw7SEAyaraYSK36pVUhPpnkEfvyl7gPwd\n         GOcxcSTevm2RDnXK00TUpQQDHO6hOOwsJiCvsd6Wi4ez9Z226Yv/RHedTh4KSynXtVmO\n         biYBbwBiUvIKsv3S1zHc20V5qxiSvbZIHa2m4fQPKphO1D2KKfhCyKtBg+spnqfD4NFX\n         tbsORkNvrScjf+rMIwvt7g593pGn13ACW+7f+R/1nuZyGcLAyblTf80XO3Ma1738OJhJ\n         /wMvBAQoYt1amUmDRb/V3ZfmvwbShpC/oe42iOtApTybmcLHp7gI1MbZEpXZ8CuhpNqf\n         IAkQ==;\n        darn=lists.infradead.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1775197162; x=1775801962;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n         :to:cc:subject:date:message-id:reply-to;\n        bh=kx6Vr/oJKHrL9MwhUSHyoeKfqKn3quqamoeA29dEegU=;\n        b=BrXWPaxM7syemCvz6C1I8Ioxc81EBqxhvSAZmfedKTrMBloqDxD143kBjKu1thgC6a\n         J5vboKtXmbYeewf1dbYWJEkey8pZE5vfdSlEhAGlDSpUGnl3e8WU5PCEUdUJye0MiPX7\n         qVepBvCzezVKdxJGhWI50tDPXsc4VESZX1FwI3LdQoS4SB6UVAW96dySG/fWvF/nlGw7\n         QMJWoX3N44M/dv4efn2YAr9mvJ5QpTFhSSsjjevQ+IV5Da8C3BCy3MbpPAGsEpVVk2bb\n         +b0jQzgA+nWSSmh0XD1+CXhlGJPj9T3zYpWMKVY+O+7Kao3TqMG2sYN+PqE/GATb+ESd\n         pZbQ==","X-Forwarded-Encrypted":"i=1;\n AJvYcCXCGJv8QmviGqyz6mltkr2fq8RgCEvB1X5G7u/WvNa3WllOWzmN4Rl3EekhREUeg8hG2f0mRqWkLyM=@lists.infradead.org","X-Gm-Message-State":"AOJu0YwBgov+IW5Rv/1P1YeuEhZF6mHoOp1FzNU2pLGHwYqN9SdMLBaJ\n\thJeT1Z12vvZeuVDhJwjeQU1oO8piSKmsqoN5uXJ3OVprw7Y72cORM2BhA3kiAJrzYLOXMv4SyB4\n\t3Y06wFh7a3bjWA30KVKgNUAmlD/wX3JulN72Gi7xdZg==","X-Gm-Gg":"ATEYQzyARhrMtOq3wR7DQHAi0/xTu2/CV+tR+jfyLN8Rv/epOX+EuFti6ItRgLmjJs8\n\tBSAAhR9uTrCEp1TdggHTDNldZwLkWXeZs0zSlxGcFjj0epK45DbdMjmXLyp3+deOQSgErNc7nA2\n\tCtvL2zaBU3ZToe0rxqiVYmX9En2lP7xObvP6dqawhuWP7187hciUympcW99UAlKn0n0i9ziHya3\n\tUulO1gxdqHtzPf/w7RFeM7O+a7VHdRDjTKj3LOb0whtXShrWgaT40sjj5yw37/bc07RxNQyqCYI\n\tSNCDnR3JtqHkyJVtfGAxbXLYabOOJuSw2bCHdEE2bD/5ZIO92JqiYN1Esve/8qBG8fwtBZCv+gW\n\trnc3kpZaMZivUYqIBp6QxyfbYunpCvTm9Vkkk","X-Received":"by 2002:a05:622a:a50e:b0:50b:4e72:aa9 with SMTP id\n d75a77b69052e-50d6262d1c3mr24848491cf.9.1775197161880; Thu, 02 Apr 2026\n 23:19:21 -0700 (PDT)","MIME-Version":"1.0","References":"<20260403013137.32604-1-fangyu.yu@linux.alibaba.com>\n <20260403020249.36676-1-fangyu.yu@linux.alibaba.com>","In-Reply-To":"<20260403020249.36676-1-fangyu.yu@linux.alibaba.com>","From":"Anup Patel <anup@brainfault.org>","Date":"Fri, 3 Apr 2026 11:49:09 +0530","X-Gm-Features":"AQROBzB9uVaLIXyFCjKCGQ2JYilonAcViQ8zVbduiOvK0F0aOryvQlhRofsaDPE","Message-ID":"\n <CAAhSdy2CibJNXJYxCvyofXC3CUpCT5KdricNt2aViRSYCOWrrA@mail.gmail.com>","Subject":"Re: Re: Re: [PATCH v7 4/4] RISC-V: KVM: add\n KVM_CAP_RISCV_SET_HGATP_MODE","To":"fangyu.yu@linux.alibaba.com","Cc":"alex@ghiti.fr, andrew.jones@oss.qualcomm.com, aou@eecs.berkeley.edu,\n\tatish.patra@linux.dev, corbet@lwn.net, guoren@kernel.org,\n\tkvm-riscv@lists.infradead.org, kvm@vger.kernel.org,\n linux-doc@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org,\n\tpalmer@dabbelt.com, pbonzini@redhat.com, pjw@kernel.org,\n\tradim.krcmar@oss.qualcomm.com, skhan@linuxfoundation.org","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260402_231924_049051_E568FD4E ","X-CRM114-Status":"GOOD (  34.33  )","X-Spam-Score":"-1.9 (-)","X-Spam-Report":"Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  On Fri, Apr 3,\n 2026 at 7:32 AM <fangyu.yu@linux.alibaba.com>\n    wrote: > > >>On Thu, Apr 2, 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com>\n    wrote: > >>> > >>> From: Fangyu Yu <fangyu.yu@linux.alibaba.com> [...]\n Content analysis details:   (-1.9 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/, no\n                             trust\n                             [2607:f8b0:4864:20:0:0:0:82d listed in]\n                             [list.dnswl.org]\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n  0.0 SPF_NONE               SPF: sender does not publish an SPF Record\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]","X-BeenThere":"kvm-riscv@lists.infradead.org","X-Mailman-Version":"2.1.34","Precedence":"list","List-Id":"<kvm-riscv.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/kvm-riscv/>","List-Post":"<mailto:kvm-riscv@lists.infradead.org>","List-Help":"<mailto:kvm-riscv-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=subscribe>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}},{"id":3673001,"web_url":"http://patchwork.ozlabs.org/comment/3673001/","msgid":"<20260403070719.64284-1-fangyu.yu@linux.alibaba.com>","list_archive_url":null,"date":"2026-04-03T07:07:19","subject":"Re: Re: Re: Re: [PATCH v7 4/4] RISC-V: KVM: add\n KVM_CAP_RISCV_SET_HGATP_MODE","submitter":{"id":91416,"url":"http://patchwork.ozlabs.org/api/people/91416/","name":null,"email":"fangyu.yu@linux.alibaba.com"},"content":">>\n>> >>On Thu, Apr 2, 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com> wrote:\n>> >>>\n>> >>> From: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n>> >>>\n>> >>> Add a VM capability that allows userspace to select the G-stage page table\n>> >>> format by setting HGATP.MODE on a per-VM basis.\n>> >>>\n>> >>> Userspace enables the capability via KVM_ENABLE_CAP, passing the requested\n>> >>> HGATP.MODE in args[0]. The request is rejected with -EINVAL if the mode is\n>> >>> not supported by the host, and with -EBUSY if the VM has already been\n>> >>> committed (e.g. vCPUs have been created or any memslot is populated).\n>> >>>\n>> >>> KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE) returns a bitmask of the\n>> >>> HGATP.MODE formats supported by the host.\n>> >>>\n>> >>> Signed-off-by: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n>> >>> Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com>\n>> >>> Reviewed-by: Guo Ren <guoren@kernel.org>\n>> >>> ---\n>> >>>  Documentation/virt/kvm/api.rst | 27 +++++++++++++++++++++++++++\n>> >>>  arch/riscv/kvm/vm.c            | 18 ++++++++++++++++--\n>> >>>  include/uapi/linux/kvm.h       |  1 +\n>> >>>  3 files changed, 44 insertions(+), 2 deletions(-)\n>> >>>\n>> >>> diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst\n>> >>> index 032516783e96..9d7f6958fa81 100644\n>> >>> --- a/Documentation/virt/kvm/api.rst\n>> >>> +++ b/Documentation/virt/kvm/api.rst\n>> >>> @@ -8902,6 +8902,33 @@ helpful if user space wants to emulate instructions which are not\n>> >>>  This capability can be enabled dynamically even if VCPUs were already\n>> >>>  created and are running.\n>> >>>\n>> >>> +7.47 KVM_CAP_RISCV_SET_HGATP_MODE\n>> >>> +---------------------------------\n>> >>> +\n>> >>> +:Architectures: riscv\n>> >>> +:Type: VM\n>> >>> +:Parameters: args[0] contains the requested HGATP mode\n>> >>> +:Returns:\n>> >>> +  - 0 on success.\n>> >>> +  - -EINVAL if args[0] is outside the range of HGATP modes supported by the\n>> >>> +    hardware.\n>> >>> +  - -EBUSY if vCPUs have already been created for the VM, if the VM has any\n>> >>> +    non-empty memslots.\n>> >>> +\n>> >>> +This capability allows userspace to explicitly select the HGATP mode for\n>> >>> +the VM. The selected mode must be supported by both KVM and hardware. This\n>> >>> +capability must be enabled before creating any vCPUs or memslots.\n>> >>> +\n>> >>> +If this capability is not enabled, KVM will select the default HGATP mode\n>> >>> +automatically. The default is the highest HGATP.MODE value supported by\n>> >>> +hardware.\n>> >>> +\n>> >>> +``KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE)`` returns a bitmask of\n>> >>> +HGATP.MODE values supported by the host. A return value of 0 indicates that\n>> >>> +the capability is not supported. Supported-mode bitmask use HGATP.MODE\n>> >>> +encodings as defined by the RISC-V privileged specification, such as Sv39x4\n>> >>> +corresponds to HGATP.MODE=8, so userspace should test bitmask & BIT(8).\n>> >>> +\n>> >>>  8. Other capabilities.\n>> >>>  ======================\n>> >>>\n>> >>> diff --git a/arch/riscv/kvm/vm.c b/arch/riscv/kvm/vm.c\n>> >>> index 4d82a886102c..5e82a3ad3ad0 100644\n>> >>> --- a/arch/riscv/kvm/vm.c\n>> >>> +++ b/arch/riscv/kvm/vm.c\n>> >>> @@ -201,6 +201,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n>> >>>         case KVM_CAP_VM_GPA_BITS:\n>> >>>                 r = kvm_riscv_gstage_gpa_bits(kvm->arch.pgd_levels);\n>> >>>                 break;\n>> >>> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n>> >>> +               r = kvm_riscv_get_hgatp_mode_mask();\n>> >>> +               break;\n>> >>\n>> >>Introducing a new RISC-V capability looks a bit complex.\n>> >>Instead of KVM_CAP_RISCV_SET_HGATP_MODE, we can\n>> >>simply re-use KVM_CAP_VM_GPA_BITS.\n>> >>\n>> >>The kvm_vm_ioctl_check_extension() for KVM_CAP_VM_GPA_BITS\n>> >>return number of GPA bits which in-directly implies the underlying\n>> >>hgatp.MODE. As we know, if it return 59 bits GPA then it means\n>> >>Sv57x4 is the selected hgatp.MODE and Sv48x4 and Sv39x4 modes\n>> >>are also supported as-per RISC-V privileged specification.\n>> >>\n>> >>The kvm_vm_ioctl_enable_cap() for KVM_CAP_VM_GPA_BITS\n>> >>will take the desired number of GPA bits and downsize the selected\n>> >>hgatp.MODE. For example, if user-space ask GPA bits <= 50 and\n>> >>GPA bits > 41 then we select Sv48x4. If user-space ask GPA\n>> >>bits <= 41 then we select Sv39x4. If user-space ask GPA bits <= 59\n>> >>and GPA bits > 50 then we select Sv57x4.\n>> >>\n>> >\n>> >Thanks, that makes sense.\n>> >\n>> >In v8 I’ll drop KVM_CAP_RISCV_SET_HGATP_MODE and re-use KVM_CAP_VM_GPA_BITS\n>> >for both discovery and selection.\n>> >\n>>\n>> Hi Anup,\n>>\n>> While working on the respin reusing KVM_CAP_VM_GPA_BITS, I realized\n>> a potential ambiguity in CHECK_EXTENSION semantics and wanted to confirm the\n>> intended ABI before posting v8.\n>>\n>> One concern about the semantics: today KVM_CHECK_EXTENSION(KVM_CAP_VM_GPA_BITS)\n>> on a VM fd may be interpreted as “the GPA bits for this VM” (or at least what\n>> this VM can use). If we also use KVM_ENABLE_CAP(KVM_CAP_VM_GPA_BITS) to downsize\n>> the selected HGATP.MODE for a particular VM (e.g. to Sv48x4 => 50 bits), then a\n>> subsequent CHECK_EXTENSION(KVM_CAP_VM_GPA_BITS) on the same VM fd would return 50.\n>> Userspace might then assume 50 is the maximum supported by that VM/host and lose\n>> the information that the host actually supports 59 (Sv57x4).\n>\n>I think there is no violation of the semantics because we are providing\n>a way to allow KVM user space change \"the GPA bits for this VM”\n>using KVM_ENABLE_CAP(KVM_CAP_VM_GPA_BITS) so subsequent\n>CHECK_EXTENSION(KVM_CAP_VM_GPA_BITS) must return\n>effective number of GPA bits visible to the VM.\n\nThanks, agreed.\n\n>The only additional constraint I would enforce is that the\n>KVM_ENABLE_CAP(KVM_CAP_VM_GPA_BITS) must\n>return -EBUSY if any of the Guest VCPUs have\n>ran_atleast_once set.\n>\n\nIn my current implementation I already return -EBUSY if kvm->created_vcpus\nis non-zero, i.e. the GPA bits can only be changed before any vCPU is created.\n\nThanks,\nFangyu\n\n>Regards,\n>Anup\n>\n>>\n>> Thanks,\n>> Fangyu\n>>\n>> >Thanks,\n>> >Fangyu\n>> >\n>> >>>         default:\n>> >>>                 r = 0;\n>> >>>                 break;\n>> >>> @@ -211,12 +214,23 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n>> >>>\n>> >>>  int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)\n>> >>>  {\n>> >>> +       if (cap->flags)\n>> >>> +               return -EINVAL;\n>> >>> +\n>> >>>         switch (cap->cap) {\n>> >>>         case KVM_CAP_RISCV_MP_STATE_RESET:\n>> >>> -               if (cap->flags)\n>> >>> -                       return -EINVAL;\n>> >>>                 kvm->arch.mp_state_reset = true;\n>> >>>                 return 0;\n>> >>> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n>> >>> +               if (!kvm_riscv_hgatp_mode_is_valid(cap->args[0]))\n>> >>> +                       return -EINVAL;\n>> >>> +\n>> >>> +               if (kvm->created_vcpus || !kvm_are_all_memslots_empty(kvm))\n>> >>> +                       return -EBUSY;\n>> >>> +#ifdef CONFIG_64BIT\n>> >>> +               kvm->arch.pgd_levels = 3 + cap->args[0] - HGATP_MODE_SV39X4;\n>> >>> +#endif\n>> >>> +               return 0;\n>> >>>         default:\n>> >>>                 return -EINVAL;\n>> >>>         }\n>> >>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h\n>> >>> index 80364d4dbebb..a74a80fd4046 100644\n>> >>> --- a/include/uapi/linux/kvm.h\n>> >>> +++ b/include/uapi/linux/kvm.h\n>> >>> @@ -989,6 +989,7 @@ struct kvm_enable_cap {\n>> >>>  #define KVM_CAP_ARM_SEA_TO_USER 245\n>> >>>  #define KVM_CAP_S390_USER_OPEREXEC 246\n>> >>>  #define KVM_CAP_S390_KEYOP 247\n>> >>> +#define KVM_CAP_RISCV_SET_HGATP_MODE 248\n>> >>>\n>> >>>  struct kvm_irq_routing_irqchip {\n>> >>>         __u32 irqchip;\n>> >>> --\n>> >>> 2.50.1\n>> >>>\n>> >>\n>> >>Regards,\n>> >>Anup\n>","headers":{"Return-Path":"\n <kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=h42YzqTq;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=linux.alibaba.com header.i=@linux.alibaba.com\n header.a=rsa-sha256 header.s=default header.b=v8RYTLEJ;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fn8tl3yP5z1yCs\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 18:07:39 +1100 (AEDT)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8Ycu-00000001TQU-1vVC;\n\tFri, 03 Apr 2026 07:07:32 +0000","from out30-98.freemail.mail.aliyun.com ([115.124.30.98])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8Ycr-00000001TMn-0O8F;\n\tFri, 03 Apr 2026 07:07:31 +0000","from localhost.localdomain(mailfrom:fangyu.yu@linux.alibaba.com\n fp:SMTPD_---0X0JS0nl_1775200041 cluster:ay36)\n          by smtp.aliyun-inc.com;\n          Fri, 03 Apr 2026 15:07:23 +0800"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:\n\tMessage-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=h/vZZa7odGMlJATwNepnTWOgXaFS2lkSis4bIema9IA=; b=h42YzqTqpi7MAN\n\t01u1zbDyEIviFXGYNOjHRzfRGsQIssD5mKwpPfsAiV05zRf3MFShqj/plofbqpcDRuHJoK/ymhVKt\n\tTR7IVMMc9dlHXzNhgcb9iNWLrw7HdQdhdr2Tkk5z6uNYDLbdPxwOqyqY7OLOkrEprTEZA5YmziOvs\n\tu8KG2uMeDgImiKulVwlUFIMKwk4jCGo5WTLdpG6FIh393C3ir77A5E+K25nsSCw4pDM+bis+YJBm7\n\tIxaQo2MBsf1pfPS0AHrCvTSnqXy/fvz/wYrL/TAqA7nJRHLeSdrrHb5GEJSNaSF5yjAyn5H0DOdqA\n\tL3UYSFPRJ+t/IuuCG8bQ==;","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linux.alibaba.com; s=default;\n\tt=1775200044; h=From:To:Subject:Date:Message-Id:MIME-Version:Content-Type;\n\tbh=tfVpMgp9qVTcZ/8DJfX9VxVoyY3jze79OH3JyHtjLpc=;\n\tb=v8RYTLEJbpPat037/JxcxggsQiBrovug0FjLjJJbdDeDcGFEcPlVRb5UwBPPa48gMEyaOG/YSq5L8qJBue5sZJbksXYfvmXoEvwz+mBGSLTLBEWCZnXMa2fZMwgpwERvlI+DgWla0pF3P2Bkm3xpAY355+bobM5lOlq1w/KsBEA="],"X-Alimail-AntiSpam":"\n AC=PASS;BC=-1|-1;BR=01201311R451e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=maildocker-contentspam033045098064;MF=fangyu.yu@linux.alibaba.com;NM=1;PH=DS;RN=18;SR=0;TI=SMTPD_---0X0JS0nl_1775200041;","From":"fangyu.yu@linux.alibaba.com","To":"anup@brainfault.org","Cc":"alex@ghiti.fr,\n\tandrew.jones@oss.qualcomm.com,\n\taou@eecs.berkeley.edu,\n\tatish.patra@linux.dev,\n\tcorbet@lwn.net,\n\tfangyu.yu@linux.alibaba.com,\n\tguoren@kernel.org,\n\tkvm-riscv@lists.infradead.org,\n\tkvm@vger.kernel.org,\n\tlinux-doc@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tlinux-riscv@lists.infradead.org,\n\tpalmer@dabbelt.com,\n\tpbonzini@redhat.com,\n\tpjw@kernel.org,\n\tradim.krcmar@oss.qualcomm.com,\n\tskhan@linuxfoundation.org","Subject":"Re: Re: Re: Re: [PATCH v7 4/4] RISC-V: KVM: add\n KVM_CAP_RISCV_SET_HGATP_MODE","Date":"Fri,  3 Apr 2026 15:07:19 +0800","Message-Id":"<20260403070719.64284-1-fangyu.yu@linux.alibaba.com>","X-Mailer":"git-send-email 2.39.3 (Apple Git-146)","In-Reply-To":"\n <CAAhSdy2CibJNXJYxCvyofXC3CUpCT5KdricNt2aViRSYCOWrrA@mail.gmail.com>","References":"\n <CAAhSdy2CibJNXJYxCvyofXC3CUpCT5KdricNt2aViRSYCOWrrA@mail.gmail.com>","MIME-Version":"1.0","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260403_000729_554466_CF10FC90 ","X-CRM114-Status":"GOOD (  25.53  )","X-Spam-Score":"-17.6 (-----------------)","X-Spam-Report":"Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  >> >> >>On Thu, Apr 2,\n 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com>\n    wrote: >> >>> >> >>> From: Fangyu Yu <fangyu.yu@linux.alibaba.com> >> >>>\n    >> >>> Add a VM capability that allows userspace to selec [...]\n Content analysis details:   (-17.6 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/, no\n                             trust\n                             [115.124.30.98 listed in list.dnswl.org]\n  0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE: The\n                             query to Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                          [115.124.30.98 listed in\n sa-trusted.bondedsender.org]\n  0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [115.124.30.98 listed in sa-accredit.habeas.com]\n  0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [115.124.30.98 listed in\n bl.score.senderscore.com]\n -0.0 SPF_PASS               SPF: sender matches SPF record\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n -7.5 USER_IN_DEF_DKIM_WL    From: address is in the default DKIM welcome-list\n -7.5 USER_IN_DEF_SPF_WL     From: address is in the default SPF welcome-list\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID_EF          Message has a valid DKIM or DK signature from\n                             envelope-from domain\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n author's\n                             domain\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]\n -0.5 ENV_AND_HDR_SPF_MATCH  Env and Hdr From used in default SPF WL Match\n  0.0 UNPARSEABLE_RELAY      Informational: message has unparseable relay\n lines","X-BeenThere":"kvm-riscv@lists.infradead.org","X-Mailman-Version":"2.1.34","Precedence":"list","List-Id":"<kvm-riscv.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/kvm-riscv/>","List-Post":"<mailto:kvm-riscv@lists.infradead.org>","List-Help":"<mailto:kvm-riscv-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=subscribe>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}},{"id":3673014,"web_url":"http://patchwork.ozlabs.org/comment/3673014/","msgid":"<CAAhSdy08ZDHdXZJ0R6CpxGoKbMQ9c+FZrU0vW=iN6gq6A8BTBQ@mail.gmail.com>","list_archive_url":null,"date":"2026-04-03T08:11:02","subject":"Re: Re: Re: Re: [PATCH v7 4/4] RISC-V: KVM: add\n KVM_CAP_RISCV_SET_HGATP_MODE","submitter":{"id":33417,"url":"http://patchwork.ozlabs.org/api/people/33417/","name":"Anup Patel","email":"anup@brainfault.org"},"content":"On Fri, Apr 3, 2026 at 12:37 PM <fangyu.yu@linux.alibaba.com> wrote:\n>\n> >>\n> >> >>On Thu, Apr 2, 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com> wrote:\n> >> >>>\n> >> >>> From: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n> >> >>>\n> >> >>> Add a VM capability that allows userspace to select the G-stage page table\n> >> >>> format by setting HGATP.MODE on a per-VM basis.\n> >> >>>\n> >> >>> Userspace enables the capability via KVM_ENABLE_CAP, passing the requested\n> >> >>> HGATP.MODE in args[0]. The request is rejected with -EINVAL if the mode is\n> >> >>> not supported by the host, and with -EBUSY if the VM has already been\n> >> >>> committed (e.g. vCPUs have been created or any memslot is populated).\n> >> >>>\n> >> >>> KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE) returns a bitmask of the\n> >> >>> HGATP.MODE formats supported by the host.\n> >> >>>\n> >> >>> Signed-off-by: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n> >> >>> Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com>\n> >> >>> Reviewed-by: Guo Ren <guoren@kernel.org>\n> >> >>> ---\n> >> >>>  Documentation/virt/kvm/api.rst | 27 +++++++++++++++++++++++++++\n> >> >>>  arch/riscv/kvm/vm.c            | 18 ++++++++++++++++--\n> >> >>>  include/uapi/linux/kvm.h       |  1 +\n> >> >>>  3 files changed, 44 insertions(+), 2 deletions(-)\n> >> >>>\n> >> >>> diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst\n> >> >>> index 032516783e96..9d7f6958fa81 100644\n> >> >>> --- a/Documentation/virt/kvm/api.rst\n> >> >>> +++ b/Documentation/virt/kvm/api.rst\n> >> >>> @@ -8902,6 +8902,33 @@ helpful if user space wants to emulate instructions which are not\n> >> >>>  This capability can be enabled dynamically even if VCPUs were already\n> >> >>>  created and are running.\n> >> >>>\n> >> >>> +7.47 KVM_CAP_RISCV_SET_HGATP_MODE\n> >> >>> +---------------------------------\n> >> >>> +\n> >> >>> +:Architectures: riscv\n> >> >>> +:Type: VM\n> >> >>> +:Parameters: args[0] contains the requested HGATP mode\n> >> >>> +:Returns:\n> >> >>> +  - 0 on success.\n> >> >>> +  - -EINVAL if args[0] is outside the range of HGATP modes supported by the\n> >> >>> +    hardware.\n> >> >>> +  - -EBUSY if vCPUs have already been created for the VM, if the VM has any\n> >> >>> +    non-empty memslots.\n> >> >>> +\n> >> >>> +This capability allows userspace to explicitly select the HGATP mode for\n> >> >>> +the VM. The selected mode must be supported by both KVM and hardware. This\n> >> >>> +capability must be enabled before creating any vCPUs or memslots.\n> >> >>> +\n> >> >>> +If this capability is not enabled, KVM will select the default HGATP mode\n> >> >>> +automatically. The default is the highest HGATP.MODE value supported by\n> >> >>> +hardware.\n> >> >>> +\n> >> >>> +``KVM_CHECK_EXTENSION(KVM_CAP_RISCV_SET_HGATP_MODE)`` returns a bitmask of\n> >> >>> +HGATP.MODE values supported by the host. A return value of 0 indicates that\n> >> >>> +the capability is not supported. Supported-mode bitmask use HGATP.MODE\n> >> >>> +encodings as defined by the RISC-V privileged specification, such as Sv39x4\n> >> >>> +corresponds to HGATP.MODE=8, so userspace should test bitmask & BIT(8).\n> >> >>> +\n> >> >>>  8. Other capabilities.\n> >> >>>  ======================\n> >> >>>\n> >> >>> diff --git a/arch/riscv/kvm/vm.c b/arch/riscv/kvm/vm.c\n> >> >>> index 4d82a886102c..5e82a3ad3ad0 100644\n> >> >>> --- a/arch/riscv/kvm/vm.c\n> >> >>> +++ b/arch/riscv/kvm/vm.c\n> >> >>> @@ -201,6 +201,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n> >> >>>         case KVM_CAP_VM_GPA_BITS:\n> >> >>>                 r = kvm_riscv_gstage_gpa_bits(kvm->arch.pgd_levels);\n> >> >>>                 break;\n> >> >>> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n> >> >>> +               r = kvm_riscv_get_hgatp_mode_mask();\n> >> >>> +               break;\n> >> >>\n> >> >>Introducing a new RISC-V capability looks a bit complex.\n> >> >>Instead of KVM_CAP_RISCV_SET_HGATP_MODE, we can\n> >> >>simply re-use KVM_CAP_VM_GPA_BITS.\n> >> >>\n> >> >>The kvm_vm_ioctl_check_extension() for KVM_CAP_VM_GPA_BITS\n> >> >>return number of GPA bits which in-directly implies the underlying\n> >> >>hgatp.MODE. As we know, if it return 59 bits GPA then it means\n> >> >>Sv57x4 is the selected hgatp.MODE and Sv48x4 and Sv39x4 modes\n> >> >>are also supported as-per RISC-V privileged specification.\n> >> >>\n> >> >>The kvm_vm_ioctl_enable_cap() for KVM_CAP_VM_GPA_BITS\n> >> >>will take the desired number of GPA bits and downsize the selected\n> >> >>hgatp.MODE. For example, if user-space ask GPA bits <= 50 and\n> >> >>GPA bits > 41 then we select Sv48x4. If user-space ask GPA\n> >> >>bits <= 41 then we select Sv39x4. If user-space ask GPA bits <= 59\n> >> >>and GPA bits > 50 then we select Sv57x4.\n> >> >>\n> >> >\n> >> >Thanks, that makes sense.\n> >> >\n> >> >In v8 I’ll drop KVM_CAP_RISCV_SET_HGATP_MODE and re-use KVM_CAP_VM_GPA_BITS\n> >> >for both discovery and selection.\n> >> >\n> >>\n> >> Hi Anup,\n> >>\n> >> While working on the respin reusing KVM_CAP_VM_GPA_BITS, I realized\n> >> a potential ambiguity in CHECK_EXTENSION semantics and wanted to confirm the\n> >> intended ABI before posting v8.\n> >>\n> >> One concern about the semantics: today KVM_CHECK_EXTENSION(KVM_CAP_VM_GPA_BITS)\n> >> on a VM fd may be interpreted as “the GPA bits for this VM” (or at least what\n> >> this VM can use). If we also use KVM_ENABLE_CAP(KVM_CAP_VM_GPA_BITS) to downsize\n> >> the selected HGATP.MODE for a particular VM (e.g. to Sv48x4 => 50 bits), then a\n> >> subsequent CHECK_EXTENSION(KVM_CAP_VM_GPA_BITS) on the same VM fd would return 50.\n> >> Userspace might then assume 50 is the maximum supported by that VM/host and lose\n> >> the information that the host actually supports 59 (Sv57x4).\n> >\n> >I think there is no violation of the semantics because we are providing\n> >a way to allow KVM user space change \"the GPA bits for this VM”\n> >using KVM_ENABLE_CAP(KVM_CAP_VM_GPA_BITS) so subsequent\n> >CHECK_EXTENSION(KVM_CAP_VM_GPA_BITS) must return\n> >effective number of GPA bits visible to the VM.\n>\n> Thanks, agreed.\n>\n> >The only additional constraint I would enforce is that the\n> >KVM_ENABLE_CAP(KVM_CAP_VM_GPA_BITS) must\n> >return -EBUSY if any of the Guest VCPUs have\n> >ran_atleast_once set.\n> >\n>\n> In my current implementation I already return -EBUSY if kvm->created_vcpus\n> is non-zero, i.e. the GPA bits can only be changed before any vCPU is created.\n\nChecking kvm->created_vcpus is perfectly fine so no need to change this.\n\nRegards,\nAnup\n\n>\n> Thanks,\n> Fangyu\n>\n> >Regards,\n> >Anup\n> >\n> >>\n> >> Thanks,\n> >> Fangyu\n> >>\n> >> >Thanks,\n> >> >Fangyu\n> >> >\n> >> >>>         default:\n> >> >>>                 r = 0;\n> >> >>>                 break;\n> >> >>> @@ -211,12 +214,23 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)\n> >> >>>\n> >> >>>  int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)\n> >> >>>  {\n> >> >>> +       if (cap->flags)\n> >> >>> +               return -EINVAL;\n> >> >>> +\n> >> >>>         switch (cap->cap) {\n> >> >>>         case KVM_CAP_RISCV_MP_STATE_RESET:\n> >> >>> -               if (cap->flags)\n> >> >>> -                       return -EINVAL;\n> >> >>>                 kvm->arch.mp_state_reset = true;\n> >> >>>                 return 0;\n> >> >>> +       case KVM_CAP_RISCV_SET_HGATP_MODE:\n> >> >>> +               if (!kvm_riscv_hgatp_mode_is_valid(cap->args[0]))\n> >> >>> +                       return -EINVAL;\n> >> >>> +\n> >> >>> +               if (kvm->created_vcpus || !kvm_are_all_memslots_empty(kvm))\n> >> >>> +                       return -EBUSY;\n> >> >>> +#ifdef CONFIG_64BIT\n> >> >>> +               kvm->arch.pgd_levels = 3 + cap->args[0] - HGATP_MODE_SV39X4;\n> >> >>> +#endif\n> >> >>> +               return 0;\n> >> >>>         default:\n> >> >>>                 return -EINVAL;\n> >> >>>         }\n> >> >>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h\n> >> >>> index 80364d4dbebb..a74a80fd4046 100644\n> >> >>> --- a/include/uapi/linux/kvm.h\n> >> >>> +++ b/include/uapi/linux/kvm.h\n> >> >>> @@ -989,6 +989,7 @@ struct kvm_enable_cap {\n> >> >>>  #define KVM_CAP_ARM_SEA_TO_USER 245\n> >> >>>  #define KVM_CAP_S390_USER_OPEREXEC 246\n> >> >>>  #define KVM_CAP_S390_KEYOP 247\n> >> >>> +#define KVM_CAP_RISCV_SET_HGATP_MODE 248\n> >> >>>\n> >> >>>  struct kvm_irq_routing_irqchip {\n> >> >>>         __u32 irqchip;\n> >> >>> --\n> >> >>> 2.50.1\n> >> >>>\n> >> >>\n> >> >>Regards,\n> >> >>Anup\n> >","headers":{"Return-Path":"\n <kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=thCFu3C8;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=brainfault-org.20251104.gappssmtp.com\n header.i=@brainfault-org.20251104.gappssmtp.com header.a=rsa-sha256\n header.s=20251104 header.b=N15WKhWP;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fnBJK6P68z1yD3\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 19:11:24 +1100 (AEDT)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8Zcb-00000001gc2-3L9j;\n\tFri, 03 Apr 2026 08:11:17 +0000","from mail-oo1-xc2e.google.com ([2607:f8b0:4864:20::c2e])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8ZcY-00000001gar-34Wj\n\tfor kvm-riscv@lists.infradead.org;\n\tFri, 03 Apr 2026 08:11:16 +0000","by mail-oo1-xc2e.google.com with SMTP id\n 006d021491bc7-67e23011c93so614264eaf.3\n        for <kvm-riscv@lists.infradead.org>;\n Fri, 03 Apr 2026 01:11:14 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From:\n\tIn-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=yeIHJjdxObWgalRTu0D/KuZ87O8iNy8jaYpEQ30Mnu4=; b=thCFu3C8r6N5oA\n\tdq9vWe8knSzHT0CIQ8v4Gdw1Zis3p2p70FhboA+FFRKW/RSyxihA3LhpVwWocfigWwkhGYzWoFz4E\n\tho7Kb/ZJUJfETjYUvke53u3+9AyUECciSxi1ZJyQT5o6sp2fECuz4C71io5UolUF02ksqoMe4zjFb\n\tA1wu4LHqqrHpJVrgAlEkgJ7Lc4xKRgPu6nroes7b0rs+wu1B88H+Prb+I2XDb4qQeRXUFrW6PHsEf\n\tD9lt1G0qZ2SZZumRPMLcw05c/jH6wH7TBFHjc59rlI4XZQK/iZLewu6weAzb3g9S+4949iLXlz603\n\tu+XvK76Qeal1XwBoFeIw==;","v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=brainfault-org.20251104.gappssmtp.com; s=20251104; t=1775203873;\n x=1775808673; darn=lists.infradead.org;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=HRjWOMqK4PAlflmzYTeO4Htqmd6bJQ/bjreqx+Xjlfo=;\n        b=N15WKhWPRDJNRMtuD24V7x1J0iyN2BTjdC8YdC+xWjnx43/fgMAG1wdsdWsrwOE2OO\n         XncxOOt6Gyw8g9p16w5URVNF57ueVlbcJlM82DlUKbcxHm9gVIS8mtbSb1mdypF/8MR0\n         F1q7GloYH1hpkRDpBvRYvXSFy0A/qIryyx0vrb3MVf029rmvKAFnUrYji5G6SZPIcD82\n         U1HkoVaEUCBhaWPNg+hjkgQLNDpDXKXBwopQn46sQxprvY0OsEXmsDo4lxuUHy6Xf6/Z\n         IdFfUiHQFhZjZvYqtwv6OmcRFriZW8uQX7PZarr78OCWp9ZfyjOYf9DBzjWfSQp+lD40\n         AjLw=="],"ARC-Seal":"i=1; a=rsa-sha256; t=1775203873; cv=none;\n        d=google.com; s=arc-20240605;\n        b=EjyX+UIa7XyOR+kgX1vgpwXKITANQTY03qIuanO9LHKYJeTQyCml7ujj4VJ6dr/YlD\n         k9GjvXMUc33nQ6E5SHJbcIhMilsyFnRAk1/zfzSUCo1U4ehflbTzBtBvDp9y57kygoRH\n         lqO3/4SBm0HuFQORTrZMsf4xs2naROwbkbSgquJuFnO4XI7UuG65Y/SHmW0ghoFCh3b6\n         bSVwJdw2ybOwGQqtqyp/oWWqX2vSpf1h/RDF4RvuDt3WRlYffo8HzMo8b+8nr4ihw2sl\n         NgexqOSunwg0jwXq/kd48x/lsnwJ3XsnyIyDLxKrmASyKooB+Co8j8U3DYHv8OOLRscz\n         cuXA==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:dkim-signature;\n        bh=HRjWOMqK4PAlflmzYTeO4Htqmd6bJQ/bjreqx+Xjlfo=;\n        fh=+B/7xQzbMwH3i3j2ZfX3tH296OEwZQlZX5/igTEkMfo=;\n        b=PIMKFGg0H7dTaY7vhxrqkNjeHFJMDHrDH6/xl0HDASGHTuPPd3jmKZmIaM4L3T7M6I\n         ZFATArEH9emW8qROGtis+RV0he/ljAWakhncoEFC5BqoAv+0Gn7wk8AeddsM6pauVC+w\n         twYht496OQOIGHmr4kkfga0S1s19xYpKSFXX/01vP1muQp9wNFVkY0ceKu5NdPiaoUiQ\n         /THyJRXsTYzbHT147SOBByIrr/qZmMzjLbjGLh/qSWLfcWsGk5tQyMAmtqcdGI1kziSD\n         qQs6BXAS5buEP5Wiv4tq//SIJJl9G0Jdyn2lsvx97omIGEL0hrTJVXwADMx60QDnRuEJ\n         zoLw==;\n        darn=lists.infradead.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1775203873; x=1775808673;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n         :to:cc:subject:date:message-id:reply-to;\n        bh=HRjWOMqK4PAlflmzYTeO4Htqmd6bJQ/bjreqx+Xjlfo=;\n        b=akMcDacmhclXkkVBjpAxlI3BHq1JTZRG7h1IURRCnQqdvZ22WPFk69yI2gVzCtWh8i\n         VXvm+vau2GRJva2AGWO5QxvxEPD5cK9BDareqLsvbW/aEFMEPQNZQJC5UO+Sdrl/oy6C\n         YaCc7S1pxx33ueTnGpR5rM3F35XyXVvH7rS2yBiaQSvAiHNCtm7ffhuchkMJQzni41Kj\n         c2KKKnmr56tfdYhXHxZRkNIF8Th3pkvw9k7wDHorZhSGKOvQuq/D6EJsYQ6OxRoO20ml\n         msckUeOAA7CwFDg1XKIkG+ADTpuuFz10Fde27n/2yDh+2tqk2O73VvU+iFRaYcPvstjy\n         bxqw==","X-Forwarded-Encrypted":"i=1;\n AJvYcCVZ9RLkzYxcmCuF6pZybnc3vnj/oSwWo47DmAWQQXEa6rkpNb8hELfN7gTki+BHuO3vgrPBpdnIHG4=@lists.infradead.org","X-Gm-Message-State":"AOJu0YxGbVZFaC5qkq4n7NXanNXMQJ8vLw3Olu+mUaTPVdPHu6SK4OkP\n\tuUzkyW++/a+yjJC2cDBsjQkeJsiVCsjtlHZP5qw8Ghq3kR9ZgfeEyGmBvzPlnnJLTX9j23zC7Vi\n\tqhPHdxqzbsDVkvlr7jyOx4o8L49siVgfC/yqvDNCTaw==","X-Gm-Gg":"ATEYQzwi6FhSRQkzmBNY8BE8m7cLpmrd68W4p8x1UfPxon/QAdU+u9UQf0wKfleFvcJ\n\tgPU16gXp91ND44o5bc26nFNEZ8l/GsbQ3HbZ47qXBEQZZqFH0VLcqDGX8pBliFk4LKw3yy3w2Cb\n\tIDowzFoOSTE2FIU0Il3E/DsObSANeiQqwuockwZ/rtN6WGkFMFPg3KGrZXq8w5Hx6aAKB2kgf90\n\tn/ql5ecnGoIMSWbZ5/SsmJ6nIY6oh+W0QwIEpqp3LY0wYaJDn2RJ40L94FJgPvz875SXV2V3GGA\n\twzqQwLXjAlaXi0BN6ybs8anywQEKgCDQsOTeyFumiOz0pOZEdc2s2scYb7iBPLUK6665Kv0KEXC\n\tdfJe0/4hXbwTVteJkK3g/u0SoFQ==","X-Received":"by 2002:a05:6820:1b0e:b0:67c:1fc7:daa6 with SMTP id\n 006d021491bc7-6821d23811emr1112989eaf.10.1775203873468; Fri, 03 Apr 2026\n 01:11:13 -0700 (PDT)","MIME-Version":"1.0","References":"\n <CAAhSdy2CibJNXJYxCvyofXC3CUpCT5KdricNt2aViRSYCOWrrA@mail.gmail.com>\n <20260403070719.64284-1-fangyu.yu@linux.alibaba.com>","In-Reply-To":"<20260403070719.64284-1-fangyu.yu@linux.alibaba.com>","From":"Anup Patel <anup@brainfault.org>","Date":"Fri, 3 Apr 2026 13:41:02 +0530","X-Gm-Features":"AQROBzAD30X1MIqnPsVPFD2GQtGyaDXu1bXGTiOYV05dRH1-FhidSwuL0L0jieE","Message-ID":"\n <CAAhSdy08ZDHdXZJ0R6CpxGoKbMQ9c+FZrU0vW=iN6gq6A8BTBQ@mail.gmail.com>","Subject":"Re: Re: Re: Re: [PATCH v7 4/4] RISC-V: KVM: add\n KVM_CAP_RISCV_SET_HGATP_MODE","To":"fangyu.yu@linux.alibaba.com","Cc":"alex@ghiti.fr, andrew.jones@oss.qualcomm.com, aou@eecs.berkeley.edu,\n\tatish.patra@linux.dev, corbet@lwn.net, guoren@kernel.org,\n\tkvm-riscv@lists.infradead.org, kvm@vger.kernel.org,\n linux-doc@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org,\n\tpalmer@dabbelt.com, pbonzini@redhat.com, pjw@kernel.org,\n\tradim.krcmar@oss.qualcomm.com, skhan@linuxfoundation.org","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260403_011115_036879_D6FE651A ","X-CRM114-Status":"GOOD (  39.77  )","X-Spam-Score":"-1.9 (-)","X-Spam-Report":"Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  On Fri, Apr 3,\n 2026 at 12:37 PM <fangyu.yu@linux.alibaba.com>\n    wrote: > > >> > >> >>On Thu, Apr 2,\n 2026 at 6:53 PM <fangyu.yu@linux.alibaba.com>\n    wrote: > >> >>> > >> >>> From: Fangyu Yu <fangyu.yu@linu [...]\n Content analysis details:   (-1.9 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/, no\n                             trust\n                             [2607:f8b0:4864:20:0:0:0:c2e listed in]\n                             [list.dnswl.org]\n  0.0 SPF_NONE               SPF: sender does not publish an SPF Record\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]","X-BeenThere":"kvm-riscv@lists.infradead.org","X-Mailman-Version":"2.1.34","Precedence":"list","List-Id":"<kvm-riscv.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/kvm-riscv/>","List-Post":"<mailto:kvm-riscv@lists.infradead.org>","List-Help":"<mailto:kvm-riscv-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=subscribe>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}}]