mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 00:28:52 +02:00 
			
		
		
		
	powerpc: Add HOTPLUG_SMT support
Add support for HOTPLUG_SMT, which enables the generic sysfs SMT support files in /sys/devices/system/cpu/smt, as well as the "nosmt" boot parameter. Implement the recently added hooks to allow partial SMT states, allow any number of threads per core. Tie the config symbol to HOTPLUG_CPU, which enables it on the major platforms that support SMT. If there are other platforms that want the SMT support that can be tweaked in future. Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> [ldufour: remove topology_smt_supported] [ldufour: remove topology_smt_threads_supported] [ldufour: select CONFIG_SMT_NUM_THREADS_DYNAMIC] [ldufour: update kernel-parameters.txt] Signed-off-by: Laurent Dufour <ldufour@linux.ibm.com> Link: https://msgid.link/20230705145143.40545-10-ldufour@linux.ibm.com
This commit is contained in:
		
							parent
							
								
									3b3a4d0fe5
								
							
						
					
					
						commit
						73c58e7e14
					
				
					 4 changed files with 26 additions and 3 deletions
				
			
		|  | @ -3853,10 +3853,10 @@ | |||
| 	nosmp		[SMP] Tells an SMP kernel to act as a UP kernel, | ||||
| 			and disable the IO APIC.  legacy for "maxcpus=0". | ||||
| 
 | ||||
| 	nosmt		[KNL,MIPS,S390] Disable symmetric multithreading (SMT). | ||||
| 	nosmt		[KNL,MIPS,PPC,S390] Disable symmetric multithreading (SMT). | ||||
| 			Equivalent to smt=1. | ||||
| 
 | ||||
| 			[KNL,X86] Disable symmetric multithreading (SMT). | ||||
| 			[KNL,X86,PPC] Disable symmetric multithreading (SMT). | ||||
| 			nosmt=force: Force disable SMT, cannot be undone | ||||
| 				     via the sysfs control file. | ||||
| 
 | ||||
|  |  | |||
|  | @ -272,6 +272,8 @@ config PPC | |||
| 	select HAVE_SYSCALL_TRACEPOINTS | ||||
| 	select HAVE_VIRT_CPU_ACCOUNTING | ||||
| 	select HAVE_VIRT_CPU_ACCOUNTING_GEN | ||||
| 	select HOTPLUG_SMT			if HOTPLUG_CPU | ||||
| 	select SMT_NUM_THREADS_DYNAMIC | ||||
| 	select HUGETLB_PAGE_SIZE_VARIABLE	if PPC_BOOK3S_64 && HUGETLB_PAGE | ||||
| 	select IOMMU_HELPER			if PPC64 | ||||
| 	select IRQ_DOMAIN | ||||
|  |  | |||
|  | @ -143,5 +143,20 @@ static inline int cpu_to_coregroup_id(int cpu) | |||
| #endif | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_HOTPLUG_SMT | ||||
| #include <linux/cpu_smt.h> | ||||
| #include <asm/cputhreads.h> | ||||
| 
 | ||||
| static inline bool topology_is_primary_thread(unsigned int cpu) | ||||
| { | ||||
| 	return cpu == cpu_first_thread_sibling(cpu); | ||||
| } | ||||
| 
 | ||||
| static inline bool topology_smt_thread_allowed(unsigned int cpu) | ||||
| { | ||||
| 	return cpu_thread_in_core(cpu) < cpu_smt_num_threads; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #endif /* __KERNEL__ */ | ||||
| #endif	/* _ASM_POWERPC_TOPOLOGY_H */ | ||||
|  |  | |||
|  | @ -1087,7 +1087,7 @@ static int __init init_big_cores(void) | |||
| 
 | ||||
| void __init smp_prepare_cpus(unsigned int max_cpus) | ||||
| { | ||||
| 	unsigned int cpu; | ||||
| 	unsigned int cpu, num_threads; | ||||
| 
 | ||||
| 	DBG("smp_prepare_cpus\n"); | ||||
| 
 | ||||
|  | @ -1154,6 +1154,12 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 
 | ||||
| 	if (smp_ops && smp_ops->probe) | ||||
| 		smp_ops->probe(); | ||||
| 
 | ||||
| 	// Initalise the generic SMT topology support
 | ||||
| 	num_threads = 1; | ||||
| 	if (smt_enabled_at_boot) | ||||
| 		num_threads = smt_enabled_at_boot; | ||||
| 	cpu_smt_set_num_threads(num_threads, threads_per_core); | ||||
| } | ||||
| 
 | ||||
| void smp_prepare_boot_cpu(void) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Michael Ellerman
						Michael Ellerman