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 823B5C3ABC9 for ; Fri, 16 May 2025 19:22:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6E0A86B00CB; Fri, 16 May 2025 15:22:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 68F4F6B00CC; Fri, 16 May 2025 15:22:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 588B36B00CD; Fri, 16 May 2025 15:22:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 38B836B00CB for ; Fri, 16 May 2025 15:22:36 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 4BF03BEBF6 for ; Fri, 16 May 2025 19:22:37 +0000 (UTC) X-FDA: 83449742754.30.5B17539 Received: from mail-yw1-f177.google.com (mail-yw1-f177.google.com [209.85.128.177]) by imf12.hostedemail.com (Postfix) with ESMTP id 7316440005 for ; Fri, 16 May 2025 19:22:35 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=FLUb2kTz; spf=pass (imf12.hostedemail.com: domain of jthoughton@google.com designates 209.85.128.177 as permitted sender) smtp.mailfrom=jthoughton@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1747423355; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=X5csGcQ8badg6OQc2j12fcylP9C8BoCep+FBckAp9xQ=; b=hugBZjHI/nddOS0A/bx8KCmddVx/I/wA8MTgFRKdIqHTcNm2yOcTK01MJXhB6uEsCkV1eQ owyPVvMpA6qT3618IEzUtarRLcpa5P6NJuXPvFS+FNd2nFcwGIzZnCZfb6+qYp+I1r2fi+ pswZXUL8Qkx1whqW/7V6CsgDGVHaV8s= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=FLUb2kTz; spf=pass (imf12.hostedemail.com: domain of jthoughton@google.com designates 209.85.128.177 as permitted sender) smtp.mailfrom=jthoughton@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1747423355; a=rsa-sha256; cv=none; b=CNNNuinhyvGcq3THX6zGcDWL7jV8fK0FvWlXQje9ChLk3KFlJ0QVrMWfm3kjVBdv2360u0 yp+VHvXmZaKaYJEBUQMmjPmrtN0oBhaa984l3uV3k8OVYfbRtjvy7FJahsNuUJi5PK8+GV JA3pcuwwml2VHcitmhV5W0VPY2rA9Cg= Received: by mail-yw1-f177.google.com with SMTP id 00721157ae682-708d90aa8f9so23867147b3.3 for ; Fri, 16 May 2025 12:22:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747423354; x=1748028154; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=X5csGcQ8badg6OQc2j12fcylP9C8BoCep+FBckAp9xQ=; b=FLUb2kTzbwtiz7isYqLQUyOaSzgJUPHL1dRXlaCIZd0/G2dFCbmw0HoG7v3dIreS5W SnlIBT2k//WQ9IQybMlmvuOQ0xpC6txd2dDynLD9bj7XWZHf52M2w2X3kCYH2guidKcn zUHpry3LZgdOmiIH4a2E7vbjRr61dra3Bvj1EkJoLIe5GWGfuaJ040K23JEOGt0OZnUM tBNAbzVQOuy9SZQESM9AINEq/3ln+XHvmiJ+fbAGZD3bm2YFL6/BXdAD1ioHpxJGqJV0 iLyT1ra58+T9+/7SC0JVorxx64hruHpJBFyYDLPRGyy3ARGHltJ/seM0GRBWWjqh0xK5 XQXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747423354; x=1748028154; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=X5csGcQ8badg6OQc2j12fcylP9C8BoCep+FBckAp9xQ=; b=piK7f4u4NOcqxalPb1ERIhBxFfyHDk7kyyKTwcOr5TTq5/QwBCkTM5ZBJ6DGUkEEqF uEYCfcfvyI8kEzACBocKVPl30chqQmdUJ/Xa92McpbSsVIpBcNs6pdR/ecjA1GG6lQeE LnO2o576yCfGM5wCwf5qJAZWdTg41GsZLHdDCRuYgLGarQPO1PRTm7YhGRktDKY/f51b yZzvwtnsQMgHsZVqCApQP9C7ug/8WgFR3Vt7xMrBgMdl84n8Kqv3GHGbCN3EH8/SIJST gUz1s8/S22e91tMqVxcWxfxz9uGMJ7dO28QKEySS/pUp+751OashJ9PRuScUC7hKiGIb fr5g== X-Forwarded-Encrypted: i=1; AJvYcCWjNooUKgGh2+u6YetJMoaTen1zltioHgGcW9pOk6nCdDjUfsjBEnEKS7aDueYCKPSwWIGpaCPVOg==@kvack.org X-Gm-Message-State: AOJu0YzXpzJTjqoSe89mFt4x+Xn6WKkYg1uknMpPZts9CEk0hT1iJ1A8 c6tr8k/NlxblrPbAd4JHRDvZZGkni8AOeWGYgsNQTIiJjScdqiCz0Gpeqo0jnDW2f82PvtBh1zt tVhMaxPKT3L7wU6PZGi/nZLDSi4xIOBWOAX+b+net X-Gm-Gg: ASbGncvwkxktYFzE9YT0xd/cj9mEQGg5ZwmaSG+aZ4c3vLQ322bCTvBDqMJ46t4sZ+8 N+ahfbtQ+vtTuJA9r23RbSTaQPzAdOe3RtznjFi3ASRtt1w696r6Gu9nUFwrba2mrv/Qe3fvBSM Aoc7EnIx/ec25jonwKhY6vaDAu03Q8evSa++TIGvShpUlRi7hL7tGBlOG6S6sUBA== X-Google-Smtp-Source: AGHT+IHmB5XBLYghERElfsJfzIa8m2PhXb5Oe8yfTFbW3QD907B5QsRiG5OVykLoPEH8ozkVNKkbLJW7xYSYXhG8Zqs= X-Received: by 2002:a05:690c:6f03:b0:6fb:8461:e828 with SMTP id 00721157ae682-70ca7c108f1mr74013577b3.30.1747423354023; Fri, 16 May 2025 12:22:34 -0700 (PDT) MIME-Version: 1.0 References: <20250513163438.3942405-8-tabba@google.com> In-Reply-To: From: James Houghton Date: Fri, 16 May 2025 12:21:58 -0700 X-Gm-Features: AX0GCFtvTxSjQg-C2lcu7Fqz9j01UftX46-yoNDwQ9IypZOUYYVgSBCYUAztoPs Message-ID: Subject: Re: [PATCH v9 07/17] KVM: guest_memfd: Allow host to map guest_memfd() pages To: Ackerley Tng Cc: Fuad Tabba , kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org, 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, 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, peterx@redhat.com, pankaj.gupta@amd.com, ira.weiny@intel.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Queue-Id: 7316440005 X-Rspamd-Server: rspam09 X-Stat-Signature: 4uka55z6ywr3c5731n3enqjwc1s8hb9p X-HE-Tag: 1747423355-681279 X-HE-Meta: U2FsdGVkX1+2P4hlyL5shWeL99Mrv8GMUD0IhY78h/K61eW70CU70ibDXtO6aEAQqEccH0VMFJq5BzlNRtdNTyV26Ks/mMWI2ASzgacXmkX9geR3b9Aj6Eh1h7Pg6JYffmBxABcUgy3CkOcHSRI8wzYqOBbW4OruKTMQZ181rnikS0LtsVuYCNVp42uXRzufjSKus8o6SIIKv0oCc5siCsnwyh9yooHFbkM6FubBPv1+938nB77toj6URhGrGlfbOEUq0IT+/L1mk2EPVuHC3ehQQSSgg6Yr6GImRHuGC7+5YsQ6+LT1IeE8OTjSGMLIgqroYsJcou6bpabOO+YAQTVDKnojZvNL9tHznKNCFUV2rjkcmde5XqFGVDHQVsfaDUXzhfEmuz2Uw8xDbTfwvjGNL7PvWQ3U0WDyq5uyhRMCh7SGGB5lFl08NPy5cySH+kD8VHricqxUr5oBOyDKycRNJrR4LI1HsqodtVDsn0dQbkQFlbZsKHwBx5Ae4UiF0AU3wWT9FCDoFpnfOKwE7dKumecscHqlQBBmVncYJqC2MFNRm4R6wpneCcwBFw3ZWwVvs3xsji7DIzhFjFjBtL+AHiF58QNBd7Bn9thLWXmKX6MUpCNV17PA0KFQJpmqwylxNQFr2OHdK7o/s4YYfeYPH0Dkt2i/mqQdQBku9pOWMksOgJvAwzxrqLBIDvJJXNpnc1B4C9pvyEIgw7NqLu9M/4Y1pp0uDwifePr8jbCygUFYrmlkqPmgqkqV2xlb9EfvL2Ah0DXhPl+P+o1yf3SfihmEpVbRmYzZOFpKx6HAdOPRX8rImCP/oePGJ4SFFGyqU4/d5OwCdEGGxnnyjVeoPruymNNIAO2M46ik6xPxA59cffGLxJrUAC0hR7DdS2rp3Kd0NppGWcJxRrym+d4iNX33nqg88pUKI5AM3rRPq1LEcpU9Lo1ZEOqWrHpWS52dx3tjBvoTS05kFCJ pG4oMQsI ePecB9mVQpTdH4/cZvjLRUmKoWQ2oLRf6BblQNlCeBuVucIaHjlKElLWFKsnCsGTwz7SqCCdoe9nik6hAh4b+BHSBjM+xQG22OmjADFVc/3kic6YEpx8QbS1crcxKMP1ohDbflumNgeeNhWNeK/s0V2wb91/5g9M54HUMegAtkAeBpQaB6NFucfQ8gqssByU9R8y5qE3PQG2JODEwisEz+cE46HmhWHhfmGJg4f+qCF62Gz+8F+gg4cjSbFjBlj2qFnPpg7FY0NiIRTg5TLiAfR9q4rsQErz5z0DJo5B6kycXulQ3KwynqC3BopU8haTpiIS/1w6yAlP+Ffa5Pr3piNMwag== 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: On Tue, May 13, 2025 at 11:37=E2=80=AFAM Ackerley Tng wrote: > > Fuad Tabba writes: > > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > > index 6db515833f61..8e6d1866b55e 100644 > > --- a/virt/kvm/guest_memfd.c > > +++ b/virt/kvm/guest_memfd.c > > @@ -312,7 +312,88 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memor= y_slot *slot, gfn_t gfn) > > return gfn - slot->base_gfn + slot->gmem.pgoff; > > } > > > > +#ifdef CONFIG_KVM_GMEM_SHARED_MEM > > + > > +static bool kvm_gmem_supports_shared(struct inode *inode) > > +{ > > + uint64_t flags =3D (uint64_t)inode->i_private; > > + > > + return flags & GUEST_MEMFD_FLAG_SUPPORT_SHARED; > > +} > > + > > +static vm_fault_t kvm_gmem_fault_shared(struct vm_fault *vmf) > > +{ > > + struct inode *inode =3D file_inode(vmf->vma->vm_file); > > + struct folio *folio; > > + vm_fault_t ret =3D VM_FAULT_LOCKED; > > + > > + filemap_invalidate_lock_shared(inode->i_mapping); > > + > > + folio =3D kvm_gmem_get_folio(inode, vmf->pgoff); > > + if (IS_ERR(folio)) { > > + int err =3D PTR_ERR(folio); > > + > > + if (err =3D=3D -EAGAIN) > > + ret =3D VM_FAULT_RETRY; > > + else > > + ret =3D vmf_error(err); > > + > > + goto out_filemap; > > + } > > + > > + if (folio_test_hwpoison(folio)) { > > + ret =3D VM_FAULT_HWPOISON; > > + goto out_folio; > > + } nit: shmem_fault() does not include an equivalent of the above HWPOISON check, and __do_fault() already handles HWPOISON. It's very unlikely for `folio` to be hwpoison and not up-to-date, and even then, writing over poison (to zero the folio) is not usually fatal. > > + > > + if (WARN_ON_ONCE(folio_test_large(folio))) { > > + ret =3D VM_FAULT_SIGBUS; > > + goto out_folio; > > + } nit: I would prefer we remove this SIGBUS bit and change the below clearing logic to handle large folios. Up to you I suppose. > > + > > + if (!folio_test_uptodate(folio)) { > > + clear_highpage(folio_page(folio, 0)); > > + kvm_gmem_mark_prepared(folio); > > + } > > + > > + vmf->page =3D folio_file_page(folio, vmf->pgoff); > > + > > +out_folio: > > + if (ret !=3D VM_FAULT_LOCKED) { > > + folio_unlock(folio); > > + folio_put(folio); > > + } > > + > > +out_filemap: > > + filemap_invalidate_unlock_shared(inode->i_mapping); > > Do we need to hold the filemap_invalidate_lock while zeroing? Would > holding the folio lock be enough? Do we need to hold the filemap_invalidate_lock for reading *at all*? I don't see why we need it. We're not checking gmem->bindings, and filemap_grab_folio() already synchronizes with filemap removal properly. > > > + > > + return ret; > > +}