From patchwork Tue Feb 11 12:11:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 864171 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B27A321E08B for ; Tue, 11 Feb 2025 12:11:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739275897; cv=none; b=cQ3uEn48MPgiyMdWAXVDuaifdQYaNBPvWV9rLG6BU5Zy5qaiQ9JSXMrcWx+JQHa9z0yHiS+4Zr9vn67vUOPeyx9eHIEn9uXy/Yd1XLicq9/RrOK199lT6nub6PfJ96ly71ZegSfPcJh17imjLgVhEBKZy/uGGvUS4rYq2CToCck= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739275897; c=relaxed/simple; bh=DjLAQsoXdnPl6GrE+/GdZCahvPNjPTRXwCDe2y5OqLM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=igj7z75yxDyB0xemNJgrIk3YTQvH103wrNdM4K9wmy6Kwv1VggiAEnWXLIrgGp8rj3lx7T+J6IB/9tQOLbfLi8WAE00amhsooUE5YVOJhAVyDS5oIZ2pVIEL59q5SP+dccc4udT20C6h9ethDsFMBJP07+9sFh9VaGggB3gMUO0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=R3QDRiSI; arc=none smtp.client-ip=209.85.128.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="R3QDRiSI" Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-4394c489babso6415105e9.1 for ; Tue, 11 Feb 2025 04:11:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275894; x=1739880694; darn=vger.kernel.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=sWMrByBHh6bCcS+Ah6m7GoQirIP0Jem/nT3gsSQXFpI=; b=R3QDRiSIQRlhy2Tp9S0t4jmSLmVCcEXaTaeYftpPN5PFtcpuFrDn1TljeqpZWchmba kln1J+33DsBKa+guDyAuOUdU5LQSyQV6HfWQNgbtPO/VQHDMCaOWKUUl2CViBZwA21Q8 cCmaOGjuAWl/ctV7iIGXhGVzEGtWV0eShd1YIvZjIIi0oBajOw48Iu3hkkgpva4JmCWt HVMRm4k+AdAyyPtH3Hm4YMDmn2U7hreDrTZMWRR2rM4py2pxlo4IydmzW3ovv5NvE2Fa NU8dxe9Ud7rGZmvL4nwPZ8PF+eg5GMesNyUgvmLDSAILlQN1qvKShTfTysSaNPv+5ipj ngfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275894; x=1739880694; 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=sWMrByBHh6bCcS+Ah6m7GoQirIP0Jem/nT3gsSQXFpI=; b=vE9o2KDH44yppCYLrWTmWS9BsQpE9OqJSblIdmrqlWfj0UvqaK0Y7InG9CQA2KtDi+ Ch/UzUmq6+h8g5D+pePJErhG74Mb7p3jw3zjQqaWobNjhw9RYOwtKI+LllN78x4n9TaC MVTGWUtUcpi8NIteZ3v5qjO1WY9Cna5ty7EjR+xV7XwVrxS7AW+xQR/oHy9sfxq4CTpN 21koitf1bEeg4LJCyeGKkSY2MkNh4Kcv9O37i9Q/ThJKdwyCy8oXLHFlxJ9gbgz955DE zQbc3EzFFBPlMRwpkLTfyl82bF87qV9hBgQmgi0bvHsuFzvRC2gzq7obNDrRMDO1qip4 mXsA== X-Forwarded-Encrypted: i=1; AJvYcCUiLlcSPERojY6pFKaDt/7w3ySKK0TBHVO3F+2uvlNPt1jBhsnHH3aELX5YDOkw0AqpB4YOGcKj0Z8RR67C@vger.kernel.org X-Gm-Message-State: AOJu0YzLk3EgtiZbDAjw/2Dfi9g/dCtskHM2+B4GN/coDmGwE0K/6aQ7 GsNxhSXrQTL2wYOt6yM+79iu/Ue+hX00eQMSFSDSGuAGQfuJZN7YHC/GzQxW2bUWa3BBe56y5g= = X-Google-Smtp-Source: AGHT+IE8Ghyq44OOrdMI7rTy32U9k2qC1vm1QBwY+iABDYDzlSXr3Wt1H56p+D7BVdWhTRPrbKtMom5fBA== X-Received: from wmgg10.prod.google.com ([2002:a05:600d:a:b0:439:432f:cc11]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:ccf:b0:439:56f3:d40f with SMTP id 5b1f17b1804b1-43956f3d5c3mr1028375e9.21.1739275894075; Tue, 11 Feb 2025 04:11:34 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:18 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-3-tabba@google.com> Subject: [PATCH v3 02/11] KVM: guest_memfd: Handle final folio_put() of guest_memfd pages 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, yu.c.zhang@linux.intel.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, tabba@google.com Before transitioning a guest_memfd folio to unshared, thereby disallowing access by the host and allowing the hypervisor to transition its view of the guest page as private, we need to be sure that the host doesn't have any references to the folio. This patch introduces a new type for guest_memfd folios, which isn't activated in this series but is here as a placeholder and to facilitate the code in the next patch. This will be used in the future to register a callback that informs the guest_memfd subsystem when the last reference is dropped, therefore knowing that the host doesn't have any remaining references. Signed-off-by: Fuad Tabba --- include/linux/kvm_host.h | 9 +++++++++ include/linux/page-flags.h | 17 +++++++++++++++++ mm/debug.c | 1 + mm/swap.c | 9 +++++++++ virt/kvm/guest_memfd.c | 7 +++++++ 5 files changed, 43 insertions(+) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index f34f4cfaa513..8b5f28f6efff 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2571,4 +2571,13 @@ long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu, struct kvm_pre_fault_memory *range); #endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +void kvm_gmem_handle_folio_put(struct folio *folio); +#else +static inline void kvm_gmem_handle_folio_put(struct folio *folio) +{ + WARN_ON_ONCE(1); +} +#endif + #endif diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 6dc2494bd002..734afda268ab 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -933,6 +933,17 @@ enum pagetype { PGTY_slab = 0xf5, PGTY_zsmalloc = 0xf6, PGTY_unaccepted = 0xf7, + /* + * guestmem folios are used to back VM memory as managed by guest_memfd. + * Once the last reference is put, instead of freeing these folios back + * to the page allocator, they are returned to guest_memfd. + * + * For now, guestmem will only be set on these folios as long as they + * cannot be mapped to user space ("private state"), with the plan of + * always setting that type once typed folios can be mapped to user + * space cleanly. + */ + PGTY_guestmem = 0xf8, PGTY_mapcount_underflow = 0xff }; @@ -1082,6 +1093,12 @@ FOLIO_TYPE_OPS(hugetlb, hugetlb) FOLIO_TEST_FLAG_FALSE(hugetlb) #endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +FOLIO_TYPE_OPS(guestmem, guestmem) +#else +FOLIO_TEST_FLAG_FALSE(guestmem) +#endif + PAGE_TYPE_OPS(Zsmalloc, zsmalloc, zsmalloc) /* diff --git a/mm/debug.c b/mm/debug.c index 8d2acf432385..08bc42c6cba8 100644 --- a/mm/debug.c +++ b/mm/debug.c @@ -56,6 +56,7 @@ static const char *page_type_names[] = { DEF_PAGETYPE_NAME(table), DEF_PAGETYPE_NAME(buddy), DEF_PAGETYPE_NAME(unaccepted), + DEF_PAGETYPE_NAME(guestmem), }; static const char *page_type_name(unsigned int page_type) diff --git a/mm/swap.c b/mm/swap.c index 47bc1bb919cc..241880a46358 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -38,6 +38,10 @@ #include #include +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +#include +#endif + #include "internal.h" #define CREATE_TRACE_POINTS @@ -101,6 +105,11 @@ static void free_typed_folio(struct folio *folio) case PGTY_hugetlb: free_huge_folio(folio); return; +#endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM + case PGTY_guestmem: + kvm_gmem_handle_folio_put(folio); + return; #endif default: WARN_ON_ONCE(1); diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index b2aa6bf24d3a..c6f6792bec2a 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -312,6 +312,13 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn) return gfn - slot->base_gfn + slot->gmem.pgoff; } +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +void kvm_gmem_handle_folio_put(struct folio *folio) +{ + WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); +} +#endif /* CONFIG_KVM_GMEM_SHARED_MEM */ + static struct file_operations kvm_gmem_fops = { .open = generic_file_open, .release = kvm_gmem_release, From patchwork Tue Feb 11 12:11:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 864170 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9774221D9C for ; Tue, 11 Feb 2025 12:11:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739275901; cv=none; b=rgogI2UR7X/d6PU2RSfPapHkQYHV8L7Vo3B3wsJMHIwAcfQP7LQ1FlxGbIZNnbr/dAHEASi+9PSdfZz1/LI+NsOVkG6FlE5njSRpnRcu+BL1ep/RJzlXim1p70/mK3lNaIh6AxoGH7PxxaUZKnOAKQ2uPQxPfdRmaefAQPgzl08= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739275901; c=relaxed/simple; bh=wJDNPUbPulY91yymWFntWwTBzvEsNR4qKkxfhIjiVic=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Mem5aI2Vt5rdlyt2b/+i0X5yJvZJUst0whdNz/PEdAkIt6hjVhxbbYKCiJCLW87iyL35v+YbG1CmdCJBEiBtNT5sRH+lEN9OcoQquUDZkmaQEHiEZG+AobtFRnsSq21YQeERZdoWlm1ie6LYijj+ZJgL9MpIRDZXWd8Wm0esIOA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Eh/om10r; arc=none smtp.client-ip=209.85.128.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Eh/om10r" Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43935bcec0aso22508495e9.3 for ; Tue, 11 Feb 2025 04:11:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275898; x=1739880698; darn=vger.kernel.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=VoOoWnCPGl4HcCb1I6zbkoc8AjEeP+ezJ3rNmGf66Z0=; b=Eh/om10rNOyPf1rZj5bOSADDW6rp513VI8ghX/5Lh/CyYC3eAb0mrBrDGzwVoyNms1 mcTIB2/mcctIix85Sc6P40zxRqhpwThnEvCUBcFLda7pfvqHk6N2fyenKyJ2Vjraaa7C uBILh73D40yhtDO2721bDpNgXdmxXqVrAmrmhIno7qadJta2H3YfQkTT211VEnn36Kcd WXDrrTzWdajZOveq7bdagToOyddOPn+mFWn79ZuAbADFpgeefu9kEW49kkrA82wvs7lY xe/S6OVQL04TkRPc2la01be+6pmGm3cRkGsy8OfwhPKwIAsRhmljeUpU1wzgObaJVPUH lexA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275898; x=1739880698; 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=VoOoWnCPGl4HcCb1I6zbkoc8AjEeP+ezJ3rNmGf66Z0=; b=D+8oAQvdG37n218Vq81y8DihutIGZ4N20iJbGRhJohpBCm4uf5NHIdg3pC0tw226SZ 6I59hc+BK7NOoSM/plLUc9BUy9EnUkB7/R8R1cOEBbJBgU7/NqyAvrg0jJTZT11bBJR5 WLkV3ilDYcSg8633yXLz8dbdhaMveM9IxZb47ztmQwrqefhxoUFKHx+AZr7iq3NDbQ1E YORSS9yEFk082tqZwyzHvvyJSBtu3eDPijHr0DJYA4Wz8Zwk1p0tBsLGmEOaaL/BJEZ+ NCYdqfuLJHTjqrrjsA33dNrz4JFmwwIVOea5oz5NEg5UVTGBf1rNAa3cR03f9egHUzz9 rSCg== X-Forwarded-Encrypted: i=1; AJvYcCV9uBWOnIZDwDUWirUSHWltTDcgsIwHSjWfrAErUh/c+X5WTE0qLoCFSPLQbf5zBMeRtRkiCfU6iBgDgZnx@vger.kernel.org X-Gm-Message-State: AOJu0YytyyHk11D2wO70d/wJpesuy66c9vGOw7zwPnW7Zt+lb6L0isCD UGwtfzJ0j/1i/nst8151St0AQZbNXi844Ts4VdOGPi42YVP491LvbLE+JyF4wHx3AygoytsGCg= = X-Google-Smtp-Source: AGHT+IH0eOMmKp8sDSfZvGefzukx2BbOVxp2ECFy0DQe4p4PevxPpr9NYmFYN4kr9FPJEdUBhdy96NX0RQ== X-Received: from wmbfm6.prod.google.com ([2002:a05:600c:c06:b0:439:40af:60e9]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1c03:b0:439:4df5:5d41 with SMTP id 5b1f17b1804b1-4394df55f1emr27500045e9.11.1739275898177; Tue, 11 Feb 2025 04:11:38 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:20 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-5-tabba@google.com> Subject: [PATCH v3 04/11] KVM: guest_memfd: Add KVM capability to check if guest_memfd is shared 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, yu.c.zhang@linux.intel.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, tabba@google.com Add the KVM capability KVM_CAP_GMEM_SHARED_MEM, which indicates that the VM supports shared memory in guest_memfd, or that the host can create VMs that support shared memory. Supporting shared memory implies that memory can be mapped when shared with the host. Signed-off-by: Fuad Tabba --- include/uapi/linux/kvm.h | 1 + virt/kvm/kvm_main.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 45e6d8fca9b9..117937a895da 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -929,6 +929,7 @@ struct kvm_enable_cap { #define KVM_CAP_PRE_FAULT_MEMORY 236 #define KVM_CAP_X86_APIC_BUS_CYCLES_NS 237 #define KVM_CAP_X86_GUEST_MODE 238 +#define KVM_CAP_GMEM_SHARED_MEM 239 struct kvm_irq_routing_irqchip { __u32 irqchip; diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index ba0327e2d0d3..38f0f402ea46 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -4830,6 +4830,10 @@ static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg) #ifdef CONFIG_KVM_PRIVATE_MEM case KVM_CAP_GUEST_MEMFD: return !kvm || kvm_arch_has_private_mem(kvm); +#endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM + case KVM_CAP_GMEM_SHARED_MEM: + return !kvm || kvm_arch_gmem_supports_shared_mem(kvm); #endif default: break; From patchwork Tue Feb 11 12:11:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 864169 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EC8DF230276 for ; Tue, 11 Feb 2025 12:11:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739275905; cv=none; b=PaMkmXJKyKP5/Wb925D2IGl+ke0vTgJEbTMdIEkwwYWL8nNFEG2OVKEZ23inn7d0Ly5PqpoufZESdFX2PJvtX2A/IMwB1PEwUbATxPJKGE/A9/I5q1vrpd1vb7rjI6EBT8vhSGi/VHfVkeiNjHpHPvqQH8anQtdhkYN8Iu/Otmk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739275905; c=relaxed/simple; bh=k+3OFnLM2NMDoQpYe/i6ltXhsVyBeC0rDOk8mBxA1Zg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ctjnTArSGzSoRj6BASPZDYGJtKprxLPoFxQmGy2mT/c+7ZoQIr44aoi7cAuL2Q2QB526E0wU/8StCTcj5CLxHs4pcdlG4Y6hci5psauB/USfQ3iNMU91saFiGaeOMEWlifeO3k6ajWjEvUDWOBezWkNxxaEq073aXWSSyUu1q+k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=XvyQYwLD; arc=none smtp.client-ip=209.85.221.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XvyQYwLD" Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-38de0a98043so772437f8f.3 for ; Tue, 11 Feb 2025 04:11:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275902; x=1739880702; darn=vger.kernel.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=KX7W4swHrFK90elybvizfO8dqWilJCD1C4Wf1fKXSTM=; b=XvyQYwLDJsIXlkD9w/7HUfDfZ5Tnc3pCitKZl1Fl4aYWQ3B7NuxAhP0eiLnkDjM2ml 5tHHxxyTXP/3F0Bn7+reWFyRtPGKtVLAao3Nv9AYX6HpEzKNXea22kkaCU6QXc08Kc5z WHNLvSBUHFtVkZL3TE4gEWPkWAaQgfMb6GXnHLbMqeSK132QyN5AEw+OGSIrsEgZr5uk l3Yzde+udHeJSzVM5Yg6xunGsjkX+9LwdcRzaw/Kxr/5NDdHGzflwJwPvo2V5d6smLaU ogsAg5NgYVrTNaXf9zgkqqKRUgB11BJOZY9EPhrHRhv81X4Qx9qFdiqn6AGoLIk7lFBY EieA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275902; x=1739880702; 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=KX7W4swHrFK90elybvizfO8dqWilJCD1C4Wf1fKXSTM=; b=B6Q0+4Hn14KH71RYBXTw9tLWKfC7JqQqqLbOnEOxOMRPo7LYlo7Jv8XSvkiecCHLEf 9RBF8YDWj6CyZ3wVp96DtMNage94j15xfOV35jLDdJmBV4inHKwmOeP/+kBlFWOt4gVX fi5hOtLH1yDwQBwN83siMwXWWYyCgH8UJeQNbe4QrDnVHIFAq1WgyAFlXWcNlretozYI nCa98IBfdlsFt68lC0l0qMw02LTNP1idK6/QmOrWK98ubiHtkMEKkaiJo86S2HUJh5Sp Bi1SVtMNTT1CmyeP2WM0plco7B86JXQj9VLJI5cjP9ie/jtzFrA4V/AzQkrXKFNsO9wh N4Cw== X-Forwarded-Encrypted: i=1; AJvYcCVUrFC2aDuE6qQO9VjUAjzPZ2N0A2sta6XcQfUSofnwoa8l/NavI/vWMu+QIytjW8lSLkQaCm1Dpk+ZjhkB@vger.kernel.org X-Gm-Message-State: AOJu0Yy1kD3Az/wvsxweOSOBnUEt8eG6uWN5BVPXxYo7fWY1K3/wHkbt FbM8EAgqAu1ZFO6u7j4mlcc56lJKQb/jLvzuUE4i2iWBsLYfwcKDQkt0Lg5Z9PLEzF+eDpeizQ= = X-Google-Smtp-Source: AGHT+IHXKJom7Ftu5yovrPwrI10XpRYiY2qBWkBSoqtXJLa6Rrj1843rKF5OjouXY03AyaMgB0W+/vXsEg== X-Received: from wmqe4.prod.google.com ([2002:a05:600c:4e44:b0:439:3284:878b]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:1887:b0:38d:e430:8ec7 with SMTP id ffacd0b85a97d-38de4309088mr3236903f8f.15.1739275902164; Tue, 11 Feb 2025 04:11:42 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:22 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-7-tabba@google.com> Subject: [PATCH v3 06/11] KVM: x86: Mark KVM_X86_SW_PROTECTED_VM as supporting guest_memfd shared memory 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, yu.c.zhang@linux.intel.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, tabba@google.com The KVM_X86_SW_PROTECTED_VM type is meant for experimentation and does not have any underlying support for protected guests. This makes it a good candidate for testing mapping shared memory. Therefore, when the kconfig option is enabled, mark KVM_X86_SW_PROTECTED_VM as supporting shared memory. This means that this memory is considered by guest_memfd to be shared with the host, with the possibility of in-place conversion between shared and private. This allows the host to map and fault in guest_memfd memory belonging to this VM type. Signed-off-by: Fuad Tabba --- arch/x86/include/asm/kvm_host.h | 5 +++++ arch/x86/kvm/Kconfig | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index b15cde0a9b5c..1fb6cacbbeef 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -2244,8 +2244,13 @@ void kvm_configure_mmu(bool enable_tdp, int tdp_forced_root_level, #ifdef CONFIG_KVM_PRIVATE_MEM #define kvm_arch_has_private_mem(kvm) ((kvm)->arch.has_private_mem) + +#define kvm_arch_gmem_supports_shared_mem(kvm) \ + (IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM) && \ + ((kvm)->arch.vm_type == KVM_X86_SW_PROTECTED_VM)) #else #define kvm_arch_has_private_mem(kvm) false +#define kvm_arch_gmem_supports_shared_mem(kvm) false #endif #define kvm_arch_has_readonly_mem(kvm) (!(kvm)->arch.has_protected_state) diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig index ea2c4f21c1ca..22d1bcdaad58 100644 --- a/arch/x86/kvm/Kconfig +++ b/arch/x86/kvm/Kconfig @@ -45,7 +45,8 @@ config KVM_X86 select HAVE_KVM_PM_NOTIFIER if PM select KVM_GENERIC_HARDWARE_ENABLING select KVM_GENERIC_PRE_FAULT_MEMORY - select KVM_GENERIC_PRIVATE_MEM if KVM_SW_PROTECTED_VM + select KVM_PRIVATE_MEM if KVM_SW_PROTECTED_VM + select KVM_GMEM_SHARED_MEM if KVM_SW_PROTECTED_VM select KVM_WERROR if WERROR config KVM From patchwork Tue Feb 11 12:11:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 864168 Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4CDAD2441B0 for ; Tue, 11 Feb 2025 12:11:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739275910; cv=none; b=BOSkuqcOdGlBeNGdHZSxbPxxnxNB6b6JOb08bm/ZdmJgpO2RZAgm+XkP6AAYMUTrUuBTdDeYx2dSPfSlfm7lKNliYANwxm66W5QYNJLHqDXUGI3xgwwc2+X+7NqsEVVjxrJu5qnrZcVa00nsEMdU73IqqR3rSj4Sk0lbzB4citg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739275910; c=relaxed/simple; bh=+aFDNxcNb5lE2L1C2164P8GbTEPp8AZ3UFOEhPeXs7M=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=BacMewdUPeMYnpuS8qWMQ7Lwt/9ElmQ+ALZK5wahnQpX/IKTk63jsvLp+RAuRXmlbLcHO9FcyVKRgC7WA1QMYwzTBDIHUzgeBCWJraSn3Ri5VyThYT18SN32ebmmls+1s8agahPtbV9ZPlR+eVYiGWNjvLTIu/dMTTIVHVOIha4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=cwm6FTfF; arc=none smtp.client-ip=209.85.221.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="cwm6FTfF" Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-38dcc9653caso1149651f8f.2 for ; Tue, 11 Feb 2025 04:11:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275906; x=1739880706; darn=vger.kernel.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=aEy+uMDhoWpq4iTCT5JLvzuI0rE/4/GuORtNn1GWkCY=; b=cwm6FTfFrgxPBCO9M5Zyo7qWPXdl0qiUavWipmJLs8vqwyWqZL+jrTlkGaYbfQ7b6M Nx8BSQTkhswkYAqVPw++HJ8JWvEBF666kolD8i4PCppai5Gtmv/Kq2Bfv8Vv2eP9ZMgC THhyv/NuZ/0rWWyeVwaAdC1D7dcFNkP8P/AItIbr4TYr8VWl5acz4JSI1hRuR7jmbCtK sGrmqvMrCYhlxvgC/rFeS6JpkKt89UfWI76eOddIiigsR+pwWWI8AEmp8m53dkW0471j RfryVwowbHrh0nAVAAs07eCpXoxfULb7sWvP5TaK2jbYxG1EBL2/lgvUmazEy/KsWbjv L7Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275906; x=1739880706; 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=aEy+uMDhoWpq4iTCT5JLvzuI0rE/4/GuORtNn1GWkCY=; b=Izesm+a4UHvMeUfrPnoP8nW52QY4/gy1/YETv+eFs5dMnJVhFq0n95N/7o6u5Ful4I 5zpZ3DikK9syO8yqfGQK/JGzicU5TN/8nGUSIbI0ZyeThvanvePOGZKLgaQ/nAFgl206 2aZ08oZDMfFQlBPI4HrPo/QzFztfPtjk0vrXLzL+x3D/r2OQ7AEiTGZKdL1p+tSLGfaR AmTWE5X23gjGlqrOGtHza8u+VehizVIJhbL89OKce+Zsqcazh+cw9Kd9w5ribJBxN0eL 60JSPzJ1Ex2H988Dp1uZAhzWfQJ3qoxc7oVZJLrfB4qYcn+ZzYAI+qyz4eS/yvY/4VEk n1gg== X-Forwarded-Encrypted: i=1; AJvYcCWeK4+HiPKyRiTHtmh0oyRP0iw+zp2WuJ5eUAWs0B5Z9dNXGZJThMiXLj6fe7v3bUnv07c2V33OXCtkA9P8@vger.kernel.org X-Gm-Message-State: AOJu0YxPuXexcuxepZRqx0+3xzyAyiYwjam6AJfgZdfTKN4vFMIx4NMb DwZi+ouXYnI0y24FREeM9Ia2l4KzA3RcjsBTlz/cZqmEJST+PK3HemiLMYPGbJligK35xX/XLQ= = X-Google-Smtp-Source: AGHT+IFpMluwBrp1e1iVvzK5nRkJpIOD6K8YzM5QfPfRoI4YahF/GtcuCoo0tDbujX6eAm2iyJ7gmW+WFg== X-Received: from wmbhc12.prod.google.com ([2002:a05:600c:870c:b0:434:f2eb:aa72]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:59a9:0:b0:38d:db8b:f50a with SMTP id ffacd0b85a97d-38ddb8bf6efmr8898263f8f.24.1739275906632; Tue, 11 Feb 2025 04:11:46 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:24 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-9-tabba@google.com> Subject: [PATCH v3 08/11] KVM: arm64: Handle guest_memfd()-backed guest page faults 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, yu.c.zhang@linux.intel.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, tabba@google.com Add arm64 support for handling guest page faults on guest_memfd backed memslots. For now, the fault granule is restricted to PAGE_SIZE. Signed-off-by: Fuad Tabba --- arch/arm64/kvm/mmu.c | 84 ++++++++++++++++++++++++++-------------- include/linux/kvm_host.h | 5 +++ virt/kvm/kvm_main.c | 5 --- 3 files changed, 61 insertions(+), 33 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index b6c0acb2311c..305060518766 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1454,6 +1454,33 @@ static bool kvm_vma_mte_allowed(struct vm_area_struct *vma) return vma->vm_flags & VM_MTE_ALLOWED; } +static kvm_pfn_t faultin_pfn(struct kvm *kvm, struct kvm_memory_slot *slot, + gfn_t gfn, bool write_fault, bool *writable, + struct page **page, bool is_private) +{ + kvm_pfn_t pfn; + int ret; + + if (!is_private) + return __kvm_faultin_pfn(slot, gfn, write_fault ? FOLL_WRITE : 0, writable, page); + + *writable = false; + + if (WARN_ON_ONCE(write_fault && memslot_is_readonly(slot))) + return KVM_PFN_ERR_NOSLOT_MASK; + + ret = kvm_gmem_get_pfn(kvm, slot, gfn, &pfn, page, NULL); + if (!ret) { + *writable = write_fault; + return pfn; + } + + if (ret == -EHWPOISON) + return KVM_PFN_ERR_HWPOISON; + + return KVM_PFN_ERR_NOSLOT_MASK; +} + static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, struct kvm_s2_trans *nested, struct kvm_memory_slot *memslot, unsigned long hva, @@ -1461,25 +1488,26 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, { int ret = 0; bool write_fault, writable; - bool exec_fault, mte_allowed; + bool exec_fault, mte_allowed = false; bool device = false, vfio_allow_any_uc = false; unsigned long mmu_seq; phys_addr_t ipa = fault_ipa; struct kvm *kvm = vcpu->kvm; - struct vm_area_struct *vma; + struct vm_area_struct *vma = NULL; short vma_shift; void *memcache; - gfn_t gfn; + gfn_t gfn = ipa >> PAGE_SHIFT; kvm_pfn_t pfn; bool logging_active = memslot_is_logging(memslot); - bool force_pte = logging_active || is_protected_kvm_enabled(); - long vma_pagesize, fault_granule; + bool is_private = kvm_mem_is_private(kvm, gfn); + bool force_pte = logging_active || is_private || is_protected_kvm_enabled(); + long vma_pagesize, fault_granule = PAGE_SIZE; enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R; struct kvm_pgtable *pgt; struct page *page; enum kvm_pgtable_walk_flags flags = KVM_PGTABLE_WALK_HANDLE_FAULT | KVM_PGTABLE_WALK_SHARED; - if (fault_is_perm) + if (fault_is_perm && !is_private) fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu); write_fault = kvm_is_write_fault(vcpu); exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu); @@ -1510,24 +1538,30 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, return ret; } + mmap_read_lock(current->mm); + /* * Let's check if we will get back a huge page backed by hugetlbfs, or * get block mapping for device MMIO region. */ - mmap_read_lock(current->mm); - vma = vma_lookup(current->mm, hva); - if (unlikely(!vma)) { - kvm_err("Failed to find VMA for hva 0x%lx\n", hva); - mmap_read_unlock(current->mm); - return -EFAULT; - } + if (!is_private) { + vma = vma_lookup(current->mm, hva); + if (unlikely(!vma)) { + kvm_err("Failed to find VMA for hva 0x%lx\n", hva); + mmap_read_unlock(current->mm); + return -EFAULT; + } - /* - * logging_active is guaranteed to never be true for VM_PFNMAP - * memslots. - */ - if (WARN_ON_ONCE(logging_active && (vma->vm_flags & VM_PFNMAP))) - return -EFAULT; + /* + * logging_active is guaranteed to never be true for VM_PFNMAP + * memslots. + */ + if (WARN_ON_ONCE(logging_active && (vma->vm_flags & VM_PFNMAP))) + return -EFAULT; + + vfio_allow_any_uc = vma->vm_flags & VM_ALLOW_ANY_UNCACHED; + mte_allowed = kvm_vma_mte_allowed(vma); + } if (force_pte) vma_shift = PAGE_SHIFT; @@ -1597,18 +1631,13 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, ipa &= ~(vma_pagesize - 1); } - gfn = ipa >> PAGE_SHIFT; - mte_allowed = kvm_vma_mte_allowed(vma); - - vfio_allow_any_uc = vma->vm_flags & VM_ALLOW_ANY_UNCACHED; - /* Don't use the VMA after the unlock -- it may have vanished */ vma = NULL; /* * Read mmu_invalidate_seq so that KVM can detect if the results of - * vma_lookup() or __kvm_faultin_pfn() become stale prior to - * acquiring kvm->mmu_lock. + * vma_lookup() or faultin_pfn() become stale prior to acquiring + * kvm->mmu_lock. * * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs * with the smp_wmb() in kvm_mmu_invalidate_end(). @@ -1616,8 +1645,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, mmu_seq = vcpu->kvm->mmu_invalidate_seq; mmap_read_unlock(current->mm); - pfn = __kvm_faultin_pfn(memslot, gfn, write_fault ? FOLL_WRITE : 0, - &writable, &page); + pfn = faultin_pfn(kvm, memslot, gfn, write_fault, &writable, &page, is_private); if (pfn == KVM_PFN_ERR_HWPOISON) { kvm_send_hwpoison_signal(hva, vma_shift); return 0; diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 39fd6e35c723..415c6274aede 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1882,6 +1882,11 @@ static inline int memslot_id(struct kvm *kvm, gfn_t gfn) return gfn_to_memslot(kvm, gfn)->id; } +static inline bool memslot_is_readonly(const struct kvm_memory_slot *slot) +{ + return slot->flags & KVM_MEM_READONLY; +} + static inline gfn_t hva_to_gfn_memslot(unsigned long hva, struct kvm_memory_slot *slot) { diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 38f0f402ea46..3e40acb9f5c0 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2624,11 +2624,6 @@ unsigned long kvm_host_page_size(struct kvm_vcpu *vcpu, gfn_t gfn) return size; } -static bool memslot_is_readonly(const struct kvm_memory_slot *slot) -{ - return slot->flags & KVM_MEM_READONLY; -} - static unsigned long __gfn_to_hva_many(const struct kvm_memory_slot *slot, gfn_t gfn, gfn_t *nr_pages, bool write) { From patchwork Tue Feb 11 12:11:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 864167 Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 024862512E8 for ; Tue, 11 Feb 2025 12:11:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739275914; cv=none; b=g963REXjFBc2i4erJNok77//D1RzXwgQQG2puXhK9H46RYC3cL8yHbtsGLoj8kx+yqSrngb7+BphkhDYQlXgOlZetaoxc9oCFofKrI4YocyQppUn1STB2DNUdxVsSPBe2yPV9oJKo/keef3FMVgG7Ty/fvWRzXcBOoUqLzXJxtk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739275914; c=relaxed/simple; bh=Xjz8ZI7LqjSb0qALmI99DAbNRCMwGMVjteTHHYQ4dJQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QL9n92iyMdsAMuFzPxW5RakyGhA6lAwWruLC/UcuDnDZk4sYAxGzPrUOY/YMSp+OBFXOkM+yAEgOOI9XLe2/2/ep22j5yunCTzKZo98I7D1anVtzoesKj3KRx4CE+u+ERnGtMUv14BtmcpwoUZ8zvGT8rh6svp1kqCPtIvqx+jM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=kUNzIIwq; arc=none smtp.client-ip=209.85.221.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="kUNzIIwq" Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-38dbdc2926eso237f8f.2 for ; Tue, 11 Feb 2025 04:11:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275911; x=1739880711; darn=vger.kernel.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=9SmIo8QGaSGW4O/nm3ipq/SJW3NddPOH9GGmfIatxcE=; b=kUNzIIwqnbluC+H7Brm6hqJsAfIUzWP0idHXR+zDdKcBDeeU+vZbCNZkmSBPWrMQWK TTd9UZkwjGWBzkm5v9w3nHQU0/RnKNgOllust1F5/Opq9oWeOR+l2Zkoq5TPRy1TpkpN dCUBY8i9gMt68aiSIwPq6A0Httw+sqxjz9FeX9l8sjIE75UrEFvX+hDYe4MEn+ljvcGT 0t3Oia28httljmZbpcFuLujRfVxyNRTQfEqfxqXy/UDeFV0dXKzyzoPaOZNY5IlLZeB5 i08GKfc7d+vTb8a/KjkT1YIvoE4/YbzebixwG0aTFO7WtLcem4hHW18f9bSP8jDJk26N wkTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275911; x=1739880711; 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=9SmIo8QGaSGW4O/nm3ipq/SJW3NddPOH9GGmfIatxcE=; b=jGrM9zHQRciH1UPMSwwFS4zn2Gh7sYEJT8M/8m+nNAXt/p04nNfovHOS/+A4fEyz58 Ujxlo3wvxfRqXtkrWZd9wIzTHHHvGfzdU1U8gzlukDuzHzDgvhisG3ang8Lgm+pcaEj0 O/8TW7dV9oQnyTQo/fKjDWCuOdeXJ195J4B7DSrplV6XUJleepijbs9IKSt8n4Z8ncYm rDNm53HF+TV3GN7NhYGxEoi/KI/8ZC7dvWtwS9MNYakXLRCCSbLvoY7MtpHSJNGc/F8P hB0Z+UTZFLX6VedTJc3svJDnruGg7C93hg9qtU5YtmrUsHobXFUDxa70pfCfTw4kYsjS rD0Q== X-Forwarded-Encrypted: i=1; AJvYcCVQZoujaqme2do1zx5NMZ4BiEujp5QaNNFrPgyn5VFQxS02uo/H1xpay5nMo6W+JlgcPIOWLyGK+msJmesH@vger.kernel.org X-Gm-Message-State: AOJu0Yy6q/zZZjYp/Z41Yi5TcT9A/EYR/cNo+lLJxlWchSEX9uHuoLAB 8Hxcg5dTQm/B+idRa5QdkzvggyCMuRMRvM+PhQjPbnirs+NW1SQdNlooHvRlnfK31tgO9EBOkg= = X-Google-Smtp-Source: AGHT+IH0xuxWTGEs9x087sQRaUuSBVW+q25VqdZB2aOt6dDiT4Tp+EMY0I0pqw4sShmqWhjrTgxeK/obMw== X-Received: from wmbay40.prod.google.com ([2002:a05:600c:1e28:b0:439:3e30:957a]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:47c3:0:b0:38d:e166:8dc2 with SMTP id ffacd0b85a97d-38de1669178mr6366905f8f.16.1739275911124; Tue, 11 Feb 2025 04:11:51 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:26 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-11-tabba@google.com> Subject: [PATCH v3 10/11] KVM: arm64: Enable mapping guest_memfd in arm64 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, yu.c.zhang@linux.intel.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, tabba@google.com Enable mapping guest_memfd in arm64, which would only apply to VMs with the type KVM_VM_TYPE_ARM_SW_PROTECTED. Signed-off-by: Fuad Tabba --- arch/arm64/kvm/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig index ead632ad01b4..4830d8805bed 100644 --- a/arch/arm64/kvm/Kconfig +++ b/arch/arm64/kvm/Kconfig @@ -38,6 +38,7 @@ menuconfig KVM select HAVE_KVM_VCPU_RUN_PID_CHANGE select SCHED_INFO select GUEST_PERF_EVENTS if PERF_EVENTS + select KVM_GMEM_SHARED_MEM help Support hosting virtualized guest machines.