From patchwork Fri Oct 18 16:17:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ritesh Harjani (IBM)" X-Patchwork-Id: 13842037 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 4670ED3001B for ; Fri, 18 Oct 2024 16:18:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C14EE6B0089; Fri, 18 Oct 2024 12:18:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BC4D96B008A; Fri, 18 Oct 2024 12:18:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A3E5F6B008C; Fri, 18 Oct 2024 12:18:26 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 8242C6B0089 for ; Fri, 18 Oct 2024 12:18:26 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 7F5FC1402A4 for ; Fri, 18 Oct 2024 16:18:13 +0000 (UTC) X-FDA: 82687230402.04.FF1F41C Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) by imf04.hostedemail.com (Postfix) with ESMTP id CE2B340009 for ; Fri, 18 Oct 2024 16:18:09 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=DKrnZRdJ; spf=pass (imf04.hostedemail.com: domain of ritesh.list@gmail.com designates 209.85.215.169 as permitted sender) smtp.mailfrom=ritesh.list@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=1729268255; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=uLmZcdH3+iUB7uSULBBt8ADH32xOpUfbglYzjMZPi2A=; b=sRWrO0dHKtv1qKN3x3HRIR5np2bjubqXnyzY7blMVj2mcu8yDnIjrAYE80eK+Wgq76W4Hq F73VUFBKhgKq1UXzaKNm/MpikQH2CsL+rVE2jRit8xmdVOT0aVIqZYEPczry2r/DiARHXZ b/wmZQyBnAfobx9L3R0wKE7LtH5k/XQ= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=DKrnZRdJ; spf=pass (imf04.hostedemail.com: domain of ritesh.list@gmail.com designates 209.85.215.169 as permitted sender) smtp.mailfrom=ritesh.list@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1729268255; a=rsa-sha256; cv=none; b=rX+POzUoSxyHBBRCkE4JZcR1+XEViu2uz+CcNG+WV/lWf6L/NrOD9LYOn9m3v7g5F9+g9b 2KrroJz2SqUQbYBVz6u9NDEicy0fonuEw6aGd7pJf0z0PZnOrQLxdcqQm36T4v/f9c3evl 1y45m1fBTlQoDxCZ316CeFV5F+1PC0Q= Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-7db908c9c83so1523813a12.2 for ; Fri, 18 Oct 2024 09:18:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729268303; x=1729873103; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uLmZcdH3+iUB7uSULBBt8ADH32xOpUfbglYzjMZPi2A=; b=DKrnZRdJn/9OlEp3yxjn2/7j/x8UPQoKbtJOk8zEdq3b6+XYOzIa4XVDpOnqUAO3Jz 6rCSBMncQzJ0Nz6oJEzoczCKENAIDzCeL2hSlAQv4DqCi2avTr8a4cReP/y4C6Tgajqu E1ri6wecLaKwC1TsS/VN17xcJVS8yqK1gr3IO5VUcpFukSYy8N7ypg0fZNOGjYMRHXKy L6KFWQWonn+SYgepD1TuSsLt7Cfo68R90sn0M7bN+P/w49i9NHi3LOTD6EOQgxAtvHCA o+BRNTs7yhuJDEKD+wAGbkD6KZs/dq5bBUERgmVUfkSuifOWoc7ewQQVHRx0LDgrBC9V hS+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729268303; x=1729873103; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uLmZcdH3+iUB7uSULBBt8ADH32xOpUfbglYzjMZPi2A=; b=OopnCX9REawc7zn/EpGaEpHEbp8dsmMwrvNdnVlDVklDpvENsAkGsH1vzFoMPMtSDe onVk29PtJ0Y1n8mypo8b0L+y2jK1sqJtJiKD5TRtSyw9SoAc7JFkhYHYwdhW4SnxM5xf qUPOhGM6ZC7IsAagSK6sQULwkmYqTPr9yGiKbqiE/pA4oYvb8SHS2IlCq8iaJYfrQr2Q gtDXNqEstIDVvg/XJK0yFHkRp4Y8Ha+Sf5yV9mAgODCRTs4VztYpCeb9sVcGB1yViDnV 2Eg+LVVI7H24DEsLPbgajGeuxqpdx2BobdkP5pKb6VkEKKKv49rXxKqK0yQ/cA0DnQ9M huCw== X-Gm-Message-State: AOJu0Yw8L46l5cHOLdWt4N7uAFIuaPtdPrqUXxoC3zvdgq8CX8YdI56L IZepHOjo7mhnhmC8Q2VAMeInSwFjBM8P35dUqKp42I4TOcfinm1c X-Google-Smtp-Source: AGHT+IFFH2dXD4/u8KGoMcsdlAu0XJqAkbNBFR0eSBy3BkBtBCA1KnsX++lMxG2V+BFH8gOUwBq8xQ== X-Received: by 2002:a05:6300:668a:b0:1d9:2992:d6c2 with SMTP id adf61e73a8af0-1d92c49fc95mr3759338637.2.1729268303039; Fri, 18 Oct 2024 09:18:23 -0700 (PDT) Received: from dw-tp.ibmuc.com ([171.76.80.151]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-71ea345677asm1692140b3a.147.2024.10.18.09.18.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Oct 2024 09:18:22 -0700 (PDT) From: "Ritesh Harjani (IBM)" To: linuxppc-dev@lists.ozlabs.org Cc: linux-mm@kvack.org, Zi Yan , David Hildenbrand , Sourabh Jain , Hari Bathini , Mahesh J Salgaonkar , Michael Ellerman , Madhavan Srinivasan , "Aneesh Kumar K . V" , Donet Tom , LKML , Sachin P Bappalige , "Ritesh Harjani (IBM)" Subject: [PATCH v4 3/3] powerpc/fadump: Move fadump_cma_init to setup_arch() after initmem_init() Date: Fri, 18 Oct 2024 21:47:57 +0530 Message-ID: <3ae208e48c0d9cefe53d2dc4f593388067405b7d.1729146153.git.ritesh.list@gmail.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: pr557tuk469rqaqy1x55rmkbhjkfcq6u X-Rspamd-Queue-Id: CE2B340009 X-Rspamd-Server: rspam11 X-HE-Tag: 1729268289-884114 X-HE-Meta: U2FsdGVkX19WfoFtCsBtrLLWr/W4xN0jJEFAVndbfXy3QAjFx9yCF81hD22KDM9dZ7eXa6c2Np6oXO3K5PbYQgsKiWVJvDliqhsi+mlCxTxfhfOQxu6EADsLQdxzacolB8FRnVm+ZmCxlEhGibkG55f8hfP0GKa7IBt5T+pV6BFLT/auMFrUT8yPXc62quBNOKCQczb1Ols3TX/SkwikXhQxlehY0MRPcR9V/OpUQtmxNTFDopA0JT+OH4Wm98ABVdq6mf6uojSpurzQNTHYE3JMbhin/lyT7yDW9xbgg63R5wQW7LGi0FgGEDGWprLEEN+xaSK/Irs8pUdk51+pdBUab8kPWM3832D996ZdwVnK8QxgQveo0uvS9UbwVkuRQnlsVvpHuYPyfkWH0UNTlkqAqIM0+y8VwatRb8N3lSQRf8Ly+/5yhXCCPo9LLEADzc2XPLujPNiUJfpBlgzvKKbPA8MEpE1HZL4BQXjvb5I0qOFklNwMctGAmq/cUhyXurGBZ7u4JzlBarPp7ZPbhUIj29esCy2+YEal8MMeViL2Hjrt8BM4j06QkV9WlkEnQ6jZNB3FZYyeU0rn0FYz2niNUWd4DzLhkZ6GdmxyQEioExSc50ArzT+1B4TNcoFIHt380pH41HXi5UNyKF0ZT8JjPvKo3AZaG63C0ODKdXLP27Bwje8WnoMUffTauHhwI6YnLixeemEUlOpKzFHypXU0I0LOiEoFzMhwMxcugzTDQwwnrM6IKIkVQKe6enwfSi9cz619rbEy7MVOBvoLkxSlNzA+3+9UpCeRkDyboAtcIm/XrUynrK81ArUBM0S3QweytyEOK3QBYGAOVcusUJx/eoPWiLPB2CEDXY6I91TeSHqsE5UtkHcqlUClIojRxMvlpMghHdrLT4ZAk3HU2RB4GshKmI0eu9YZctxFsykbVQoEhgJKVBEZtE/oQ1g00y5facGX9GpAlKRyzjc Cdjq6Gtc 14BUe/YuWK53pxIAWsWBB/RYTSP9SC01jPZbHMSjwpJN8JiEYtSzP0xmR1NvKWVFoDoz9pkP0iySWn5Crjoql97aXjji4nA1u/5rHIuZff/enbMrhsp+c+4lHUqtsHo1P0HqU6jJT+6X8dxxZo4qu3UbJa80eV8CDpOfMPTTB0ZJOyepOQTM5AgKBcZhNv/8ghT17/K02TvD2u8qnoUv1comtnBeo2Xchr3rYh6GF+KLUt62v0W3BcYWmGo43yPeZ01hrnTyhbQsjc2empoyiv83BA2CWtmWCiOFQk48U1RYXHtx+LcOC4GeWQFx9OYTV4col+zUzbv6FT7AJJV2TUWVSYA== 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: During early init CMA_MIN_ALIGNMENT_BYTES can be PAGE_SIZE, since pageblock_order is still zero and it gets initialized later during initmem_init() e.g. setup_arch() -> initmem_init() -> sparse_init() -> set_pageblock_order() One such use case where this causes issue is - early_setup() -> early_init_devtree() -> fadump_reserve_mem() -> fadump_cma_init() This causes CMA memory alignment check to be bypassed in cma_init_reserved_mem(). Then later cma_activate_area() can hit a VM_BUG_ON_PAGE(pfn & ((1 << order) - 1)) if the reserved memory area was not pageblock_order aligned. Fix it by moving the fadump_cma_init() after initmem_init(), where other such cma reservations also gets called. ============== page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x10010 flags: 0x13ffff800000000(node=1|zone=0|lastcpupid=0x7ffff) CMA raw: 013ffff800000000 5deadbeef0000100 5deadbeef0000122 0000000000000000 raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000 page dumped because: VM_BUG_ON_PAGE(pfn & ((1 << order) - 1)) ------------[ cut here ]------------ kernel BUG at mm/page_alloc.c:778! Call Trace: __free_one_page+0x57c/0x7b0 (unreliable) free_pcppages_bulk+0x1a8/0x2c8 free_unref_page_commit+0x3d4/0x4e4 free_unref_page+0x458/0x6d0 init_cma_reserved_pageblock+0x114/0x198 cma_init_reserved_areas+0x270/0x3e0 do_one_initcall+0x80/0x2f8 kernel_init_freeable+0x33c/0x530 kernel_init+0x34/0x26c ret_from_kernel_user_thread+0x14/0x1c Fixes: 11ac3e87ce09 ("mm: cma: use pageblock_order as the single alignment") Suggested-by: David Hildenbrand Reported-by: Sachin P Bappalige Acked-by: Hari Bathini Reviewed-by: Madhavan Srinivasan Signed-off-by: Ritesh Harjani (IBM) --- arch/powerpc/include/asm/fadump.h | 7 +++++++ arch/powerpc/kernel/fadump.c | 6 +----- arch/powerpc/kernel/setup-common.c | 6 ++++-- 3 files changed, 12 insertions(+), 7 deletions(-) -- 2.46.0 diff --git a/arch/powerpc/include/asm/fadump.h b/arch/powerpc/include/asm/fadump.h index ef40c9b6972a..3638f04447f5 100644 --- a/arch/powerpc/include/asm/fadump.h +++ b/arch/powerpc/include/asm/fadump.h @@ -34,4 +34,11 @@ extern int early_init_dt_scan_fw_dump(unsigned long node, const char *uname, int depth, void *data); extern int fadump_reserve_mem(void); #endif + +#if defined(CONFIG_FA_DUMP) && defined(CONFIG_CMA) +void fadump_cma_init(void); +#else +static inline void fadump_cma_init(void) { } +#endif + #endif /* _ASM_POWERPC_FADUMP_H */ diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c index ffaec625b7a8..c42f89862893 100644 --- a/arch/powerpc/kernel/fadump.c +++ b/arch/powerpc/kernel/fadump.c @@ -78,7 +78,7 @@ static struct cma *fadump_cma; * But for some reason even if it fails we still have the memory reservation * with us and we can still continue doing fadump. */ -static void __init fadump_cma_init(void) +void __init fadump_cma_init(void) { unsigned long long base, size, end; int rc; @@ -139,8 +139,6 @@ static void __init fadump_cma_init(void) fw_dump.boot_memory_size >> 20); return; } -#else -static void __init fadump_cma_init(void) { } #endif /* CONFIG_CMA */ /* @@ -642,8 +640,6 @@ int __init fadump_reserve_mem(void) pr_info("Reserved %lldMB of memory at %#016llx (System RAM: %lldMB)\n", (size >> 20), base, (memblock_phys_mem_size() >> 20)); - - fadump_cma_init(); } return ret; diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 943430077375..b6b01502e504 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -997,9 +997,11 @@ void __init setup_arch(char **cmdline_p) initmem_init(); /* - * Reserve large chunks of memory for use by CMA for KVM and hugetlb. These must - * be called after initmem_init(), so that pageblock_order is initialised. + * Reserve large chunks of memory for use by CMA for fadump, KVM and + * hugetlb. These must be called after initmem_init(), so that + * pageblock_order is initialised. */ + fadump_cma_init(); kvm_cma_reserve(); gigantic_hugetlb_cma_reserve();