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 CB033C35FFC for ; Tue, 25 Mar 2025 15:57:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3151B280008; Tue, 25 Mar 2025 11:57:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2C3FF280007; Tue, 25 Mar 2025 11:57:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 13F34280008; Tue, 25 Mar 2025 11:57:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id E53E4280007 for ; Tue, 25 Mar 2025 11:57:39 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id BCB6BC08AB for ; Tue, 25 Mar 2025 15:57:40 +0000 (UTC) X-FDA: 83260528680.08.42086D2 Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) by imf04.hostedemail.com (Postfix) with ESMTP id E2CF64000D for ; Tue, 25 Mar 2025 15:57:38 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=tg+cctIf; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf04.hostedemail.com: domain of tabba@google.com designates 209.85.160.170 as permitted sender) smtp.mailfrom=tabba@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742918258; 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=74Qwj89IF8GjpANpjZfZDaQ2z8tGZK11oNXVHKtMIeA=; b=dfH6UqjVRietmigkJAmw9UU3y6UtMnOMTHDeOaWibDMHb99vGAEt436JIDWyTGmGQ6cp39 x0Qv4q081TYFlj0t+AfBmqAZQfzlY3Rjj/HnDsDRPet10Oq9fEgRX+mNfGvG8/BU2bW4SY WTaQmM9GedW4wVH/6k3i2+J+2ANdc7g= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=tg+cctIf; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf04.hostedemail.com: domain of tabba@google.com designates 209.85.160.170 as permitted sender) smtp.mailfrom=tabba@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742918258; a=rsa-sha256; cv=none; b=4k+SrIGSDr1UV74pfGhoHFh5e+dTUDglqybTGuEBVCmeMK9XVv8Rd1Z2xbBMARVsawmGl2 3uRh6uN+MD/m/1smkehNF3fsEuISmOyMZURx58y7uHL9PWeOK2NITrkm3/xOMK70SX+q8z tXWx8P3Kn3/sLdRZ8FHri6k59LySfWk= Received: by mail-qt1-f170.google.com with SMTP id d75a77b69052e-4774611d40bso307191cf.0 for ; Tue, 25 Mar 2025 08:57:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742918258; x=1743523058; 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=74Qwj89IF8GjpANpjZfZDaQ2z8tGZK11oNXVHKtMIeA=; b=tg+cctIfbB83yyCuAJv5+7Sb/6MZ/FUXVXBSQHtrBJnLORJTE9geuaZ0Lpri8W49zw cv8S4roRHM83guOAYPB2O7ZtbLxP5tZDIp/xC2PK+VpdBpS5Zd12KFJGterB4lCIOJKb RIHFt16Yqf18+I44AGfSe0LYwVy9hE+tweQDphxfGMUWGALQWANiZQyhy7btfa/y9k+x Au6HFkn5OR2kh7o14HxzqcNjrDnyvlZ890PXEw5ypxvuBI8fo6/Uqv9HPijqKSGvUxkO nwDh++g5u1mWoYRZq9iML3/AbJr+yUUFypQw+KVu7nSRM3b7C8jTgRyoglwjEez7NSYx 8BGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742918258; x=1743523058; 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=74Qwj89IF8GjpANpjZfZDaQ2z8tGZK11oNXVHKtMIeA=; b=qA//Y+S+AHXpHCXYMu98ERYE5WlgPzno53TNVrzsjYNy92tjPojC0dQx3oh41/pE4z MOTBgXa0GqJjBeB8ySpfpbg9djhYejRIYj6Xcxy8YecqlP5EwpQEvLJzmAbQkrywXtxn t/XxCYfn4ScC9XiwjuhFcvy0wffhWe2A20/Gbsns1hU86hlmmuD6ktqhwSxD8W8PQhuA PocmwZThHXwzYZttHRZo6yRSh/C3sf40BryiPG7ssJ5q1S5GzrKCCYnvu/adU5z8hBVz QUUa/u5YVfdadbRPz8g+n/zJpueIQiBwGHu0clgt8ZqL/ICTns4TEM5TLK4ALqnilt+p TxFg== X-Forwarded-Encrypted: i=1; AJvYcCXwxypXrfdERcXJnooxDFXCCTLIu32aSqj65w5cBN8KSaGE2vN++9+Zss5ycPO0jUUHvIhMWf0GpA==@kvack.org X-Gm-Message-State: AOJu0Yxe1Bt7oTYTpRjP01MBHhrmijKZIbhfuJ8x2WZsNiAdOVpEgzSO prVIF1keW7AxtfGj00Gr9jz3rAhn/4eZwt5joHG+TBp6BFuehgJ2oHucfhdMR5BB679LYIQWlU6 XdjPD1t309jna5FJhZlD5eRDHU2GWQxMQixQe X-Gm-Gg: ASbGncvG4y7egOTJo2oAVK0oIzWmUJTVB6mJ9gRMEvNReyVkhqKUUOGdvyqJ/hAZaqI IODVPZBQBpiZjuu97Ytk6OhWLUumAUH/Ro26dhl5cbmkAigfnjHzWeVCOenfg2p1yLzY5pDYKes mp8KD8YGRQgcb+kfx1b8ej0eo30w== X-Google-Smtp-Source: AGHT+IHeh2gPA4DB1fZIeYy9PDd2izAMrAEkI1SyH2TI74S+jvSN+Ftr3W19JthWsvq2CGGaH+hiMPDVB1rq8Iwc7wM= X-Received: by 2002:a05:622a:1f8b:b0:476:f1a6:d8e8 with SMTP id d75a77b69052e-4772be14c43mr13528291cf.11.1742918257692; Tue, 25 Mar 2025 08:57:37 -0700 (PDT) MIME-Version: 1.0 References: <20250318162046.4016367-1-tabba@google.com> <20250318162046.4016367-6-tabba@google.com> In-Reply-To: From: Fuad Tabba Date: Tue, 25 Mar 2025 15:57:00 +0000 X-Gm-Features: AQ5f1JrYL6iEPnJvzqrjUrKSPmUCLtNGb2xeLimK0jjw7tytAVKf6Eo11ig_wvI Message-ID: Subject: Re: [PATCH v6 5/7] KVM: guest_memfd: Restore folio state after final folio_put() To: Vishal Annapurve Cc: 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, 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 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: E2CF64000D X-Stat-Signature: n1hopqoedr5qdnoiqrwm65f7i3pmeaz9 X-Rspam-User: X-HE-Tag: 1742918258-42494 X-HE-Meta: U2FsdGVkX1/SNFo1tePk+8qYTtE8zZFpQH7OEcZ3jpcWiEJsVQEoLzfJ3vB8HZS3UtUH61QGWwd0NtneBKMKphwF1zyGMTFusxGhbAwABpqlyyfNPUTWCtBrF5RrbVnnyr5wZv8uOsOpb3od7Irp8uKs/nsTEParsiyXd25F3z8NhG1ow3rS7c6wQuGq3inwFvJ/7sVtsMnOgeLrNkztJd9WYRdnlU4I0MB4hPLC5wDR8p+EmaEvtNSxR+ovi0k4Dvb0hC1/qEI6s62crCEvIDnAAawiBkcmeWgWWFcL6Df41hdWbNCMN/MnPbm6idDEsraNIPrxAejk0HpYQaJnj7mT6V1teLiqX6+l5N01Vj/clTb63IfWyTtgEfNeUmVU0409+zdGyRAhiotS33diS7QahycgGZiWVVnidPBFqaUJt2lBLCE44om4Nrx5tJKaVmECK0fzbXGT6dw5Vej04yl+AHIOeeOQV24eOkwP7YpDKvzPIYtzEMiMWNZGd+1d129UhNK8tXK6WwgFUWnkEOrOdFQx0bHdddZgMyWThagI2o+jjzwNiMI139RqarXaYQMqZlZUnYCG7/JTb1sjkhpVfzhq8sydxsaM6sgAuh8UrL2S/kao2TSdNrYXrHil6f2oDaJz+X95c9/c/E/63RH68ilxZ/Rjh8lOBFtIq03B2KKvxmmfIkdYsk0WB3kZuu8Xc/qZNHh6nLe2yx11LKTxz15pra/0gXLkp0Pz3SsgY67o4rzK+Hd58dz/EwCMp9OxJxnepFshRpXNc1buoFwCAMxPzWWl0vDZ7Jyv1HItB6DSdfnZHgkAj73whrAvhIw0yH0QZNIg4+XUtMRYESg4/4AcBxSHa1VOFraqsVq7MDykGaLZanncBwl+ToMhjgEL2/IxOLIFKIeOWB5zYR6uExnUx3zMygx86mDTFVbdw/PWqsqwYBu7KOpya6ylcLwuySpNXmvRE1oeMFT w7LS/6RC p2NJeJSTzKAUCWFbsm4mau7gD727nsmssp5nHqO1S5C9IySb9J982foypD966/wUVXxgSUjF74OGbQ3CUWCLZBH8Y88xxVhMXrJlZ7weVIabqjY98iuq2xI+odW5ca91NDtD+K8YYwHvfeH3sapUs5M1mB5OJg3EmVu2v1ieCrbEAwz7bf8fxmN/ncbm6Tjs5F2Owgr78aLYOoIeauvVJ2R/OnAnUmL4m5Rh0uFv/BNrsJ7Vuk+MHbK+Mr27lFqT5mbyeyhUoorQuU2BsZysXQaq3878bFCdho/ZsPUjAHW/kIUx0JsxANIU8va2tRwCFVz8R0kdZYJ1yAIm/2zgyHALnD8mDBxwgYC8w1GkSO66CO43o6QPIuMj5a6nahzS+9b3CRd9U7z3D17I= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000004, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Hi Vishal, On Fri, 21 Mar 2025 at 20:09, Vishal Annapurve wrot= e: > > On Tue, Mar 18, 2025 at 9:20=E2=80=AFAM Fuad Tabba wro= te: > > ... > > +/* > > + * Callback function for __folio_put(), i.e., called once all referenc= es by the > > + * host to the folio have been dropped. This allows gmem to transition= the state > > + * of the folio to shared with the guest, and allows the hypervisor to= continue > > + * transitioning its state to private, since the host cannot attempt t= o access > > + * it anymore. > > + */ > > void kvm_gmem_handle_folio_put(struct folio *folio) > > { > > - WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in pro= gress."); > > + struct address_space *mapping; > > + struct xarray *shared_offsets; > > + struct inode *inode; > > + pgoff_t index; > > + void *xval; > > + > > + mapping =3D folio->mapping; > > + if (WARN_ON_ONCE(!mapping)) > > + return; > > + > > + inode =3D mapping->host; > > + index =3D folio->index; > > + shared_offsets =3D &kvm_gmem_private(inode)->shared_offsets; > > + xval =3D xa_mk_value(KVM_GMEM_GUEST_SHARED); > > + > > + filemap_invalidate_lock(inode->i_mapping); > > As discussed in the guest_memfd upstream, folio_put can happen from > atomic context [1], so we need a way to either defer the work outside > kvm_gmem_handle_folio_put() (which is very likely needed to handle > hugepages and merge operation) or ensure to execute the logic using > synchronization primitives that will not sleep. Thanks for pointing this out. For now, rather than deferring (which we'll come to when hugepages come into play), I think this would be possible to resolve by ensuring we have exclusive access* to the folio instead, and using that to ensure that we can access the shared_offsets maps. * By exclusive access I mean either holding the folio lock, or knowing that no one else has references to the folio (which is the case when kvm_gmem_handle_folio_put() is called). I'll try to respin something in time for folks to look at it before the next sync. Cheers, /fuad > [1] https://elixir.bootlin.com/linux/v6.14-rc6/source/include/linux/mm.h#= L1483 > > > + folio_lock(folio); > > + kvm_gmem_restore_pending_folio(folio, inode); > > + folio_unlock(folio); > > + WARN_ON_ONCE(xa_err(xa_store(shared_offsets, index, xval, GFP_K= ERNEL))); > > + filemap_invalidate_unlock(inode->i_mapping); > > } > > EXPORT_SYMBOL_GPL(kvm_gmem_handle_folio_put); > > > > -- > > 2.49.0.rc1.451.g8f38331e32-goog > >