FAILED: patch "[PATCH] LoongArch/smp: Call rcutree_report_cpu_starting() at" failed to apply to 6.6-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x 5056c596c3d1848021a4eaa76ee42f4c05c50346
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024012912-yahoo-patchwork-d338@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
Possible dependencies:
5056c596c3d1 ("LoongArch/smp: Call rcutree_report_cpu_starting() at tlb_init()")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 5056c596c3d1848021a4eaa76ee42f4c05c50346 Mon Sep 17 00:00:00 2001
From: Huacai Chen <[email protected]>
Date: Fri, 26 Jan 2024 16:22:07 +0800
Subject: [PATCH] LoongArch/smp: Call rcutree_report_cpu_starting() at
tlb_init()
Machines which have more than 8 nodes fail to boot SMP after commit a2ccf46333d7b2cf96 ("LoongArch/smp: Call rcutree_report_cpu_starting() earlier"). Because such machines use tlb-based per-cpu base address rather than dmw-based per-cpu base address, resulting per-cpu variables can only be accessed after tlb_init(). But rcutree_report_cpu_starting() is now called before tlb_init() and accesses per-cpu variables indeed.
Since the original patch want to avoid the lockdep warning caused by page allocation in tlb_init(), we can move rcutree_report_cpu_starting() to tlb_init() where after tlb exception configuration but before page allocation.
arch/loongarch/kernel/smp.c +0 -1
@@ -509,7 +509,6 @@ asmlinkage void start_secondary(void)sync_counter (); cpu =raw_smp_processor_id ();set_my_cpu_offset (per_cpu_offset (cpu)); -rcutree_report_cpu_starting (cpu);cpu_probe ();constant_clockevent_init ();
arch/loongarch/mm/tlb.c +10 -6
@@ -284,12 +284,16 @@ static void setup_tlb_handler(int cpu)set_handler (EXCCODE_TLBNR *VECSIZE , handle_tlb_protect,VECSIZE );set_handler (EXCCODE_TLBNX *VECSIZE , handle_tlb_protect,VECSIZE );set_handler (EXCCODE_TLBPE *VECSIZE , handle_tlb_protect,VECSIZE ); - } + }else { +int vec_sz__maybe_unused ; +void *addr__maybe_unused ; +struct page *page__maybe_unused ; + +/* Avoid lockdep warning */ +rcutree_report_cpu_starting (cpu); +#ifdef CONFIG_NUMA - else { -void *addr; -struct page *page; -const int vec_sz =sizeof (exception_handlers); + vec_sz =sizeof (exception_handlers);if (pcpu_handlers[cpu])return ;
@@ -305,8 +309,8 @@ static void setup_tlb_handler(int cpu)csr_write64 (pcpu_handlers[cpu],LOONGARCH_CSR_EENTRY );csr_write64 (pcpu_handlers[cpu],LOONGARCH_CSR_MERRENTRY );csr_write64 (pcpu_handlers[cpu] +80 *VECSIZE ,LOONGARCH_CSR_TLBRENTRY ); - }#endif + } }void tlb_init (int cpu)