From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 862F21F9AB5 for ; Fri, 3 Jan 2025 10:52:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1735901532; cv=none; b=m/Q/UjLNKDxIY9JZfsqLnv5vB7fdZT9/pDGQxnO8oNt27Hmn/mhLlP5Kd2Y88G5A04jYZoWl23xcP7p9hooHe3XmNUklcdMfNHEq4DDg6DGmHE4NQeaz1C2xvbw9U2mVFmwLzuNrfMbTmVtjlW1x+XTeWpdXYnpGTIg/g0InZSE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1735901532; c=relaxed/simple; bh=94pVUqnGqZ4byhfEhSqgetNwmh8uGOzyKcxSdN4utSs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VQIt72xQtOgGGrF+zSx06FrBL4HytpW3TDfKRRmrdR3l8fXNYgES7LiSjvsSCksH/nsQMv+9E0pCssTJmcQZWXCvYenjdx3iwiUYkG/qXZ3AwXJIDx4nk/kEKho2/LxURSAnOwxaH3H+zj4ndjwDGHqP5bYE+j9JW6q2FebDnaU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=iWExCbAV; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iWExCbAV" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2162c0f6a39so176034625ad.0 for ; Fri, 03 Jan 2025 02:52:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1735901530; x=1736506330; darn=vger.kernel.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=Cy+yX6wEbnIcQp94PEsxSyfI8yNEpKG8JNMSnjXRqAI=; b=iWExCbAVFAdtu5/0mthc7Tc94EdFIgRGMl+3zJuCvEXziB08fL16w3wl9J9r/Lrj9u luxRosPf7DK99UOQswEuRLxHKAlTVt+3zmfuh/hHOv7ZGrXdlN1xiUrlP/S5Y1qahTJL u3CWN0BsUIitvNsFY8H2aVlkNLpMz9fnMiPsFIXSQvYBU1N6LJMvSVW8yM/Pg66J+Cjh ZXCxYpCdT/QX8GGfV1bQgQrv+3AOeos30Zu+RXF0iChCVK0VF9S/ZD4G4xEaeyW9mUVR t8TCmLukexOrLJnrlFwPt9jk33++KNhg3Xoru836z1c912llS8Z/pXq+EuitxeZYqv0Y 4udA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1735901530; x=1736506330; 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=Cy+yX6wEbnIcQp94PEsxSyfI8yNEpKG8JNMSnjXRqAI=; b=FIss+qaMoNgVgMJshQc0Qh7ZkmQVBYeU5kQEDyQ9oWShddHWPo0O5oGwS4zJQ3+OGm HHb8gEY5468poOspOnX/+YAhZRK7+8Zu4RP5ytEyrTjyg2Iwap5NJwnMJRr1oLgX4pFK f1bF+mXMZerKCTKjxKWK7pqtYRlpoB6Dqj/47E8NlRpTWYQP71+sB2nCoBrtAtxP9aqw EByIo29aZr14kWWjmTwqn4DBTNb/or48H0eDOOpKonR2Ed+RETQ7WvFoPLLDjUnkIPoH +ACkuB5c3fR7q51PMK5Zwt4OyBgQgMbSlrS5zuE4MoMb9s1RmRDjKkMkEySTq00pc9S/ gxJw== X-Forwarded-Encrypted: i=1; AJvYcCUwcqxAh9NKBDPwT6UiFBdLRuh1ndJhHC/pWrLxXwPE81A5L4E9iCSoGRxNk5chQwEDoW4O8k7R6ylxylo=@vger.kernel.org X-Gm-Message-State: AOJu0Yy/zt1yFZhNU8eLKgQxEhYY2zpj1bcxf8gUcVFljOOT/1XZ95ID un9orEirK60ls3u04zRJlsyJfnfz1in6zrHMScNO6E8oY/wKG+JQ X-Gm-Gg: ASbGncuqPAVSn+9mJLND9HlTYV6Te5u1hS3/Cz8Qe08tTbqDXbk8N6BIUFQdnNnpX7h m2bZe2iOcDwWmiqelvxyDJRSHdaOqkS5LjBj+LutphPk7xCnmlgWJ4BTH6poKH1a5TBUHcQGCyc NnEo+MpVevE2v6Q28/2UcltTPXcgcY4+3Vx1H6HJUcOz9eB4hEGVdK3EGXoVkbPEUhzrrmAFbGo eoNBtK/9WR/sx3UxoeLWcAVF3IxSW8qzuSWnTdcziRFjGkaDx2xzGJivNTKDSqh45IXT3Xv7KvR f11v X-Google-Smtp-Source: AGHT+IEFyETklwSj2j6erSwDIdU9K6u5rhSzXwT6aCJIlf3JqQYNREYAUxQsw/AQtYTFrVfR+9hOOQ== X-Received: by 2002:a05:6a20:43ac:b0:1e1:e2d8:fd4a with SMTP id adf61e73a8af0-1e5e1e04618mr69199866637.5.1735901529701; Fri, 03 Jan 2025 02:52:09 -0800 (PST) Received: from localhost.localdomain ([36.110.106.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72aad8157edsm26802019b3a.20.2025.01.03.02.52.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Jan 2025 02:52:09 -0800 (PST) From: Guo Weikang To: Mike Rapoport , Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Guo Weikang Subject: [PATCH 2/3] mm/memblock: Modify the default failure behavior of memblock_alloc_raw to panic Date: Fri, 3 Jan 2025 18:51:57 +0800 Message-Id: <20250103105158.1350689-2-guoweikang.kernel@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250103105158.1350689-1-guoweikang.kernel@gmail.com> References: <20250103105158.1350689-1-guoweikang.kernel@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Just like memblock_alloc, the default failure behavior of memblock_alloc_raw is now modified to trigger a panic when allocation fails. memblock_alloc_no_panic has been introduced to handle cases where panic behavior is not desired. Signed-off-by: Guo Weikang --- arch/openrisc/mm/init.c | 3 --- arch/powerpc/kernel/paca.c | 4 ---- arch/powerpc/kernel/prom.c | 3 --- arch/powerpc/platforms/pseries/plpks.c | 2 +- include/linux/memblock.h | 17 +++++++---------- mm/memblock.c | 13 +++++++++++-- 6 files changed, 19 insertions(+), 23 deletions(-) diff --git a/arch/openrisc/mm/init.c b/arch/openrisc/mm/init.c index d0cb1a0126f9..9e0047764f54 100644 --- a/arch/openrisc/mm/init.c +++ b/arch/openrisc/mm/init.c @@ -96,9 +96,6 @@ static void __init map_ram(void) /* Alloc one page for holding PTE's... */ pte = memblock_alloc_raw(PAGE_SIZE, PAGE_SIZE); - if (!pte) - panic("%s: Failed to allocate page for PTEs\n", - __func__); set_pmd(pme, __pmd(_KERNPG_TABLE + __pa(pte))); /* Fill the newly allocated page with PTE'S */ diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c index 7502066c3c53..9d15799e97d4 100644 --- a/arch/powerpc/kernel/paca.c +++ b/arch/powerpc/kernel/paca.c @@ -246,10 +246,6 @@ void __init allocate_paca_ptrs(void) paca_ptrs_size = sizeof(struct paca_struct *) * nr_cpu_ids; paca_ptrs = memblock_alloc_raw(paca_ptrs_size, SMP_CACHE_BYTES); - if (!paca_ptrs) - panic("Failed to allocate %d bytes for paca pointers\n", - paca_ptrs_size); - memset(paca_ptrs, 0x88, paca_ptrs_size); } diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index e0059842a1c6..3aba66ddd2c8 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c @@ -128,9 +128,6 @@ static void __init move_device_tree(void) !memblock_is_memory(start + size - 1) || overlaps_crashkernel(start, size) || overlaps_initrd(start, size)) { p = memblock_alloc_raw(size, PAGE_SIZE); - if (!p) - panic("Failed to allocate %lu bytes to move device tree\n", - size); memcpy(p, initial_boot_params, size); initial_boot_params = p; DBG("Moved device tree to 0x%px\n", p); diff --git a/arch/powerpc/platforms/pseries/plpks.c b/arch/powerpc/platforms/pseries/plpks.c index b1667ed05f98..1bcbed41ce44 100644 --- a/arch/powerpc/platforms/pseries/plpks.c +++ b/arch/powerpc/platforms/pseries/plpks.c @@ -671,7 +671,7 @@ void __init plpks_early_init_devtree(void) return; } - ospassword = memblock_alloc_raw(len, SMP_CACHE_BYTES); + ospassword = memblock_alloc_raw_no_panic(len, SMP_CACHE_BYTES); if (!ospassword) { pr_err("Error allocating memory for password.\n"); goto out; diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 6b21a3834225..b68c141ebc44 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -418,20 +418,17 @@ static __always_inline void *memblock_alloc(phys_addr_t size, phys_addr_t align) } void *__memblock_alloc_panic(phys_addr_t size, phys_addr_t align, - const char *func, bool should_panic); + const char *func, bool should_panic, bool raw); #define memblock_alloc(size, align) \ - __memblock_alloc_panic(size, align, __func__, true) + __memblock_alloc_panic(size, align, __func__, true, false) #define memblock_alloc_no_panic(size, align) \ - __memblock_alloc_panic(size, align, __func__, false) + __memblock_alloc_panic(size, align, __func__, false, false) -static inline void *memblock_alloc_raw(phys_addr_t size, - phys_addr_t align) -{ - return memblock_alloc_try_nid_raw(size, align, MEMBLOCK_LOW_LIMIT, - MEMBLOCK_ALLOC_ACCESSIBLE, - NUMA_NO_NODE); -} +#define memblock_alloc_raw(size, align) \ + __memblock_alloc_panic(size, align, __func__, true, true) +#define memblock_alloc_raw_no_panic(size, align) \ + __memblock_alloc_panic(size, align, __func__, false, true) static inline void *memblock_alloc_from(phys_addr_t size, phys_addr_t align, diff --git a/mm/memblock.c b/mm/memblock.c index 901da45ecf8b..4974ae2ee5ec 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -1697,15 +1697,24 @@ void * __init memblock_alloc_try_nid( * @align: alignment of the region and block's size * @func: caller func name * @should_panic: whether failed panic + * @raw: whether zeroing mem * * In case of failure, it calls panic with the formatted message. * This function should not be used directly, please use the macro * memblock_alloc and memblock_alloc_no_panic. + * memblock_alloc_raw and memblock_alloc_raw_no_panic. */ void *__init __memblock_alloc_panic(phys_addr_t size, phys_addr_t align, - const char *func, bool should_panic) + const char *func, bool should_panic, + bool raw) { - void *addr = memblock_alloc_try_nid(size, align, MEMBLOCK_LOW_LIMIT, + void *addr; + + if (unlikely(raw)) + addr = memblock_alloc_try_nid_raw(size, align, MEMBLOCK_LOW_LIMIT, + MEMBLOCK_ALLOC_ACCESSIBLE, NUMA_NO_NODE); + else + addr = memblock_alloc_try_nid(size, align, MEMBLOCK_LOW_LIMIT, MEMBLOCK_ALLOC_ACCESSIBLE, NUMA_NO_NODE); if (unlikely(!addr && should_panic)) -- 2.25.1