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 9AA0CC27C55 for ; Mon, 10 Jun 2024 14:55:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 212216B0083; Mon, 10 Jun 2024 10:55:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 19B246B0085; Mon, 10 Jun 2024 10:55:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 03ADE6B0098; Mon, 10 Jun 2024 10:55:03 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id D39B16B0083 for ; Mon, 10 Jun 2024 10:55:03 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 5EC0812079C for ; Mon, 10 Jun 2024 14:55:03 +0000 (UTC) X-FDA: 82215276486.23.25C3A2F Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) by imf16.hostedemail.com (Postfix) with ESMTP id 583D218000A for ; Mon, 10 Jun 2024 14:55:00 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=UJtH60Pp; spf=pass (imf16.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.208.50 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=1718031300; 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=jiJEqSowdhcJMtrD7kiubswaDiLUx+cf83i9He2GB+k=; b=zQy23yG7yv+KQsVXeFHRvPcdn5Yva6qrOAFPrCT/GiIeRTqIj/T5v8OVQQ++h3V0UX40OJ f3Em2fMtKh1zengVucoT0rYPzvB4PPBN0Lxov29nG4rBKE+h1HykMAi0OvfNizqTk5bd6f 0MsFGvcjsWDnWkofc3o5za/CWuycoAQ= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=UJtH60Pp; spf=pass (imf16.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.208.50 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=1718031300; a=rsa-sha256; cv=none; b=UpFLXjZuJLufa8cNiPFFVQbsdz7m48Hu0phRvoK9M6YsttU2yIkOOF4gI/gCtEkoPo56s5 DU8C/SW2Oxfo6k+pP7HvQUlW3MB2gvrnVXwNfqcFjJ5PUYXuHeE1zcC6YHHpKBqw6Ld5+E FdofOZdqHftNg0IUdCE/+UAvpg/1iMk= Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-57a4d7ba501so5992035a12.2 for ; Mon, 10 Jun 2024 07:54:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718031299; x=1718636099; 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=jiJEqSowdhcJMtrD7kiubswaDiLUx+cf83i9He2GB+k=; b=UJtH60Pphw194YVheedkVLAt6YnwF2RrYUmuUnmOgxallTmHGx2SM8QOtnCeTiru3n Ra+4k0S4nXR1akX3EPBvwh4mnS3sotC44isr3BBYYFxZ/nZ5AdWpW7NcClc983NH+nmx WwmLgoJoTzt5cEYDrBV4PDBpdZTU1SHM9vPY9eezyhtp8T0l6sGG5KDKMsW9OqrfPhVL 68Tudiz3EfLJQhcNyIrjJGifBW7/MqebahNMt2kC87Ahb4JYnbkZzdvNUpAa7DXHyaEP znKKUQ8FZO8sgS0b/3UAnmOOVB5YCs6ppqSxO+e86oKipwBEjy2Iw08dKNNRujvHKH8f 8eAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718031299; x=1718636099; 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=jiJEqSowdhcJMtrD7kiubswaDiLUx+cf83i9He2GB+k=; b=C5cwr0XEj7C5PezHxT8YGfHvLgw0sdLfLjSEncO9P018Q5U03rsCxNVFk4GpOyovzL BEyzg/MHtB0c5noMhEoXP+3bijWfcRXbi5SWeN2PqMwN3IJXP+Rz8Bx394HKUkpvsglr db9Nwj8l7dJhw9L+GhxhtA+x3SpPf0s3RS4xW+YOpd+KO2VmAGxPnGuoEFjEytGYQ9c6 GsrdjOw4vJM0F/QMBg45wL72j4zHq5LXOm7jxGDTzufw4xSEAWPO3UPM1JcJ1qOC1kMC bbaf1s9obpRWgTfwzitQFEJpBXI2EHy6CMFKklEWEhuVgAzAdGb0ixjQrn0M5r6dsDF1 6SXA== X-Forwarded-Encrypted: i=1; AJvYcCWGbWhffcp0QQFf0eYF2zq8GSC+uYPMhqFrPmwR+hewcYRXG8HUbh5wVl9XGn2b2uzK3SuN4ZPptrgJobSaDZNxpFs= X-Gm-Message-State: AOJu0Yzio8una82ijAbqmrgVOO4KDACAIa4BlZi4bVXL3Bv0xfcOYjhQ K3LVmBe5g9/bU8sqWAjYB7aACMjt6bB26YYtbEwYAULcTf227DfE X-Google-Smtp-Source: AGHT+IG/GZzph31K5MUvF5ZTis5In+qCDmErPErAroxPqiRWodtRoR/VbCiYl3NkA9bPnbGCLusFLw== X-Received: by 2002:a50:d59d:0:b0:57c:7dcd:bcec with SMTP id 4fb4d7f45d1cf-57c7dcdbf06mr2604979a12.11.1718031298511; Mon, 10 Jun 2024 07:54:58 -0700 (PDT) Received: from localhost ([185.92.221.13]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-57c7f5d7762sm2499554a12.96.2024.06.10.07.54.57 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 10 Jun 2024 07:54:58 -0700 (PDT) Date: Mon, 10 Jun 2024 14:54:57 +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: <20240610145457.zvgw773n53twa7my@master> Reply-To: Wei Yang References: <20240605010742.11667-1-richard.weiyang@gmail.com> 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-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 583D218000A X-Stat-Signature: i1y774dien6ru7m6pgkkg9e4daf4ocpt X-Rspam-User: X-HE-Tag: 1718031300-400687 X-HE-Meta: U2FsdGVkX186uXKA744UUIEKxkyZpgtYp6UBRPdA9KlQQbh+189rjuZMv5E46km+Q4qVlIRlLXW7YlRKB8bp91fXZNxzOM6M1E6JAZrIhm5ArGkDVdsW1dm49ZIL8m3eVG/Gb4N/p7ITFksgzWgMUAdbfzDeUzpwQFS4xxxp7EbvrLDNcaxxlB8iYqF4LCKbh5UwjzRCut3OdkDLnmQAB6ul5hxUcePG0PHz9/ZzyqNCVrnSV3DM/P69X2ZIq/YRBT0gK4pRPaoFH7ifoSfxtH5HAahn8IqfBEf9tYsP2Qr2OWvJGoZHFS1YvsbbP9AHQEEruDvAG0OVxnMttQvqD2WZeJ/P2kUJ0Ioi81FRIBUhXo/VtWaZasTyNPMonpiJwn3tGZkrmR9Ir6642JD6KrSbO2l4LwQyIXyO6qMweJqPLDt0UWJUN2MI5zN7wWmI4KEfoe4wOTzDuh2QdtXVpl66e1s6jQk7QUG9v7V22o/ZBgGYsm7p832ZRbDIH9qviSWb7c+yWDKNe259MwdeQ7DBKJu9ZNdqWCYKAtzcJgPQNUvd+IMdDAskeMAx/W0J/jMGDUnY+QAJQI/d4TUPwavOz8hvvPUVXL28ca8GkZ15xeF91ExWSz7t18n/lUifOlEg8aS0foYVaANsRhcaBwcAaQinCvToesgKBZGdJ8cCrxV+FvndW8UWYK2HntmUBOK5mVFDknBk+2+L9/9WGVm43jWeJ7HkktogDd0LBM5Rxk+XDRjl5Tca005kXJ8RTMAzyPPXnVPovxggJC3W5018EhataP8pFowg11t+RmYZHY6fDTzuO5aL/ffqWo3s0h/0l9gLSAHR9YD8paukgAGoAe6ifHL4tBt5lGMGijehzXvTlNnSPLHA064IAoTtbmuzkgvEHkeDzLSfqmvZxm24yrOqx7Tl/rvQG40ojFnDuPrxS/FfPHKErukNXhbOh3XO9ZoFLCacT0uJxhb eR0hUNMY M5+towLKMw7nJcrEVgB5sazouQQFIuTwJfExMh39jLZpDOLDD3yifwUkUHzgehB3A82GzjZgtLI+1ntttjSyI16STzyb+y+CJGdIA9DzhSyjMg/AN5sHtF9Rw2jstbxvhLvvP51qvxdQ4bPohjo4FgBmZJm/SquxsVGGLEG9n3JrgQl5fLGjRP56GZIVXAIkixk+1lMssmSXzsAMDP7CDK1KlTYpUSp6owwbRjYJphomMulYWqUMkiLHvEcZTfjsFkrM1wMIP963YldvIaoxzhZswL3s/eWFU+L1kn6voRhGAlwdjmv0ZxHPsbxJxGi3VW9ZLVx/B6xU8EBzs526IKWbWdEh4/5s1oowt/9DiNJ7/LbdwB+76Yt/qywWiM6s333SbW4LEV2z4xmx5yZEnK7Hv2koNSCxvhLd75d2td9wVRHRodyfxqS1taGHrL+KIS7QKRi3bAEzkBZ167FgkRNgCb+x2ODnV/QQAtsQqshk3r7qcgxwuWN5YUKrrUeRqtA+SAiime3iQvqFPc1NUJryMjSHSRS+lU5uIC9220X3Abxxn9tKl7UQ2pGM2FIcK8fosUvtJSUzkhFXA2zo/C9PTI4uHePmu+N1e2k9jTKaolfOWxFwN8awNOozGVqGUGTRC+1PaqaPUzLoIF5jRoSZpd0LJbw1TQzsY2dYbw3I8+cYbuQpdsMjNlzRI9SXn1Bc/88HIwINagFfPHzcOupsp367FJ/5MG0CMbstCAoaIG0Bkm7ZqCbkmgdke5G760MzWw+hzu/TXOOofX1ARk3TmxwgzMjisLguZSaMRWpbPSSFfkxPoNDeoXgw1nLyW3as+ZLWECCD7hv3dr+cUEPVdsL3mzr2PG4B59/OQwe7q6VI= 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 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. >> 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