From nobody Thu Dec 18 09:44:22 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DF1A7211C for ; Tue, 17 Dec 2024 16:32:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734453130; cv=none; b=aFLt8IkMBDiWswEMg/GZiz8S6x2Mkg92uoFMzd38yhRZmB/kHRisKpo9Nu/Z5x04PuuEx/Of4+uPFgc5OhrvcVDsGURKJgB3vh+YK6ewoBruRwVaWvYf7VO8LGPPbtR4biDKsOB4tyQJmIj9EPm9UknDPsnxR5tApwDKjDNZ+cw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734453130; c=relaxed/simple; bh=QFvBlAPwEfv9clx/XbhTcNdH8Tk4tfGJAeomU8tpGnk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cU7FrfgH0MkIMdfFB7DEF0ylbpIooMladHtoe2NgZ3oonu2X5W3APPR9OF56ixkoEE5Kxg4c4W17CLnmAWSIa+0TXmUiaPcNMJv1VSz7WNMBohW66gpmMTf9mggsAcVPcd86rc8GybTT8uxltF8VDIaEYxiTBbgIG1Fr8DiZFKs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=fvLblSz7; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="fvLblSz7" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1734453127; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7NUAQoNwo5XXzNDpj09lIN28JPTSdFaKuqaRHwfJFHA=; b=fvLblSz7YsIF1At6UW0ErO4MBWWa4ytty+y4vsFGatCFBePjSoHtJqgYl5OxngbTaVuEzN yL9JsubZ5GY2OhuFxOJwsj3AqUGVApyFMQjTZA9keGi5bXpL/a/cuFo3jlrtGCGlJuMhYp HQNqRcEfhMJcwMy7ck8ovq7aHQUGgz0= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-592-NCpwGDC-NsGbWT0tUETwQA-1; Tue, 17 Dec 2024 11:32:04 -0500 X-MC-Unique: NCpwGDC-NsGbWT0tUETwQA-1 X-Mimecast-MFC-AGG-ID: NCpwGDC-NsGbWT0tUETwQA Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7876B195604F; Tue, 17 Dec 2024 16:32:02 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.22.65.20]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 91E8E300F9B9; Tue, 17 Dec 2024 16:32:00 +0000 (UTC) From: Luiz Capitulino To: linux-mm@kvack.org, mgorman@techsingularity.net, willy@infradead.org Cc: david@redhat.com, linux-kernel@vger.kernel.org, lcapitulino@gmail.com Subject: [PATCH 1/2] mm: alloc_pages_bulk_noprof: drop page_list argument Date: Tue, 17 Dec 2024 11:31:27 -0500 Message-ID: <4d3041315d1032e9acbe50971f952e716e8f4089.1734453061.git.luizcap@redhat.com> In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 Content-Type: text/plain; charset="utf-8" The commit 387ba26fb1cb added __alloc_pages_bulk() along with the page_list argument. The next commit 0f87d9d30f21 added the array-based argument. As it turns out, the page_list argument has no users in the current tree (if it ever had any). Dropping it allows for a slight simplification and eliminates some unnecessary checks, now that page_array is required. Signed-off-by: Luiz Capitulino Acked-by: David Hildenbrand --- include/linux/gfp.h | 8 ++------ mm/mempolicy.c | 14 +++++++------- mm/page_alloc.c | 39 ++++++++++++--------------------------- 3 files changed, 21 insertions(+), 40 deletions(-) diff --git a/include/linux/gfp.h b/include/linux/gfp.h index b0fe9f62d15b6..eebed36443b35 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -212,7 +212,6 @@ struct folio *__folio_alloc_noprof(gfp_t gfp, unsigned = int order, int preferred_ =20 unsigned long alloc_pages_bulk_noprof(gfp_t gfp, int preferred_nid, nodemask_t *nodemask, int nr_pages, - struct list_head *page_list, struct page **page_array); #define __alloc_pages_bulk(...) alloc_hooks(alloc_pages_bulk_noprof(__VA= _ARGS__)) =20 @@ -223,11 +222,8 @@ unsigned long alloc_pages_bulk_array_mempolicy_noprof(= gfp_t gfp, alloc_hooks(alloc_pages_bulk_array_mempolicy_noprof(__VA_ARGS__)) =20 /* Bulk allocate order-0 pages */ -#define alloc_pages_bulk_list(_gfp, _nr_pages, _list) \ - __alloc_pages_bulk(_gfp, numa_mem_id(), NULL, _nr_pages, _list, NULL) - #define alloc_pages_bulk_array(_gfp, _nr_pages, _page_array) \ - __alloc_pages_bulk(_gfp, numa_mem_id(), NULL, _nr_pages, NULL, _page_arra= y) + __alloc_pages_bulk(_gfp, numa_mem_id(), NULL, _nr_pages, _page_array) =20 static inline unsigned long alloc_pages_bulk_array_node_noprof(gfp_t gfp, int nid, unsigned long nr_pa= ges, @@ -236,7 +232,7 @@ alloc_pages_bulk_array_node_noprof(gfp_t gfp, int nid, = unsigned long nr_pages, if (nid =3D=3D NUMA_NO_NODE) nid =3D numa_mem_id(); =20 - return alloc_pages_bulk_noprof(gfp, nid, NULL, nr_pages, NULL, page_array= ); + return alloc_pages_bulk_noprof(gfp, nid, NULL, nr_pages, page_array); } =20 #define alloc_pages_bulk_array_node(...) \ diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 04f35659717ae..42a7b07ccc15a 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -2375,13 +2375,13 @@ static unsigned long alloc_pages_bulk_array_interle= ave(gfp_t gfp, if (delta) { nr_allocated =3D alloc_pages_bulk_noprof(gfp, interleave_nodes(pol), NULL, - nr_pages_per_node + 1, NULL, + nr_pages_per_node + 1, page_array); delta--; } else { nr_allocated =3D alloc_pages_bulk_noprof(gfp, interleave_nodes(pol), NULL, - nr_pages_per_node, NULL, page_array); + nr_pages_per_node, page_array); } =20 page_array +=3D nr_allocated; @@ -2430,7 +2430,7 @@ static unsigned long alloc_pages_bulk_array_weighted_= interleave(gfp_t gfp, if (weight && node_isset(node, nodes)) { node_pages =3D min(rem_pages, weight); nr_allocated =3D __alloc_pages_bulk(gfp, node, NULL, node_pages, - NULL, page_array); + page_array); page_array +=3D nr_allocated; total_allocated +=3D nr_allocated; /* if that's all the pages, no need to interleave */ @@ -2493,7 +2493,7 @@ static unsigned long alloc_pages_bulk_array_weighted_= interleave(gfp_t gfp, if (!node_pages) break; nr_allocated =3D __alloc_pages_bulk(gfp, node, NULL, node_pages, - NULL, page_array); + page_array); page_array +=3D nr_allocated; total_allocated +=3D nr_allocated; if (total_allocated =3D=3D nr_pages) @@ -2517,11 +2517,11 @@ static unsigned long alloc_pages_bulk_array_preferr= ed_many(gfp_t gfp, int nid, preferred_gfp &=3D ~(__GFP_DIRECT_RECLAIM | __GFP_NOFAIL); =20 nr_allocated =3D alloc_pages_bulk_noprof(preferred_gfp, nid, &pol->nodes, - nr_pages, NULL, page_array); + nr_pages, page_array); =20 if (nr_allocated < nr_pages) nr_allocated +=3D alloc_pages_bulk_noprof(gfp, numa_node_id(), NULL, - nr_pages - nr_allocated, NULL, + nr_pages - nr_allocated, page_array + nr_allocated); return nr_allocated; } @@ -2557,7 +2557,7 @@ unsigned long alloc_pages_bulk_array_mempolicy_noprof= (gfp_t gfp, nid =3D numa_node_id(); nodemask =3D policy_nodemask(gfp, pol, NO_INTERLEAVE_INDEX, &nid); return alloc_pages_bulk_noprof(gfp, nid, nodemask, - nr_pages, NULL, page_array); + nr_pages, page_array); } =20 int vma_dup_policy(struct vm_area_struct *src, struct vm_area_struct *dst) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 1cb4b8c8886d8..3ef6d902e2fea 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -4529,28 +4529,23 @@ static inline bool prepare_alloc_pages(gfp_t gfp_ma= sk, unsigned int order, } =20 /* - * __alloc_pages_bulk - Allocate a number of order-0 pages to a list or ar= ray + * __alloc_pages_bulk - Allocate a number of order-0 pages to an array * @gfp: GFP flags for the allocation * @preferred_nid: The preferred NUMA node ID to allocate from * @nodemask: Set of nodes to allocate from, may be NULL - * @nr_pages: The number of pages desired on the list or array - * @page_list: Optional list to store the allocated pages - * @page_array: Optional array to store the pages + * @nr_pages: The number of pages desired in the array + * @page_array: Array to store the pages * * This is a batched version of the page allocator that attempts to - * allocate nr_pages quickly. Pages are added to page_list if page_list - * is not NULL, otherwise it is assumed that the page_array is valid. + * allocate nr_pages quickly. Pages are added to the page_array. * - * For lists, nr_pages is the number of pages that should be allocated. - * - * For arrays, only NULL elements are populated with pages and nr_pages + * Note that only NULL elements are populated with pages and nr_pages * is the maximum number of pages that will be stored in the array. * - * Returns the number of pages on the list or array. + * Returns the number of pages in the array. */ unsigned long alloc_pages_bulk_noprof(gfp_t gfp, int preferred_nid, nodemask_t *nodemask, int nr_pages, - struct list_head *page_list, struct page **page_array) { struct page *page; @@ -4568,7 +4563,7 @@ unsigned long alloc_pages_bulk_noprof(gfp_t gfp, int = preferred_nid, * Skip populated array elements to determine if any pages need * to be allocated before disabling IRQs. */ - while (page_array && nr_populated < nr_pages && page_array[nr_populated]) + while (nr_populated < nr_pages && page_array[nr_populated]) nr_populated++; =20 /* No pages requested? */ @@ -4576,7 +4571,7 @@ unsigned long alloc_pages_bulk_noprof(gfp_t gfp, int = preferred_nid, goto out; =20 /* Already populated array? */ - if (unlikely(page_array && nr_pages - nr_populated =3D=3D 0)) + if (unlikely(nr_pages - nr_populated =3D=3D 0)) goto out; =20 /* Bulk allocator does not support memcg accounting. */ @@ -4658,7 +4653,7 @@ unsigned long alloc_pages_bulk_noprof(gfp_t gfp, int = preferred_nid, while (nr_populated < nr_pages) { =20 /* Skip existing pages */ - if (page_array && page_array[nr_populated]) { + if (page_array[nr_populated]) { nr_populated++; continue; } @@ -4676,11 +4671,7 @@ unsigned long alloc_pages_bulk_noprof(gfp_t gfp, int= preferred_nid, nr_account++; =20 prep_new_page(page, 0, gfp, 0); - if (page_list) - list_add(&page->lru, page_list); - else - page_array[nr_populated] =3D page; - nr_populated++; + page_array[nr_populated++] =3D page; } =20 pcp_spin_unlock(pcp); @@ -4697,14 +4688,8 @@ unsigned long alloc_pages_bulk_noprof(gfp_t gfp, int= preferred_nid, =20 failed: page =3D __alloc_pages_noprof(gfp, 0, preferred_nid, nodemask); - if (page) { - if (page_list) - list_add(&page->lru, page_list); - else - page_array[nr_populated] =3D page; - nr_populated++; - } - + if (page) + page_array[nr_populated++] =3D page; goto out; } EXPORT_SYMBOL_GPL(alloc_pages_bulk_noprof); --=20 2.47.1