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 9A0BBC7115B for ; Wed, 18 Jun 2025 05:36:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7686A6B008C; Wed, 18 Jun 2025 01:36:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6F0BD6B0092; Wed, 18 Jun 2025 01:36:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 62DA16B0093; Wed, 18 Jun 2025 01:36:35 -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 533306B008C for ; Wed, 18 Jun 2025 01:36:35 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id CF2491D4071 for ; Wed, 18 Jun 2025 05:36:34 +0000 (UTC) X-FDA: 83567411508.26.5EF4559 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) by imf19.hostedemail.com (Postfix) with ESMTP id BB5241A000E for ; Wed, 18 Jun 2025 05:36:32 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Y+6wEwEs; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf19.hostedemail.com: domain of vivek.kasireddy@intel.com designates 198.175.65.9 as permitted sender) smtp.mailfrom=vivek.kasireddy@intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750224992; a=rsa-sha256; cv=none; b=ehx/cIv8v/bZuSfZny4Ngc362BD283DqlzLc0YJNtNLunebVW+FquhDZ9H6RZlrbR0nzYJ RxVHttZ4XRdryBhaJexBhCejydnhpMc3t6o4foY5AO0bjIxzkNBVTvlFXpeMaCb7MZfWpQ 6/2zC13yg/8YrX/oc2TPQJcKo3UByUE= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Y+6wEwEs; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf19.hostedemail.com: domain of vivek.kasireddy@intel.com designates 198.175.65.9 as permitted sender) smtp.mailfrom=vivek.kasireddy@intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750224992; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=jFKMqRa5G+PLO3iRU4IO7xdLMNEFgBfpACDzZA1JYhU=; b=sBrBWNFuSDsLcJZq3v7rW4Zbyh9UVb187Mr5lIZWFtEwHxSr//Ta8rYtuPJeRRNUXNAsKr oDQGANsjtp3gHhGIfM8Z6qI+kFNtIE1DWw+GDfLnJkt6Zqonq7k2DNdNAvMNmRsZAyTZc1 H4qdLqroUWk3l2G2C6Ewcy2dBtUH2vY= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750224993; x=1781760993; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7pe1C3/18gXrbSK7Ga1vjic4Mv+FC0hczXd2d50b5hQ=; b=Y+6wEwEseDqCXUqzyQ8lxiGCyegpvYQZ3Bykc8oGAJyv0RaD8L55gB/j bEUg3zRAGIAGfWT0qxUwRv/M1vX38riTFXFv3DrSr8tfoKFeO7JQ42Hck tDXv37Heg731RMHiBcysh77VgQrpqUQxhQpaLxKdr5A44XhtR5LnlKQn0 s+p6/lcg19alcjc3UGt+CRXKU9O5P09RyOmktJWLtUvIej6spJgkMGZHl EpIl0ErkUEc4NsZ7qy4JS+csWc6q6oLGzmhN1RLp9/x5GJ8oWMSBDBUqX 5BToAxOhMqALxIjzzS3VnJq9F70XFxBQ+KCH1uvpU0dWLNgh1m0p0TsHc g==; X-CSE-ConnectionGUID: sziu4psQTP6Ec/oaRGgnkQ== X-CSE-MsgGUID: 5/YE+prkQYuutBWVjDSaaw== X-IronPort-AV: E=McAfee;i="6800,10657,11467"; a="74960317" X-IronPort-AV: E=Sophos;i="6.16,245,1744095600"; d="scan'208";a="74960317" Received: from fmviesa007.fm.intel.com ([10.60.135.147]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Jun 2025 22:36:29 -0700 X-CSE-ConnectionGUID: TIPs7cIBQ36gdUVvR36mug== X-CSE-MsgGUID: xnaHIO6jQTmsOOAzJjZdGw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,245,1744095600"; d="scan'208";a="149052937" Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Jun 2025 22:36:28 -0700 From: Vivek Kasireddy To: dri-devel@lists.freedesktop.org, linux-mm@kvack.org Cc: Vivek Kasireddy , Steve Sistare , Muchun Song , David Hildenbrand , Andrew Morton Subject: [PATCH v4 2/3] mm/memfd: Reserve hugetlb folios before allocation Date: Tue, 17 Jun 2025 22:30:54 -0700 Message-ID: <20250618053415.1036185-3-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250618053415.1036185-1-vivek.kasireddy@intel.com> References: <20250618053415.1036185-1-vivek.kasireddy@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: BB5241A000E X-Stat-Signature: kwewfahpppwb7uqqshfb5fzbk1bbihiw X-Rspam-User: X-HE-Tag: 1750224992-305208 X-HE-Meta: U2FsdGVkX18Exs1iqsYjeO9wAAvERg+pakWrpDZnxzlCyheFpYdbmHaCBZh5YAbxWXEGBZj/rFoS7Pt9gczOLIajNSlJRh8uQPstmADGYu+WcimMaoWLE9X4/5yGDcPYVHlPz8kW9dSp2TrZmyn8u12laOBtJij0z/+HPOqSK/rra5Bzp9frlY9NYXcpn0y7kL2fJN/62hMbFDyMazQP+vAqVDdRN7eOGuFmAYt3yMWyW/0aHz8lHwQpCmUCDPCp9vfj72FKO9QqaZzDeYbT/bcPIEUahAuJKlBVvuKGwMUckGAfe1LuV6E4eQNhti7jdyNliGyO67WoBVcvwdqVsVHX0Lreu1NjC9E+PbNhBPEoFjy5XTTKubjeXKkv4TuorSVsb+4IeaonmKXC0Td/cVHE9EPNSCOz3pOpG5XG9itOTVdkNBOth7gGKaCHU4X/Js+8l7JYv1uKP92fDE/e6FnqagmLSyTF43A+5KkwYV9oiYjVpvM9PTmr5OODuB8k1opgTl9I/nGtW/vdHZKkTuGtC9W9tZXLBJeF7wdrb9PmY/67R2GlDz+Foabc8Gy+i47h3To1dv8NgQZzBrI2runR1FHadfkqpIlAz1LdLxCORPJk1i+SOtt3vREFKujGMmnULIW9Zmcar+dRqxqr7UEIivqbdroZCELEOSffcZaelgk9T4MqBzqMgp3Y+q6uKeHnTvIwNoZcljASppyWLdXv5mdUFmV4SeB1gHAVugtM+hYEGDkEQqfIeM0S9N6BmzRnVGZPuKrc8f2Te4jFRAlseJ3YtTt/r/c7cRBGjH207g/X4MEgAI3osogMtxzO0K6wOwzT+HC+/BXhGameCE1BN8IFpEabzP5sYiIeN0tmZDnlhko4p3O2nk82Ndc+r8ckH3Foy/zxkdBQU+3j4eKcMQEwLIDgpwMXxyCkcyminn4c+Z4DA/ERhdXX3UZeGbd01jhDpnPsi82NpCY uhyFhi3C eJWTLEKeDdyi5rPkqMlB3al56v2veO4wEo6oeSgpHVCqhjggkt7F8Y9ysyyboicMq6tkksv/VBRnkcTqqf0ZPPcmQSsY4UNxjwQ1t4HunKeW9xlbXjcFcZ6izSmutrI1xfUC2GAshCN6Swa1Uv3qZgJ0iZF3+07UE1rVgdqnB0L6mfLF9Q8ZCaXY+B8g38ApDj0qqV0DTG4YxWNYe3NvhKQBwGeamp214HAHeeRtP4XHBp0PPT99yQDhKbY9BE3BaMOnvrN4+ppm1inB+96WNQQTtwg== 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: When we try to allocate a folio via alloc_hugetlb_folio_reserve(), we need to ensure that there is an active reservation associated with the allocation. Otherwise, our allocation request would fail if there are no active reservations made at that moment against any other allocations. This is because alloc_hugetlb_folio_reserve() checks h->resv_huge_pages before proceeding with the allocation. Therefore, to address this issue, we just need to make a reservation (by calling hugetlb_reserve_pages()) before we try to allocate the folio. This will also ensure that proper region/subpool accounting is done associated with our allocation. Cc: Steve Sistare Cc: Muchun Song Cc: David Hildenbrand Cc: Andrew Morton Signed-off-by: Vivek Kasireddy --- include/linux/hugetlb.h | 5 +++++ mm/hugetlb.c | 5 ----- mm/memfd.c | 17 ++++++++++++++--- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index d8310b0f36dd..c6c87eae4a8d 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -740,6 +740,11 @@ extern unsigned int default_hstate_idx; #define default_hstate (hstates[default_hstate_idx]) +static inline struct hugepage_subpool *subpool_inode(struct inode *inode) +{ + return HUGETLBFS_SB(inode->i_sb)->spool; +} + static inline struct hugepage_subpool *hugetlb_folio_subpool(struct folio *folio) { return folio->_hugetlb_subpool; diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 6b34152744cc..57d85af6db3f 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -284,11 +284,6 @@ static long hugepage_subpool_put_pages(struct hugepage_subpool *spool, return ret; } -static inline struct hugepage_subpool *subpool_inode(struct inode *inode) -{ - return HUGETLBFS_SB(inode->i_sb)->spool; -} - static inline struct hugepage_subpool *subpool_vma(struct vm_area_struct *vma) { return subpool_inode(file_inode(vma->vm_file)); diff --git a/mm/memfd.c b/mm/memfd.c index ab367e61553d..2c861a7ac345 100644 --- a/mm/memfd.c +++ b/mm/memfd.c @@ -71,7 +71,6 @@ struct folio *memfd_alloc_folio(struct file *memfd, pgoff_t idx) #ifdef CONFIG_HUGETLB_PAGE struct folio *folio; gfp_t gfp_mask; - int err; if (is_file_hugepages(memfd)) { /* @@ -80,12 +79,19 @@ struct folio *memfd_alloc_folio(struct file *memfd, pgoff_t idx) * alloc from. Also, the folio will be pinned for an indefinite * amount of time, so it is not expected to be migrated away. */ + struct inode *inode = file_inode(memfd); struct hstate *h = hstate_file(memfd); + int err = -ENOMEM; + long nr_resv; gfp_mask = htlb_alloc_mask(h); gfp_mask &= ~(__GFP_HIGHMEM | __GFP_MOVABLE); idx >>= huge_page_order(h); + nr_resv = hugetlb_reserve_pages(inode, idx, idx + 1, NULL, 0); + if (nr_resv < 0) + return ERR_PTR(nr_resv); + folio = alloc_hugetlb_folio_reserve(h, numa_node_id(), NULL, @@ -96,12 +102,17 @@ struct folio *memfd_alloc_folio(struct file *memfd, pgoff_t idx) idx); if (err) { folio_put(folio); - return ERR_PTR(err); + goto err_unresv; } + + hugetlb_set_folio_subpool(folio, subpool_inode(inode)); folio_unlock(folio); return folio; } - return ERR_PTR(-ENOMEM); +err_unresv: + if (nr_resv > 0) + hugetlb_unreserve_pages(inode, idx, idx + 1, 0); + return ERR_PTR(err); } #endif return shmem_read_folio(memfd->f_mapping, idx); -- 2.49.0