Patch "arch/sparc: support NR_CPUS = 4096" has been added to the 4.11-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
arch/sparc: support NR_CPUS = 4096
to the 4.11-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
arch-sparc-support-nr_cpus-4096.patch
and it can be found in the queue-4.11 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Jun 8 08:58:43 CEST 2017
From: Jane Chu <[email protected]>
Date: Tue, 6 Jun 2017 14:32:29 -0600
Subject: arch/sparc: support NR_CPUS = 4096
From: Jane Chu <[email protected]>
[ Upstream commit c79a13734d104b5b147d7cb0870276ccdd660dae ]
Linux SPARC64 limits NR_CPUS to 4064 because init_cpu_send_mondo_info() only allocates a single page for NR_CPUS mondo entries. Thus we cannot use all 4096 CPUs on some SPARC platforms.
To fix, allocate (2^order) pages where order is set according to the size of cpu_list for possible cpus. Since cpu_list_pa and cpu_mondo_block_pa are not used in asm code, there are no imm13 offsets from the base PA that will break because they can only reach one page.
Orabug: 25505750
--- arch/sparc/Kconfig | 4 ++-- arch/sparc/kernel/irq_64.c | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-)
arch/sparc/Kconfig +2 -2
@@ -192,9 +192,9 @@ config NR_CPUS int "Maximum number of CPUs" depends on SMP range 2 32 if SPARC32 - range 2 1024 if SPARC64 + range 2 4096 if SPARC64 default 32 if SPARC32 - default 64 if SPARC64 + default 4096 if SPARC64 source kernel/Kconfig.hz
arch/sparc/kernel/irq_64.c +13 -4
@@ -1034,17 +1034,26 @@ static void __init init_cpu_send_mondo_i {#ifdef CONFIG_SMP unsigned long page; +void *mondo, *p; -BUILD_BUG_ON ((NR_CPUS *sizeof (u16)) > (PAGE_SIZE -64 )); +BUILD_BUG_ON ((NR_CPUS *sizeof (u16)) >PAGE_SIZE ); + +/* Make sure mondo block is 64byte aligned */ + p =kzalloc (127 ,GFP_KERNEL ); +if (!p) { +prom_printf ("SUN4V: Error, cannot allocate mondo block.\n" ); +prom_halt (); + } + mondo = (void *)(((unsigned long )p +63 ) & ~0x3f ); + tb->cpu_mondo_block_pa =__pa (mondo); page =get_zeroed_page (GFP_KERNEL );if (!page) { -prom_printf ("SUN4V: Error, cannot allocate cpu mondo page.\n" ); +prom_printf ("SUN4V: Error, cannot allocate cpu list page.\n" );prom_halt (); } - tb->cpu_mondo_block_pa =__pa (page); - tb->cpu_list_pa =__pa (page +64 ); + tb->cpu_list_pa =__pa (page);#endif }
Patches currently in stable-queue which might be from [email protected] are
queue-4.11/arch-sparc-support-nr_cpus-4096.patch