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 002F4C27C79 for ; Wed, 12 Jun 2024 01:18:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6BBAF6B0127; Tue, 11 Jun 2024 21:18:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 66AEA6B0128; Tue, 11 Jun 2024 21:18:52 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 50B236B0129; Tue, 11 Jun 2024 21:18:52 -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 2CAF96B0127 for ; Tue, 11 Jun 2024 21:18:52 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id D28941A0959 for ; Wed, 12 Jun 2024 01:18:51 +0000 (UTC) X-FDA: 82220477262.01.61B2E9F Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) by imf06.hostedemail.com (Postfix) with ESMTP id DA8E3180006 for ; Wed, 12 Jun 2024 01:18:49 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=IPQsIDsS; spf=pass (imf06.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.167.42 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1718155130; h=from:from:sender:reply-to: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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=wsOMkK8MdEpbCD3hpt2BndIDvi5CArw29HC3ZOujN+o=; b=wpsx6/hCFvsK8r07Zgecg2DQVDLuxi66ZCGLOM6utoXgs4P4koxIlfwfeDObHn8F8Iv3Bn NFmABG3mrP8xdkAo8SOD1yAIS3VK4IDy4wkjkPuJmWZJ5hsEbZC5nLXaFLnJ0m03UAVU3I o9a5Gf4ZaYkVysFQ3LW76v35Dzx4oKU= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=IPQsIDsS; spf=pass (imf06.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.167.42 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1718155130; a=rsa-sha256; cv=none; b=vbUJX3NEmGDhQJ9mtEIjLq6gMoJkG66TdEZlz+8f4RyrvxY4b4NTZArHFCtvaZPzc0Xo5O Nt/6mHTgPpoMBOdx9IC0DgOw0zXOj1L5WdvffwemfY1+neZANyjswWfdj7hSWV5UpSX/yp muvazVQz93t7WyTofbTIjZSgKij84qQ= Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-52bc27cfb14so5788354e87.0 for ; Tue, 11 Jun 2024 18:18:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718155128; x=1718759928; darn=kvack.org; h=user-agent:in-reply-to:content-disposition:mime-version:references :reply-to:message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=wsOMkK8MdEpbCD3hpt2BndIDvi5CArw29HC3ZOujN+o=; b=IPQsIDsSlyD7cnJXcrWkIXbGpciW8QHIClB9ehxB0FHdNMJBNFhOXQ0ktSGMiufO7R +fVRP4q513/+N2pnCfGF4Lgu0jNNzjF/i8O4VH8/bA1QVIIiFHxu2bxRbOpYEsVH7/jx NOEebburg5Qj33Ws0ur1wYmy08PrieMsjrSCFUVWjCXcG6ZJ5RXCFZRC2U/UBSO5VW5b XbLuKVVS9TAPjz8CtftqTscFnI8eZSFyyn5nMmRWSWLzWswvpF9lmvSb2tvOEWWrRBLj X7hJ2NlNPupMMZw+Aq9w7hidvuJbpvOefadoQ+qubx/IoHaR7DBI/HIDmZPo0zfSrTml qn2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718155128; x=1718759928; h=user-agent:in-reply-to:content-disposition:mime-version:references :reply-to:message-id:subject:cc:to:from:date:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=wsOMkK8MdEpbCD3hpt2BndIDvi5CArw29HC3ZOujN+o=; b=u/j6g9aA7bsDSewpAXlDrYEbvWb4QYsLQtqlYeJDANQLt1Kr9x0dG9fSESEo1aT5XW we4uxVsVsg2rY8VmnybhOFjtBg1rMf+TvH3YPxSB5BnOyov4QLZ3PBElz27cBq/3yta4 WqeFFfc8m8xq9Nc8DkFnHJrGG1MqP5CVH3YnWsR0WSoMc6pcX7DpvT5kJrVPyg5DJcF/ VQ3GDYQmnjLRpP+SBswKfV9EbjnqRuIpjKS6pJRsYCuLAqLRPxsCkcTYZfmIRx6HTCiB DqKn+FY0SPEJeZ7/yXCZcJqZp5ngf2ZH3DG9u36F+IfNQpDJUFjVuAC+ppVsVJv3jsZZ 3F+g== X-Forwarded-Encrypted: i=1; AJvYcCUVeG6mQdyDHaSb0Lwc9aqrmTgRMh78uTSOeoI21UhC3k5DB2V+ZFv/VLxFJLjvyjmq7qs1M9RMXqeF/6G3bT9G6Lk= X-Gm-Message-State: AOJu0Yw4RHlENXk9DS6ruPPzMfifx4+7F4RJgo0DMle73YG/YKSY4w5Q OSZhMoLIa3r7wod8uQyqAq6HqYG5C67mq0Z5oRgzvpwA62Hj6bGB X-Google-Smtp-Source: AGHT+IEJ8Felh1WQ+7NE+aGLSRAPkmyrB4MLz/+7dO2YaGjWfvpitZQQx0No1btAh5IE8LEQ4+40Dw== X-Received: by 2002:a19:4347:0:b0:52c:8f4e:b1c9 with SMTP id 2adb3069b0e04-52c9a3d1d6amr177833e87.15.1718155128040; Tue, 11 Jun 2024 18:18:48 -0700 (PDT) Received: from localhost ([185.92.221.13]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a6f11e88ccbsm440658566b.133.2024.06.11.18.18.47 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 11 Jun 2024 18:18:47 -0700 (PDT) Date: Wed, 12 Jun 2024 01:18:46 +0000 From: Wei Yang To: Mike Rapoport Cc: Wei Yang , akpm@linux-foundation.org, linux-mm@kvack.org, "Kirill A . Shutemov" , David Hildenbrand Subject: Re: [PATCH] [RFC] mm/mm_init.c: simplify logic of deferred_[init|free]_pages Message-ID: <20240612011846.lp436br4dlwryvwm@master> Reply-To: Wei Yang References: <20240605010742.11667-1-richard.weiyang@gmail.com> <20240610145457.zvgw773n53twa7my@master> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20170113 (1.7.2) X-Rspam-User: X-Rspamd-Queue-Id: DA8E3180006 X-Rspamd-Server: rspam01 X-Stat-Signature: 81n1achzo6yfwpgq5ei8rczqnye5h5ew X-HE-Tag: 1718155129-307444 X-HE-Meta: U2FsdGVkX18Kg7KzII7DbFZGn1L7sbJb2HZgiXdzesLt/rjJWKdww1DPZJc8nojLOU03E3qNdC7fW8mRWXWxtsPrDL57ImQuo6ld2fMzWBeZgL72VG/b1uA/TqNyWYlf1LnbHJlEJBTiHJ14SdRB8mcVlg3Z0yf7lCrI6nCuMXtwDRs19Lj+6X/LlMG/8aRzrkmfm2Y2qMCqpEkgnU2kdxCJZwwqjRwE+/J7aQqWCYWd2FE3wlZ3f9zwZiIDbdPiVXlDcYRYThJdRJ3hfndV8Vw9obKGwHtcChEThYBbj+jPD/0q/RbB0c4e4rOiE83rZYS3Q3pgMjgfYm8Uh8pCWI0Py8zTXLQQCWDrwOD2J/AiPbu2gnnlxNZH2fHVsZpH9nU41J9vTPCoeAFdpKRBKcH65bh4cgk+5xtSJ6BE9slUyBlUNaJ/XuJsZcFPCVPwBlttR+osSUeiFvh0zoysnULqRMAaVwCNAItlT4qCyROkZg5UkfHgtHliEB5w5yURZRD2S8B+QWmUK8t29X76pnFkEALvC2z4ESj1FWkKXJHLT/PeUOfAmCl176RKAWLF8pPi8DvVAfVO71hyiDQkbj6p5p6uiJcApkgbLqjSgAQhpYY8s5Yq7GR5/6uOPxf3n/xUMKpwyrXedZTcaaKe9oo/bfXThDWdkbj4KCuuhw9tC0IBU6qKfCGkHwnWn/ok59RKiG34MFlqDeEWWXwSzLwJ1VMSL6+w+dZwy36826yaXNtB+Inu0ZFaDwg1tQFujuKZkzrRrlOBad7L3QItzjT3tQQA+kpxq+PWp0q9DOxFKieoPIRuSPbfegkXVSJ/zqm7pHmqmtX9jXRS0Lq0tT2tXlCBqBgsPt+DU5x0JSuvLCF/UHx5zccLPqV0IDkd6u8IvFGG5Zbd4+Itn+gzOG4BdXHk78oH7cb6p95M6MiEgSWzCYcSO3DIAsgjL+5ZrDwBA0eHFsF1sT1d29k IoW/djij Iuu8iL+mIgAAOMQODHDQSFOZCFKhHxxQ+EZdBO71Z2laOZle1wGuwSksH+9DdbVR8znQR5IyM8H5tLXpKhbOvhjDs7oTSUHLN0G2kEC63wa8eqJnQn79Y3eZRg+jpkXqNPOBgz2jlbG3xzCGXcRaj41KmwZFUjq0XiPZy1IDrToog0b4FcVmv6yR0II2cXTyIaFQpDxHKweLHrAR3v4VLbpxE8DNzV6sfH9f2qPJJnX6683YvWX2zCdA8C9FxeWVTEnY3A4Vr2uJRBJXxufEFjABmTeG/b6VOx2DWb+Hw7Av2N05J0oIgeabZARtVxBPDyqvxhdboy/dFAT7irrG+PKjwl0e97Wsb5ydxmdUCO6mNIgFVeqpoqmsIZSTau5M5CPxxMTnRkxMnf6xsU5HAOXXabUn3r3AYqdX5KDiEl5P7r15BZmX8/3jSyzoW+6hkTUZ5uBcsCqpGBFJC0M5/lAB7hfdLw2CQb7QQ2mYT2T3kmTa6+yYrjOEgurLy0pPjc4bw51R+6ksCFrp4VTXLzBYq+GZ1XpvqGPEOylkEYspQWv0QKQ9UtJYDpcBxjKl+nmYwQtVX5765xsWk25AkY8pZnlYzkKEifzacxuUv4PtTM3sem94vT2i/zzbvbeyVzC/vhlmYVKdtVy/ojwNWQEh2KF5/w9LPHdfrEds8lyjM/X0qVpQ0K4jpyogSQqnPPQgHFKwB0D+i7vvFIACYRISo1acuwnM8x70WSOVQfSljTELMBImDEVi+aD6PuJflddKByVAD90LoDwcSFKnlc5tHVQ== 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, Jun 11, 2024 at 12:58:30PM +0300, Mike Rapoport wrote: >On Mon, Jun 10, 2024 at 02:54:57PM +0000, Wei Yang wrote: >> On Mon, Jun 10, 2024 at 09:40:33AM +0300, Mike Rapoport wrote: >> >On Wed, Jun 05, 2024 at 01:07:42AM +0000, Wei Yang wrote: >> >> Function deferred_[init|free]_pages are only used in >> >> deferred_init_maxorder(), which makes sure the range to init/free is >> >> within MAX_ORDER_NR_PAGES size. >> >> >> >> With this knowledge, we can simplify these two functions. Since >> >> >> >> * only the first pfn could be IS_MAX_ORDER_ALIGNED() >> > >> >No, the first pfn is not necessarily IS_MAX_ORDER_ALIGNED(). Start pfn is a >> >beginning of a region in memblock.memory, and there's no guarantee on it's >> >alignment. >> > >> >> Yes, I mean only the first pfn is possible to be IS_MAX_ORDER_ALIGNED(), not >> must be IS_MAX_ORDER_ALIGNED(). >> >> The range passed to deferred_[init|free]_pages must be within one >> MAX_ORDER_NR_PAGES. If the first pfn is not IS_MAX_ORDER_ALIGNED(), others >> could not be IS_MAX_ORDER_ALIGNED(). >> >> Currently these two functions would iterate all pfn, and check >> IS_MAX_ORDER_ALIGNED() to break init|free on each MAX_ORDER_NR_PAGES. But this >> is only possible and necessary on the first pfn. > >Thinking more about it, it looks to me that deferred_pfn_valid() cannot >ever return false. > >The ranges that are passed to deferred_{free,init}_pages are always from >memblock.memory and we allocate the memory map to cover memblock.memory >with at least MAX_ORDER_NR_PAGES alignment. > We allocate and populate memmap in sparse_init_nid() for each present section. While subsection_map_init() would mark if there is hole in a section. And pfn_valid() would check the subsection bit. The granularity of subsection is 2 ^ 21 = 2M, while MAX_ORDER_NR_PAGES is default to 10. Suppose the default page size is 4K, then MAX_ORDER_NR_PAGES cover a range of 4M. But as you mentioned, the range passed to deferred_{free,init}_pages are from memblock.memory, this means we must allocate the memmap and mark present for its subsection. >So I don't see how pfn_valid() in deferred_pfn_valid() may ever return >false. > Agree. And I think this resolve my previous confusion why just check on the first pfn and don't care about others. Actually, it doesn't matter. >> >> Signed-off-by: Wei Yang >> >> CC: Kirill A. Shutemov >> >> CC: Mike Rapoport (IBM) >> >> CC: David Hildenbrand >> >> >> >> --- >> >> But my question is why we just test pfn_valid for the >> >> IS_MAX_ORDER_ALIGNED pfn? I thought we should test pfn_valid for each >> >> pfn until the first one in MAX_ORDER pages. Do I miss something? >> >> --- >> >> mm/mm_init.c | 43 ++++++++++++++----------------------------- >> >> 1 file changed, 14 insertions(+), 29 deletions(-) >> >> >> >> diff --git a/mm/mm_init.c b/mm/mm_init.c >> >> index bbaf3a2c1cfd..6a4adf9e7d9a 100644 >> >> --- a/mm/mm_init.c >> >> +++ b/mm/mm_init.c >> >> @@ -1970,21 +1970,10 @@ static inline bool __init deferred_pfn_valid(unsigned long pfn) >> >> static void __init deferred_free_pages(unsigned long pfn, >> >> unsigned long end_pfn) >> >> { >> >> - unsigned long nr_free = 0; >> >> - >> >> - for (; pfn < end_pfn; pfn++) { >> >> - if (!deferred_pfn_valid(pfn)) { >> >> - deferred_free_range(pfn - nr_free, nr_free); >> >> - nr_free = 0; >> >> - } else if (IS_MAX_ORDER_ALIGNED(pfn)) { >> >> - deferred_free_range(pfn - nr_free, nr_free); >> >> - nr_free = 1; >> >> - } else { >> >> - nr_free++; >> >> - } >> >> - } >> >> - /* Free the last block of pages to allocator */ >> >> - deferred_free_range(pfn - nr_free, nr_free); >> >> + if (!deferred_pfn_valid(pfn)) >> >> + pfn++; >> >> + >> >> + deferred_free_range(pfn, end_pfn - pfn); >> >> } >> >> >> >> /* >> >> @@ -1992,27 +1981,23 @@ static void __init deferred_free_pages(unsigned long pfn, >> >> * by performing it only once every MAX_ORDER_NR_PAGES. >> >> * Return number of pages initialized. >> >> */ >> >> -static unsigned long __init deferred_init_pages(struct zone *zone, >> >> - unsigned long pfn, >> >> - unsigned long end_pfn) >> >> +static unsigned long __init deferred_init_pages(struct zone *zone, >> >> + unsigned long pfn, >> >> + unsigned long end_pfn) >> >> { >> >> int nid = zone_to_nid(zone); >> >> unsigned long nr_pages = 0; >> >> int zid = zone_idx(zone); >> >> struct page *page = NULL; >> >> >> >> - for (; pfn < end_pfn; pfn++) { >> >> - if (!deferred_pfn_valid(pfn)) { >> >> - page = NULL; >> >> - continue; >> >> - } else if (!page || IS_MAX_ORDER_ALIGNED(pfn)) { >> >> - page = pfn_to_page(pfn); >> >> - } else { >> >> - page++; >> >> - } >> >> + if (!deferred_pfn_valid(pfn)) >> >> + pfn++; >> >> + >> >> + page = pfn_to_page(pfn); >> >> + nr_pages = end_pfn - pfn; >> >> + >> >> + for (; pfn < end_pfn; pfn++, page++) >> >> __init_single_page(page, pfn, zid, nid); >> >> - nr_pages++; >> >> - } >> >> return nr_pages; >> >> } >> >> >> >> -- >> >> 2.34.1 >> >> >> > >> >-- >> >Sincerely yours, >> >Mike. >> >> -- >> Wei Yang >> Help you, Help me > >-- >Sincerely yours, >Mike. -- Wei Yang Help you, Help me