From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4CFEC3ABC3 for ; Tue, 13 May 2025 16:35:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AF3C66B00E4; Tue, 13 May 2025 12:35:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AC8036B00E5; Tue, 13 May 2025 12:35:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 946A66B00E6; Tue, 13 May 2025 12:35:13 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 6AA086B00E4 for ; Tue, 13 May 2025 12:35:13 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 9F5A6C11D0 for ; Tue, 13 May 2025 16:35:14 +0000 (UTC) X-FDA: 83438434548.18.B8476FD Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf27.hostedemail.com (Postfix) with ESMTP id CABE440005 for ; Tue, 13 May 2025 16:35:12 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="R/wK++ns"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf27.hostedemail.com: domain of 3v3QjaAUKCH4vcddciqqing.eqonkpwz-oomxcem.qti@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3v3QjaAUKCH4vcddciqqing.eqonkpwz-oomxcem.qti@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1747154112; a=rsa-sha256; cv=none; b=1F6oPEDli0duEm0BuvrFQTcqR7LmHvkKyJ+sSM8Q6klRudVPMJcDYYEGpajkNgSR9pvgns ycXAZ0dUKrXuSz1CzVAQ+ZeKvZpHbyYw8NOzxmKQVIx7Lkuc3yk5214xoIwVC2ErnXAG3t 7DHkMkn8dkGw/kA1dwRE/6XG/YjqeNU= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="R/wK++ns"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf27.hostedemail.com: domain of 3v3QjaAUKCH4vcddciqqing.eqonkpwz-oomxcem.qti@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3v3QjaAUKCH4vcddciqqing.eqonkpwz-oomxcem.qti@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1747154112; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=+ZWH6ggb1hC8uB3wzLXpUmgA6cvqTdmcA385l2vtyqo=; b=l54MBQOlXos/2OfWR8PjRzMOkeMYvPue5WvusFASlbs4fNAsG56fv2icp5L6raEZUlnKH4 gleNwHvCVGLasmw/r5S6TKuYSpQFiS1XWA/P835Fw2ac3RuJ0mL9jfEB9bcHB9NZ8Azugc OL4WueNxQyKorgfiO/tDHyRTTZs71ME= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43cf44b66f7so33782885e9.1 for ; Tue, 13 May 2025 09:35:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747154111; x=1747758911; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=+ZWH6ggb1hC8uB3wzLXpUmgA6cvqTdmcA385l2vtyqo=; b=R/wK++nsRXGGxl5ZZHp7AETA95CcgiIL0xPUBTtrHadd2VGcdpwQ/NYm2rWdG5rxgO McSkEbFd7LNQqpVTpNu1UHiTNRWBb1g19i4kVANru/Iz3q4fwXrISo92Tv+dby9TdYIG Ttws4bXlrB1kZQ9nqxFMobySkVwzNFDqOq5ezGBHAxLUqVAjPBbDEA3fAYIymrCUXbxZ f5LfKFdYcBikCiZ8du2DtR3/mLNxijEjqWXS9mYCgzK0IL0MDR2kqAr2WBK3M+Th/IcQ F/FUrtL3jl5beGkQ4q9ImZv84F9c1rpmJGnKXKL17qAjX0pDwNZOXHiCdaReh1/6ZulJ qrMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747154111; x=1747758911; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+ZWH6ggb1hC8uB3wzLXpUmgA6cvqTdmcA385l2vtyqo=; b=WFbY8wBl0/oS0aoQPQIJM+ghy2X6nyQsNpuDIiNhuYKmGHngGUsqKCheUl97AzRUpy HPaCk6zIlWyFOAdRZP5af/kjVjcv0+h5x2IzEJUKcfLHa4SfRdqC9ZTGRz2WtlFYYn6K bnXTxYAKb/ZQgIYcIat1ibMtXz9E+2kmZVwXCh8StHdKfrCn9zM6tiuLm+eMrZ0RVJ+F gBwgppjTVXNOQFta3+VOdr/oP9fvSTh6pB1E9I5fsB1jei4QwEp4sQUdkCmDf7siOheF xxx9OKvPHIgHqD8UDNwBrIW6hC1mDbMlWXXt97S0wA2Rml5fVe0SBw/3mc2bwEhlVBHl Rdbg== X-Forwarded-Encrypted: i=1; AJvYcCVaXVtdJ/wsuR4PPEoaQZcFdEdLFwBF79SPTc+06MlQ+MPk2KgoHijTPDQlsG1g9kAVbyqe8YKBLw==@kvack.org X-Gm-Message-State: AOJu0Yy6zhkwR171sIPYpFwTDFMWfog3M6PF6kvLo2fwaIVAgs6LV835 DicQEjqdqD0hxdTFNizBCIC6RM4sFMlRwJ05UIJrfMtahsiwAtTerCqwulXMwCnsq/PMoj6qtA= = X-Google-Smtp-Source: AGHT+IGHTibNt10zPPbfcc7hWBFBZ+4Wb9WgnMsxL3M8OZ9mvTxE/IBubiT+QXo86B+nchX57b8DoHTPkg== X-Received: from wmbjg17.prod.google.com ([2002:a05:600c:a011:b0:441:d228:3918]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:154b:b0:441:ac58:ead5 with SMTP id 5b1f17b1804b1-442d6ddd0afmr192218995e9.31.1747154111449; Tue, 13 May 2025 09:35:11 -0700 (PDT) Date: Tue, 13 May 2025 17:34:36 +0100 In-Reply-To: <20250513163438.3942405-1-tabba@google.com> Mime-Version: 1.0 References: <20250513163438.3942405-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.1045.g170613ef41-goog Message-ID: <20250513163438.3942405-16-tabba@google.com> Subject: [PATCH v9 15/17] KVM: Introduce the KVM capability KVM_CAP_GMEM_SHARED_MEM From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, pankaj.gupta@amd.com, ira.weiny@intel.com, tabba@google.com Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: CABE440005 X-Rspam-User: X-Stat-Signature: cfz4caxuaj3uqzjmzdw3ncu3f3ot7dfb X-HE-Tag: 1747154112-982368 X-HE-Meta: U2FsdGVkX185ItgBazkQtXlxu9YtB5+Kx2Du3Yj6jeJvrbGk8aGCJSHrRh90cfEQbkhZYppyi0Geh+9Y5HDiTGc4uHEnZon1ufRwtdgz98zRiu/HmxhW6hJlh0x9JXz2uJVe6hS7pZeNsxAdBKZC8VQsk4+TpwN6H/czChHj5A4M1K2CfXl/sn5whkiX4t34EFFqutJ6xJ+QfhRaEZgSWd72l4LMNvZMDF1baOUzicVX/QB4y6H/BGOllvDp0ErPYHfvwsh7PqhLwcGJKNFwBIp6oNKWwjFoQR1sKHX/EEdsKTL5GaMIUIBflkoNeSjk9L0mMTGU6GQpEKQ8XWpKEuwimHHXjasGw9W2hs9fANjo07RfVuiBHpb2sOq1eUN4BmKFAprViVRChY8FqdSLBaJ/ZU30REJ/02Hmf3FgEWlBigQ58hfJvbpAy4BH+OZtvDcFW7usuZhJTosEwGmUnP76lUqoFRYUXZ9zSfEimvc5AwK8N6rBCdpKR8OIlzjNE9LyXVqhtOYhNT49LIOniajWOfHKVJ2GWQXD9wgseiB3v3Zj/5ahx5i9lRUPg9Ua9Uxg20eHHQSPvYwJUKwxJRVHDmt8P/FcrxuBpQf0tTOFzULeCfXQglJjUOehMUKb93xWID8zfWRd00kTq/E0wVdQWB1xQGG6g5+4az10w83UuW54A1c+SOoKz8iqfF3us2q6Ei2Y4zwONS72vjnyJA5edKJz4B5hNu1pRxswVAWLYYVoW40parWfoAZfolm/8aGMVt87IOrqn0fDyY7gBT4KKuaB85ROQKt2jAwOB3FuTKc5Re/FSrWhrqeeKxp0TJoAhwmPqLlw34YAzCPsvx3vfdq3zEt7XYBdlWQsCtVOpahGjv4Gdq9cs/2Awmrql8aINxqFGmawU/s/bvuwcy34WACZFr0hlo4Q6QJenK9ySjTWOgvm+kCIe96layxRheI54EZczwIcOOVVlYE C2XM4YdZ M0j9VYf427nMmhVXW3Ynmpa6sEt10BLVimhCyitsFaPrKp4uEx8RFTZeKxM1rnOJ8GoFXmc4zio1jCSqbFf6tNYDHYqkaDtMlUWrSYYwzA27/qqRFC4yYXELnnhFcceuCdBSkJpWshIJ8Jsq9nHrS9Vd1YRkCrNVlOMqt6eN3ycS4v0AAoiwdnAQ+PTF3fDJiOyhJygI5BAr+6KAaUbBS7vcjq+Xk2Dj+fSLmfQsFpq8Q/pKl67sHcUn6R535kBKMKbKfqrRsDrp65iyI3GBB42NZKWJ8FfoKhg/lGBWtBvREujoOAqHxV2wJe08hsAmTKQVL5+yAlzH4UXa1Z2+Ob8J1qxkRjb8Qm+1BOQUMwaiNVkbeTHf6PFP/LX3kW68KaXryc9rjs63Z2Her6uLRBKegZ0gEmq99bHlx7RUfp82CtKpRkr8LGeGfm1K/u5vEDVtTELaSRyyyncNcO4Tj5mFTCDvvZAvMcupKfhLoJ+EFL9nmiy+tAYlFYHQlJB1tgxibTL+mdC5tAz8ln8JzBJ+P8bhy0cwjCEhOPhxz58yvxe77wkkENmGaK7QtN3aKrlHLRy9xapnVEvkzbaedGk0qlZoWDA2VmGbp+sUSK8O27bFeBpsS6TqHVqQC8E7D+3ApbNikltS/+zo8tuw5jUuajw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: This patch introduces the KVM capability KVM_CAP_GMEM_SHARED_MEM, which indicates that guest_memfd supports shared memory (when enabled by the flag). This support is limited to certain VM types, determined per architecture. This patch also updates the KVM documentation with details on the new capability, flag, and other information about support for shared memory in guest_memfd. Signed-off-by: Fuad Tabba --- Documentation/virt/kvm/api.rst | 18 ++++++++++++++++++ include/uapi/linux/kvm.h | 1 + virt/kvm/kvm_main.c | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst index 47c7c3f92314..86f74ce7f12a 100644 --- a/Documentation/virt/kvm/api.rst +++ b/Documentation/virt/kvm/api.rst @@ -6390,6 +6390,24 @@ most one mapping per page, i.e. binding multiple memory regions to a single guest_memfd range is not allowed (any number of memory regions can be bound to a single guest_memfd file, but the bound ranges must not overlap). +When the capability KVM_CAP_GMEM_SHARED_MEM is supported, the 'flags' field +supports GUEST_MEMFD_FLAG_SUPPORT_SHARED. Setting this flag on guest_memfd +creation enables mmap() and faulting of guest_memfd memory to host userspace. + +When the KVM MMU performs a PFN lookup to service a guest fault and the backing +guest_memfd has the GUEST_MEMFD_FLAG_SUPPORT_SHARED set, then the fault will +always be consumed from guest_memfd, regardless of whether it is a shared or a +private fault. + +For these memslots, userspace_addr is checked to be the mmap()-ed view of the +same range specified using gmem.pgoff. Other accesses by KVM, e.g., instruction +emulation, go via slot->userspace_addr. The slot->userspace_addr field can be +set to 0 to skip this check, which indicates that KVM would not access memory +belonging to the slot via its userspace_addr. + +The use of GUEST_MEMFD_FLAG_SUPPORT_SHARED will not be allowed for CoCo VMs. +This is validated when the guest_memfd instance is bound to the VM. + See KVM_SET_USER_MEMORY_REGION2 for additional details. 4.143 KVM_PRE_FAULT_MEMORY diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 9857022a0f0c..4cc824a3a7c9 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -930,6 +930,7 @@ struct kvm_enable_cap { #define KVM_CAP_X86_APIC_BUS_CYCLES_NS 237 #define KVM_CAP_X86_GUEST_MODE 238 #define KVM_CAP_ARM_WRITABLE_IMP_ID_REGS 239 +#define KVM_CAP_GMEM_SHARED_MEM 240 struct kvm_irq_routing_irqchip { __u32 irqchip; diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 6261d8638cd2..6c75f933bfbe 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -4840,6 +4840,10 @@ static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg) #ifdef CONFIG_KVM_GMEM case KVM_CAP_GUEST_MEMFD: return !kvm || kvm_arch_supports_gmem(kvm); +#endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM + case KVM_CAP_GMEM_SHARED_MEM: + return !kvm || kvm_arch_vm_supports_gmem_shared_mem(kvm); #endif default: break; -- 2.49.0.1045.g170613ef41-goog