From: Sasha Levin <sashal@kernel.org> To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Yury Norov <yury.norov@gmail.com>, Stephen Rothwell <sfr@canb.auug.org.au>, Sasha Levin <sashal@kernel.org>, mpe@ellerman.id.au, christophe.leroy@csgroup.eu, aik@ozlabs.ru, amodra@au1.ibm.com, dja@axtens.net, linuxppc-dev@lists.ozlabs.org Subject: [PATCH AUTOSEL 4.19 05/10] powerpc/64: don't refer nr_cpu_ids in asm code when it's undefined Date: Mon, 17 Oct 2022 20:11:23 -0400 [thread overview] Message-ID: <20221018001128.2732162-5-sashal@kernel.org> (raw) In-Reply-To: <20221018001128.2732162-1-sashal@kernel.org> From: Yury Norov <yury.norov@gmail.com> [ Upstream commit 546a073d628111e3338af689938407e77d5dc38f ] generic_secondary_common_init() calls LOAD_REG_ADDR(r7, nr_cpu_ids) conditionally on CONFIG_SMP. However, if 'NR_CPUS == 1', kernel doesn't use the nr_cpu_ids, and in C code, it's just: #if NR_CPUS == 1 #define nr_cpu_ids ... This series makes declaration of nr_cpu_ids conditional on NR_CPUS == 1, and that reveals the issue, because compiler can't link the LOAD_REG_ADDR(r7, nr_cpu_ids) against nonexisting symbol. Current code looks unsafe for those who build kernel with CONFIG_SMP=y and NR_CPUS == 1. This is weird configuration, but not disallowed. Fix the linker error by replacing LOAD_REG_ADDR() with LOAD_REG_IMMEDIATE() conditionally on NR_CPUS == 1. As the following patch adds CONFIG_FORCE_NR_CPUS option that has the similar effect on nr_cpu_ids, make the generic_secondary_common_init() conditional on it too. Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Yury Norov <yury.norov@gmail.com> Signed-off-by: Sasha Levin <sashal@kernel.org> --- arch/powerpc/kernel/head_64.S | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index 4f7b225d78cf..4215439a4663 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S @@ -398,8 +398,12 @@ generic_secondary_common_init: #else LOAD_REG_ADDR(r8, paca_ptrs) /* Load paca_ptrs pointe */ ld r8,0(r8) /* Get base vaddr of array */ +#if (NR_CPUS == 1) || defined(CONFIG_FORCE_NR_CPUS) + LOAD_REG_IMMEDIATE(r7, NR_CPUS) +#else LOAD_REG_ADDR(r7, nr_cpu_ids) /* Load nr_cpu_ids address */ lwz r7,0(r7) /* also the max paca allocated */ +#endif li r5,0 /* logical cpu id */ 1: sldi r9,r5,3 /* get paca_ptrs[] index from cpu id */ -- 2.35.1
WARNING: multiple messages have this Message-ID (diff)
From: Sasha Levin <sashal@kernel.org> To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sasha Levin <sashal@kernel.org>, Stephen Rothwell <sfr@canb.auug.org.au>, Yury Norov <yury.norov@gmail.com>, aik@ozlabs.ru, amodra@au1.ibm.com, linuxppc-dev@lists.ozlabs.org, dja@axtens.net Subject: [PATCH AUTOSEL 4.19 05/10] powerpc/64: don't refer nr_cpu_ids in asm code when it's undefined Date: Mon, 17 Oct 2022 20:11:23 -0400 [thread overview] Message-ID: <20221018001128.2732162-5-sashal@kernel.org> (raw) In-Reply-To: <20221018001128.2732162-1-sashal@kernel.org> From: Yury Norov <yury.norov@gmail.com> [ Upstream commit 546a073d628111e3338af689938407e77d5dc38f ] generic_secondary_common_init() calls LOAD_REG_ADDR(r7, nr_cpu_ids) conditionally on CONFIG_SMP. However, if 'NR_CPUS == 1', kernel doesn't use the nr_cpu_ids, and in C code, it's just: #if NR_CPUS == 1 #define nr_cpu_ids ... This series makes declaration of nr_cpu_ids conditional on NR_CPUS == 1, and that reveals the issue, because compiler can't link the LOAD_REG_ADDR(r7, nr_cpu_ids) against nonexisting symbol. Current code looks unsafe for those who build kernel with CONFIG_SMP=y and NR_CPUS == 1. This is weird configuration, but not disallowed. Fix the linker error by replacing LOAD_REG_ADDR() with LOAD_REG_IMMEDIATE() conditionally on NR_CPUS == 1. As the following patch adds CONFIG_FORCE_NR_CPUS option that has the similar effect on nr_cpu_ids, make the generic_secondary_common_init() conditional on it too. Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Yury Norov <yury.norov@gmail.com> Signed-off-by: Sasha Levin <sashal@kernel.org> --- arch/powerpc/kernel/head_64.S | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index 4f7b225d78cf..4215439a4663 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S @@ -398,8 +398,12 @@ generic_secondary_common_init: #else LOAD_REG_ADDR(r8, paca_ptrs) /* Load paca_ptrs pointe */ ld r8,0(r8) /* Get base vaddr of array */ +#if (NR_CPUS == 1) || defined(CONFIG_FORCE_NR_CPUS) + LOAD_REG_IMMEDIATE(r7, NR_CPUS) +#else LOAD_REG_ADDR(r7, nr_cpu_ids) /* Load nr_cpu_ids address */ lwz r7,0(r7) /* also the max paca allocated */ +#endif li r5,0 /* logical cpu id */ 1: sldi r9,r5,3 /* get paca_ptrs[] index from cpu id */ -- 2.35.1
next prev parent reply other threads:[~2022-10-18 0:17 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-10-18 0:11 [PATCH AUTOSEL 4.19 01/10] crypto: qcom-rng - Fix qcom_rng_of_match unused warning Sasha Levin 2022-10-18 0:11 ` [PATCH AUTOSEL 4.19 02/10] of/fdt: Don't calculate initrd size from DT if start > end Sasha Levin 2022-10-18 0:11 ` [PATCH AUTOSEL 4.19 03/10] objtool,x86: Teach decode about LOOP* instructions Sasha Levin 2022-10-18 0:11 ` [PATCH AUTOSEL 4.19 04/10] gfs2: Check sb_bsize_shift after reading superblock Sasha Levin 2022-10-18 0:11 ` [Cluster-devel] " Sasha Levin 2022-10-18 0:11 ` Sasha Levin [this message] 2022-10-18 0:11 ` [PATCH AUTOSEL 4.19 05/10] powerpc/64: don't refer nr_cpu_ids in asm code when it's undefined Sasha Levin 2022-10-18 0:11 ` [PATCH AUTOSEL 4.19 06/10] m68knommu: fix non-specific 68328 choice interrupt build failure Sasha Levin 2022-10-18 0:11 ` [PATCH AUTOSEL 4.19 07/10] m68knommu: fix non-mmu classic 68000 legacy timer tick selection Sasha Levin 2022-10-18 0:11 ` [PATCH AUTOSEL 4.19 08/10] 9p: trans_fd/p9_conn_cancel: drop client lock earlier Sasha Levin 2022-10-18 0:11 ` [PATCH AUTOSEL 4.19 09/10] 9p/trans_fd: always use O_NONBLOCK read/write Sasha Levin 2022-10-18 0:11 ` [PATCH AUTOSEL 4.19 10/10] virtio_pci: don't try to use intxif pin is zero Sasha Levin 2022-10-18 0:11 ` Sasha Levin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20221018001128.2732162-5-sashal@kernel.org \ --to=sashal@kernel.org \ --cc=aik@ozlabs.ru \ --cc=amodra@au1.ibm.com \ --cc=christophe.leroy@csgroup.eu \ --cc=dja@axtens.net \ --cc=linux-kernel@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=mpe@ellerman.id.au \ --cc=sfr@canb.auug.org.au \ --cc=stable@vger.kernel.org \ --cc=yury.norov@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.