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 42872C5475B for ; Fri, 1 Mar 2024 21:32:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 986BA94000D; Fri, 1 Mar 2024 16:32:50 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 93717940007; Fri, 1 Mar 2024 16:32:50 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7D7D094000D; Fri, 1 Mar 2024 16:32:50 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 6AB36940007 for ; Fri, 1 Mar 2024 16:32:50 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id B6714160418 for ; Fri, 1 Mar 2024 21:32:49 +0000 (UTC) X-FDA: 81849770058.18.AAF5A48 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf20.hostedemail.com (Postfix) with ESMTP id 6B6681C000C for ; Fri, 1 Mar 2024 21:32:47 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=EMzDlLYC; spf=none (imf20.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709328768; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Sh6VIfh2HxD0+i9QEvc0ZHow+8EXcpi474FqMZzHIo0=; b=Wbt1rCNPHYEzBgtRVIwbusDESGd+cbYBoP/fo7RG/6rMjw2QwBwdw1D5CXU8gS05YjuV+P rfG9qU/Z5scube6ru0TsuAQutbfWHQERSD3I868O7dKEMsBgYPmMVjjQKJ8g8iKATwRUgf RPF7qJZqo75dBU8t/jNS11dCKTsvg3c= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709328768; a=rsa-sha256; cv=none; b=x4PxqDPzno8DOKznIOlYbtG8Ssgzdl3yDgcAh5Q5d90xd3Hbfncc2HoQPDowk3RZNAzCkA cXVPLOLdOS44PiyaxwprGsY4VqKA8WPBp6xvCUWw6MCw4GidPkknZCMQcMhPu++0lnOIXz QZVKjeOnWpD6ZxIiwXu0pGYEgaJLoV8= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=EMzDlLYC; spf=none (imf20.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=Sh6VIfh2HxD0+i9QEvc0ZHow+8EXcpi474FqMZzHIo0=; b=EMzDlLYCg6C+/VpLwtrrsTL/6g XoqAgYBDwDT+G+ct/E/ir2Aj1yDrEltkvLmWY4FQHx5ct3sR9qxcY+cVS+LFpg6JBA/eyx9HlSTMd TEy9g84JO4JeaDBSglfgnjJ3ZR2dTy7mtgoIo+hv1Ao2pqKA+nPCd85BBuJDYlVFRwPowXcqZfnFz 2GgXXyc2fEZm+uBJKiboK6ptxiZAnMbIaTHr3l9CibD3CRt6QHQt1A0TIFsvuZKpMtQLLmMs+2Bpv zEsT3W8ofGpvkQP5ch9AXD19E1CdS8alExoksKC0KA1DvQPprpFRGb8dlXwZmWoooD4/AprX74UGJ 366g6B7A==; Received: from willy by casper.infradead.org with local (Exim 4.97.1 #2 (Red Hat Linux)) id 1rgAUk-0000000BwgO-2oo6; Fri, 01 Mar 2024 21:32:42 +0000 Date: Fri, 1 Mar 2024 21:32:42 +0000 From: Matthew Wilcox To: Ryan Roberts Cc: Andrew Morton , linux-mm@kvack.org, Aishwarya TCV , Mark Brown , Ard Biesheuvel Subject: Re: [PATCH 4/8] mm: Add __dump_folio() Message-ID: References: <20240227192337.757313-1-willy@infradead.org> <20240227192337.757313-5-willy@infradead.org> <6de0d026-cd8d-4152-97ca-d33d2a4e2e84@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <6de0d026-cd8d-4152-97ca-d33d2a4e2e84@arm.com> X-Rspamd-Queue-Id: 6B6681C000C X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: y6xakuyugfui66nobbz1hw64aib6ysjb X-HE-Tag: 1709328767-237598 X-HE-Meta: U2FsdGVkX1+TOEgKGTlzctdK8u0pUHh+MYAiKok70suoG4DTYvh5ocgSY5BSCte1kVqxMaVz6y8EiYK/VzS/60m5rd/nEKcGwMemadWWBryYWMr9yIrPNNQGiF7x8RA3j0BsrgSyxrLlkUyMWGU710i1cNQGeomXxnIa/G124N2QgfWJY9dylQ3owYFLQEeaJrt5ORf+M5aDnVyYAxUpOqU5Ls5u8XB25OrF/GtpVMHn4nJHgu4SB66bC566gqRW0kLt5CncP0H1senJ/mHwUziipgdpCALN6xDJZ2lPtvLungdikNrAcmsmeG8Qwg70okNOwqUq4Mr5ZJZXQD1W+m34QPaWzdH5tD/6pCXrY4FXaMb4cJ20jhJNiOEl+ykfMXCByUtazEP+n8mBC1Vc0BqgErot23xm+U4VfTXcxrdGbEiozc5XWsE733cBz2lPuwMmC9H0VjNcOREyEzaTgK3g8zQ0LJoFudnVdV+mOJFE9CjvvGJK78nnw53hWE8Y/tImMGR14QbqEcL+jNrRXl8n/Q4u/9AWGKEUCKZh2xHy49N/tHX9VZ7fXmBj4z7e8NRmevQhjMJgl6n5pzw0PGBft7JxFgVR6ynmU5CGdBqQWlEyCHRVyJkD1FUFd2JmDRmms0W6x8jIP2A0w0+tI1Qrmz2xhxYk332BW2e3zwPrtIWaneNPIP5HSmqxxjBicH08IkYT87xy86l23jth2dEpqiq4PKPasXDtEWxQ+zDH9gXdMHLZVNlK6NYfgREmxfpmbba21fUZChxxbzNQkqpNYH5lVyHPSKpuKu+rQF008mXXfCrdTu2WtW9dMZnaP7YDk8xJjH6biAeQGrihHTxOv8c8dBdS8eWQKzk3y69ISFo7v96AMLK4TWNWlryn 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 Fri, Mar 01, 2024 at 10:21:10AM +0000, Ryan Roberts wrote: > > + page_cma = is_migrate_cma_page(page); > > Problem is here: is_migrate_cma_page() is a macro that resolves to this: Ah, yeah, maybe somebody should be testing with CONFIG_CMA enabled. Ahem. > page_cma = get_pfnblock_flags_mask(page, page_to_pfn(page), MIGRATETYPE_MASK) == MIGRATE_CMA; > > And since page is on the stack, page_to_pfn() gives a very wrong answer. > > I confirmed that the problem goes away for both cases above, when changing the line to: > > page_cma = get_pfnblock_flags_mask(page, pfn, MIGRATETYPE_MASK) == MIGRATE_CMA; Thanks! I think what we end up wanting is ... >From f005189ad418d05d168c0ff00daecc2a444733ef Mon Sep 17 00:00:00 2001 From: "Matthew Wilcox (Oracle)" Date: Fri, 1 Mar 2024 16:11:20 -0500 Subject: [PATCH] mm: Fix __dump_folio Ryan Roberts reports that (if you have CONFIG_CMA enabled), calling __dump_folio() will panic as we call is_migrate_cma_page() with a stack copy of struct page, which gets passed to page_to_pfn(). Signed-off-by: Matthew Wilcox (Oracle) --- include/linux/mmzone.h | 3 +++ mm/debug.c | 4 +--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 633812a1d220..c11b7cde81ef 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -76,9 +76,12 @@ extern const char * const migratetype_names[MIGRATE_TYPES]; #ifdef CONFIG_CMA # define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA) # define is_migrate_cma_page(_page) (get_pageblock_migratetype(_page) == MIGRATE_CMA) +# define is_migrate_cma_folio(folio, pfn) (MIGRATE_CMA == \ + get_pfnblock_flags_mask(&folio->page, pfn, MIGRATETYPE_MASK)) #else # define is_migrate_cma(migratetype) false # define is_migrate_cma_page(_page) false +# define is_migrate_cma_folio(folio, pfn) false #endif static inline bool is_migrate_movable(int mt) diff --git a/mm/debug.c b/mm/debug.c index 32ac7d79fd04..e7aa8a9d5d86 100644 --- a/mm/debug.c +++ b/mm/debug.c @@ -55,7 +55,6 @@ static void __dump_folio(struct folio *folio, struct page *page, unsigned long pfn, unsigned long idx) { struct address_space *mapping = folio_mapping(folio); - bool page_cma; int mapcount = 0; char *type = ""; @@ -98,9 +97,8 @@ static void __dump_folio(struct folio *folio, struct page *page, * state for debugging, it should be fine to accept a bit of * inaccuracy here due to racing. */ - page_cma = is_migrate_cma_page(page); pr_warn("%sflags: %pGp%s\n", type, &folio->flags, - page_cma ? " CMA" : ""); + is_migrate_cma_folio(folio, pfn) ? " CMA" : ""); pr_warn("page_type: %pGt\n", &folio->page.page_type); print_hex_dump(KERN_WARNING, "raw: ", DUMP_PREFIX_NONE, 32, -- 2.43.0