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 678E4C5B543 for ; Thu, 5 Jun 2025 05:25:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 07EF96B0592; Thu, 5 Jun 2025 01:25:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 056856B0593; Thu, 5 Jun 2025 01:25:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ED5D96B0596; Thu, 5 Jun 2025 01:25:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id CBD836B0592 for ; Thu, 5 Jun 2025 01:25:27 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 44F871D7E7A for ; Thu, 5 Jun 2025 05:25:27 +0000 (UTC) X-FDA: 83520209094.04.0C95131 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) by imf12.hostedemail.com (Postfix) with ESMTP id 7A0DC40004 for ; Thu, 5 Jun 2025 05:25:24 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="Zk9VwQ1/"; dmarc=pass (policy=none) header.from=intel.com; spf=none (imf12.hostedemail.com: domain of binbin.wu@linux.intel.com has no SPF policy when checking 192.198.163.10) smtp.mailfrom=binbin.wu@linux.intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1749101124; a=rsa-sha256; cv=none; b=3OlZDIr6J80BxYNES8GBFNGiAEE0sNyYK4j0vcc0pkjSwBb7QQDa1a6LVfXoEZQoilfKgw yxgUuC1fmiCtTTlkEGuEmwzDrWEtgZ4SCVhLL2ukJnzOcJSwGOVp0vKw6+JE27XzmC0l2j 9FNj406U7uHpqpw4PVtrJEEM+HOxD3U= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="Zk9VwQ1/"; dmarc=pass (policy=none) header.from=intel.com; spf=none (imf12.hostedemail.com: domain of binbin.wu@linux.intel.com has no SPF policy when checking 192.198.163.10) smtp.mailfrom=binbin.wu@linux.intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1749101124; 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=xEZn+w/tH2VeVlAfghVMWzMEDDyx8E04MQhsn+Hj33g=; b=evZW/dUGkfnaovNKo785RscRB5vZ/Bz8K8e+23NUc1kYTdkq0I8zNqi6bsAwWx2w6gH2/O gn+Vs6UKcV2pbogb97KWZEUnaYxmpASqWoMBfbCArHptfqacuNqkm48ZQvxu5/aEdwGOTw npkqOMw8DORGkhxw4fbI/fH4O11BlWM= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1749101124; x=1780637124; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=+cdbKhZjBoZDRwbRa0KV1PYNo7teLIa2Q8X716SvQ9M=; b=Zk9VwQ1/Jfs7pCflyWK8VdUgL5I4GK4y27mycU9DZ9j7sVBpc3zrUXsC POSROZrgswPZ79AXeg4fQLj7aRA6XCSGoQjmIrDBsFpzvGLoc0ZzUc1K1 Og0XwdrmK/er74IrDJQjyIlFfVg5RCh6NJs1U4edosvRd3Mj49zNo/Ajo pNQJyl5bOXm2mIyRkgM3D0GA2m4AfWhdoKqodtNT5F+bua+Wc19GQQ38G Z7MdEyj+UJdqI0JvV0KqYUv+EJC/paY2PL9tG5JuOBCydY+yOQ14gFWof +d5Iic789ZT+rAut9j7PVgew8OOQEjv+ug0sWlot1Wdpy7O/Rb+tq8dnn A==; X-CSE-ConnectionGUID: zHA5NNl3SuCdV9fw2Kr3CQ== X-CSE-MsgGUID: C1iYPjk/Qk6HWJ+ZaQGOsg== X-IronPort-AV: E=McAfee;i="6800,10657,11454"; a="62560137" X-IronPort-AV: E=Sophos;i="6.16,211,1744095600"; d="scan'208";a="62560137" Received: from orviesa001.jf.intel.com ([10.64.159.141]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Jun 2025 22:25:23 -0700 X-CSE-ConnectionGUID: xg/4fCFnQ4G6T1ilLlHNzw== X-CSE-MsgGUID: mfb3AFnxSWG0gS83KmOkWQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,211,1744095600"; d="scan'208";a="182602137" Received: from unknown (HELO [10.238.0.239]) ([10.238.0.239]) by smtpauth.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Jun 2025 22:25:00 -0700 Message-ID: <558a649d-d419-46e2-adb8-4027e105c1ce@linux.intel.com> Date: Thu, 5 Jun 2025 13:24:57 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH v2 38/51] KVM: guest_memfd: Split allocator pages for guest_memfd use To: Ackerley Tng Cc: kvm@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, x86@kernel.org, linux-fsdevel@vger.kernel.org, aik@amd.com, ajones@ventanamicro.com, akpm@linux-foundation.org, amoorthy@google.com, anthony.yznaga@oracle.com, anup@brainfault.org, aou@eecs.berkeley.edu, bfoster@redhat.com, brauner@kernel.org, catalin.marinas@arm.com, chao.p.peng@intel.com, chenhuacai@kernel.org, dave.hansen@intel.com, david@redhat.com, dmatlack@google.com, dwmw@amazon.co.uk, erdemaktas@google.com, fan.du@intel.com, fvdl@google.com, graf@amazon.com, haibo1.xu@intel.com, hch@infradead.org, hughd@google.com, ira.weiny@intel.com, isaku.yamahata@intel.com, jack@suse.cz, james.morse@arm.com, jarkko@kernel.org, jgg@ziepe.ca, jgowans@amazon.com, jhubbard@nvidia.com, jroedel@suse.de, jthoughton@google.com, jun.miao@intel.com, kai.huang@intel.com, keirf@google.com, kent.overstreet@linux.dev, kirill.shutemov@intel.com, liam.merwick@oracle.com, maciej.wieczor-retman@intel.com, mail@maciej.szmigiero.name, maz@kernel.org, mic@digikod.net, michael.roth@amd.com, mpe@ellerman.id.au, muchun.song@linux.dev, nikunj@amd.com, nsaenz@amazon.es, oliver.upton@linux.dev, palmer@dabbelt.com, pankaj.gupta@amd.com, paul.walmsley@sifive.com, pbonzini@redhat.com, pdurrant@amazon.co.uk, peterx@redhat.com, pgonda@google.com, pvorel@suse.cz, qperret@google.com, quic_cvanscha@quicinc.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, quic_svaddagi@quicinc.com, quic_tsoni@quicinc.com, richard.weiyang@gmail.com, rick.p.edgecombe@intel.com, rientjes@google.com, roypat@amazon.co.uk, rppt@kernel.org, seanjc@google.com, shuah@kernel.org, steven.price@arm.com, steven.sistare@oracle.com, suzuki.poulose@arm.com, tabba@google.com, thomas.lendacky@amd.com, usama.arif@bytedance.com, vannapurve@google.com, vbabka@suse.cz, viro@zeniv.linux.org.uk, vkuznets@redhat.com, wei.w.wang@intel.com, will@kernel.org, willy@infradead.org, xiaoyao.li@intel.com, yan.y.zhao@intel.com, yilun.xu@intel.com, yuzenghui@huawei.com, zhiquan1.li@intel.com References: <7753dc66229663fecea2498cf442a768cb7191ba.1747264138.git.ackerleytng@google.com> Content-Language: en-US From: Binbin Wu In-Reply-To: <7753dc66229663fecea2498cf442a768cb7191ba.1747264138.git.ackerleytng@google.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 7A0DC40004 X-Stat-Signature: us1qu6fiejqfwshwo7b9hbstx1tpx85k X-Rspam-User: X-HE-Tag: 1749101124-902733 X-HE-Meta: U2FsdGVkX194K3uRcKggcz1+EMnCUvmtvhZaV8+LVs+yYUdB/Knnsx2Viwmre+be/OBLCcCWm1fVrfeMGl5YdP54encdIB/5GObNMIi4llVzGyzve128lIP2QJQwQrFZr9UE4MZmfDfTntj3td7+372rbYCczd7xScmalIaKrhLYLaBjrjAiAAxFYT81CgNOrDGiabGGDT8pSiFTCtRDs2DI4DDS8FVqIJ6iTd+n8oXvRwNjW2fiLwaP3CtabWeIvyh4D7eYb/SRNcMVOB3VYjkTY2O4JSzrUCW2W0NLAl3kQokfv1cdcQMh4LqQfKJ0W7EWw3WiJP5cdE0SM+sibotj6+EPApNLZcS0DOPsAmQiImxD26QpklFGXYxBLEa3xuOcD2V+CVL/Es4GleVAmOi8NpgQ7d4VLV6L8/9HT5xfd5N2OA9gSnmdWAXOuBZKDbae9a51658vaMZla9ZHzGX76TTBFwZWkbvbj/bNQFSP9wQxBaKH2lrjlnofhUgj7RlYY41fmQoAuMjN6c2eHRUeB8WM4Q/CgI5DyZY4JkrVoUEFXGvbWthtHaihGNrsTaWy4LV31HmSA/16yP+v+YrTi2yGLVflft/E/jiG+t6n6qGXqU0uEHLVg16ZWeoWC35Jl/DUvhVcZBf1/IxghEvRqQJ5snhOvZ2fyjH7luQn4nELCO6AB99QCMvAnnKVUf9CHoryfHIkGH5xf9EHepE+ulJBOIc0AjDknAy4/gBLWKLQm+hhLyt/SJqILfcc5ZT96WzPd0aEKnuueisbFlC7i+1bpc9/NNuG6Qy/vluSR5xtAe1LqHWe+B2kl4BTvCudVwKbUPlBykevQJnKoAZbtnxlCmjnJXKP8tSyIEIHeZxog6YcdycyA/zTz443FdwZIDS/c8tsQJe8Vlm4GyrIDWhTOxxUefXnoSVsDPURuEHXehV3Wvp8Il19l16ASybDkiXMyNxYNExsYFM vciOQQli WvRxbWmzzIQvuQZdlSBsoEOVbhTPTkuIJlvYdWWm0g5Snaa3NrnhcIw7YTAvRaKeVJuG2zi92G/M9P75+OeYqFRkLo0G4IoGADP0AFBkkZDeZesG7kDYoCkFqQMPVw4jgJ0PCJ1BLOzmhzZa0lwqrJRzc2WUiwKXD0KSrxjd6Wql/y5uCGueQDjM6tWeCpmYaajdEC6t2oYV7+xXqpT4hkHvr1Snv/+mPmhap7e20XtWui7+ruZZq6nYBhLiPwFUcPTyLts+hxqx9z/mCuA7mivkr45U4JlgHWmfBw8TdTLwKsaUv8q9golcALBGMG32XYy6mhVF55sRw6WII46O0iqTgH+boszkCy+4Z 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 5/15/2025 7:42 AM, Ackerley Tng wrote: [...] > + > +static inline int kvm_gmem_try_split_folio_in_filemap(struct inode *inode, > + struct folio *folio) > +{ > + size_t to_nr_pages; > + void *priv; > + > + if (!kvm_gmem_has_custom_allocator(inode)) > + return 0; > + > + priv = kvm_gmem_allocator_private(inode); > + to_nr_pages = kvm_gmem_allocator_ops(inode)->nr_pages_in_page(priv); > + > + if (kvm_gmem_has_some_shared(inode, folio->index, to_nr_pages)) What if a huge page whose attribute is shared? > + return kvm_gmem_split_folio_in_filemap(inode, folio); > + > + return 0; > +} > + [...] > > static int kvm_gmem_shareability_setup(struct maple_tree *mt, loff_t size, u64 flags) > @@ -563,11 +1005,16 @@ static struct folio *kvm_gmem_get_folio(struct inode *inode, pgoff_t index) > return folio; > > if (kvm_gmem_has_custom_allocator(inode)) { > - void *p = kvm_gmem_allocator_private(inode); > + size_t nr_pages; > + void *p; > > + p = kvm_gmem_allocator_private(inode); > folio = kvm_gmem_allocator_ops(inode)->alloc_folio(p); > if (IS_ERR(folio)) > return folio; > + > + nr_pages = kvm_gmem_allocator_ops(inode)->nr_pages_in_folio(p); > + index_floor = round_down(index, nr_pages); > } else { > gfp_t gfp = mapping_gfp_mask(inode->i_mapping); > > @@ -580,10 +1027,11 @@ static struct folio *kvm_gmem_get_folio(struct inode *inode, pgoff_t index) > folio_put(folio); > return ERR_PTR(ret); > } > + > + index_floor = index; > } > allocated_size = folio_size(folio); > > - index_floor = round_down(index, folio_nr_pages(folio)); > ret = kvm_gmem_filemap_add_folio(inode->i_mapping, folio, index_floor); > if (ret) { > folio_put(folio); > @@ -600,6 +1048,13 @@ static struct folio *kvm_gmem_get_folio(struct inode *inode, pgoff_t index) > return ERR_PTR(ret); > } > > + /* Leave just filemap's refcounts on folio. */ > + folio_put(folio); > + > + ret = kvm_gmem_try_split_folio_in_filemap(inode, folio); When !CONFIG_KVM_GMEM_SHARED_MEM, kvm_gmem_try_split_folio_in_filemap() is undefined. > + if (ret) > + goto err; > + > spin_lock(&inode->i_lock); > inode->i_blocks += allocated_size / 512; > spin_unlock(&inode->i_lock); > [...]