From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 580F91D5CFB for ; Wed, 1 Jul 2026 03:41:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782877293; cv=none; b=tw6nCXR4Lr8mEafD5kCF5N4DjIzDOOnFTs2QzYLKAzPlWmNta5V+88GpN3TqcwqlETNoejToyeq0RQxE73D8NC6HVQf3oTHdfZF2XcclR1oa7kRapAISJR/HzHIQ69omz4bUiYrh0xWKtos9e2kHs2NsJo8rMP3ZIumYI5+lCA0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782877293; c=relaxed/simple; bh=TV0pMLWygWt04M3pauk9c1wjH+fQoiHj3YnjG9b7pkM=; h=Date:From:To:Cc:Subject:Message-Id:In-Reply-To:References: Mime-Version:Content-Type; b=UTTX+MLHqxgx0JL/7ZTahYrMpMJ6MRHOMUwMmdNYQipU6rblsCkJaz9Q+7nzYunfMo/2SimnEDRQXSf7BDQhg54yn0gbR7nv/v98GCTaPIe7RA/JOqlsGB/y3vYRtebAcWjKDYUOwRgqAugyJHskzzznPRbjMicTdKFXizhWBS8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux-foundation.org header.i=@linux-foundation.org header.b=lkNYXl3w; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux-foundation.org header.i=@linux-foundation.org header.b="lkNYXl3w" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8131E1F000E9; Wed, 1 Jul 2026 03:41:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux-foundation.org; s=korg; t=1782877291; bh=CqtgTA57MDI/0YnUoY+V1bgidOgTGiuy3XUEF9UDwm4=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=lkNYXl3wN6FlZc1dSjCYlIyCIGDyCKAIwsLp3AlZ/1TI+Wtk+cn5+mvxo6WWrgEtg OA/XFVrL+9g4xQVfcr396TfvUU9KmCoEfq4vbzrfRGRqQstJIs2MnZVFSdrBPXcOsP cnTtMqnfsg7WIO8wgkdoEvNmKFP1shUr9QbwxsfA= Date: Tue, 30 Jun 2026 20:41:30 -0700 From: Andrew Morton To: Ye Liu Cc: Zi Yan , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v4 0/7] mm/page_owner: misc cleanups Message-Id: <20260630204130.175e9a2addae86058327918e@linux-foundation.org> In-Reply-To: <20260701012239.315262-1-ye.liu@linux.dev> References: <20260701012239.315262-1-ye.liu@linux.dev> X-Mailer: Sylpheed 3.8.0beta1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Wed, 1 Jul 2026 09:22:26 +0800 Ye Liu wrote: > v4: > - Patch 2: also update scripts/gdb/linux/page_owner.py to use MR_NEVER > instead of the hardcoded -1. > - https://lore.kernel.org/all/20260630015331.147174-1-ye.liu@linux.dev/ I'm seeing more changes than described here? Thanks, I updated mm.git to this version. Here's how v4 altered mm.git: mm/page_owner.c | 16 +++------------- scripts/gdb/linux/page_owner.py | 4 +++- 2 files changed, 6 insertions(+), 14 deletions(-) --- a/mm/page_owner.c~b +++ a/mm/page_owner.c @@ -428,12 +428,6 @@ void __folio_copy_owner(struct folio *ne * to skip less than the full buddy block, but that is acceptable for page owner * iteration purposes. * - * The lockless read of buddy_order_unsafe() can also return a garbage order if - * the page is concurrently allocated and PageBuddy is cleared between the check - * and the read. Clamp the advance at the next MAX_ORDER_NR_PAGES boundary so - * that a bogus order cannot carry @pfn into an unvalidated memory section, - * which would break callers that rely on boundary-aligned pfn_valid() checks. - * * Return: true if the page was skipped (caller should continue its loop), * false if the page is not a buddy page and should be processed normally. */ @@ -445,12 +439,8 @@ static inline bool skip_buddy_pages(unsi return false; order = buddy_order_unsafe(page); - if (order <= MAX_PAGE_ORDER) { - unsigned long new_pfn = *pfn + (1UL << order); - unsigned long boundary = ALIGN(*pfn + 1, MAX_ORDER_NR_PAGES); - - *pfn = min(new_pfn, boundary) - 1; - } + if (order <= MAX_PAGE_ORDER) + *pfn += (1UL << order) - 1; return true; } @@ -561,7 +551,7 @@ static inline int print_page_owner_memcg cgroup_name(memcg->css.cgroup, name, sizeof(name)); ret += scnprintf(kbuf + ret, count - ret, "Charged %sto %smemcg %s\n", - (memcg_data & MEMCG_DATA_KMEM) ? "(via objcg) " : "", + PageMemcgKmem(page) ? "(via objcg) " : "", online ? "" : "offline ", name); out_unlock: --- a/scripts/gdb/linux/page_owner.py~b +++ a/scripts/gdb/linux/page_owner.py @@ -34,6 +34,7 @@ class DumpPageOwner(gdb.Command): max_pfn = None p_ops = None migrate_reason_names = None + mr_never = None def __init__(self): super(DumpPageOwner, self).__init__("lx-dump-page-owner", gdb.COMMAND_SUPPORT) @@ -65,6 +66,7 @@ class DumpPageOwner(gdb.Command): self.max_pfn = int(gdb.parse_and_eval("max_pfn")) self.page_ext_size = int(gdb.parse_and_eval("page_ext_size")) self.migrate_reason_names = gdb.parse_and_eval('migrate_reason_names') + self.mr_never = int(gdb.parse_and_eval('MR_NEVER')) def page_ext_invalid(self, page_ext): if page_ext == gdb.Value(0): @@ -138,7 +140,7 @@ class DumpPageOwner(gdb.Command): else: gdb.write('page last free stack trace:\n') stackdepot.stack_depot_print(page_owner["free_handle"]) - if page_owner['last_migrate_reason'] != -1: + if page_owner['last_migrate_reason'] != self.mr_never: gdb.write('page has been migrated, last migrate reason: %s\n' % self.migrate_reason_names[page_owner['last_migrate_reason']]) def read_page_owner(self): _