mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	cpu/SMT: create and export cpu_smt_possible()
KVM needs to know if SMT is theoretically possible, this means it is
supported and not forcefully disabled ('nosmt=force'). Create and
export cpu_smt_possible() answering this question.
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									a073d7e3ad
								
							
						
					
					
						commit
						e1572f1d08
					
				
					 2 changed files with 11 additions and 2 deletions
				
			
		|  | @ -201,12 +201,14 @@ enum cpuhp_smt_control { | ||||||
| extern enum cpuhp_smt_control cpu_smt_control; | extern enum cpuhp_smt_control cpu_smt_control; | ||||||
| extern void cpu_smt_disable(bool force); | extern void cpu_smt_disable(bool force); | ||||||
| extern void cpu_smt_check_topology(void); | extern void cpu_smt_check_topology(void); | ||||||
|  | extern bool cpu_smt_possible(void); | ||||||
| extern int cpuhp_smt_enable(void); | extern int cpuhp_smt_enable(void); | ||||||
| extern int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval); | extern int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval); | ||||||
| #else | #else | ||||||
| # define cpu_smt_control		(CPU_SMT_NOT_IMPLEMENTED) | # define cpu_smt_control		(CPU_SMT_NOT_IMPLEMENTED) | ||||||
| static inline void cpu_smt_disable(bool force) { } | static inline void cpu_smt_disable(bool force) { } | ||||||
| static inline void cpu_smt_check_topology(void) { } | static inline void cpu_smt_check_topology(void) { } | ||||||
|  | static inline bool cpu_smt_possible(void) { return false; } | ||||||
| static inline int cpuhp_smt_enable(void) { return 0; } | static inline int cpuhp_smt_enable(void) { return 0; } | ||||||
| static inline int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval) { return 0; } | static inline int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval) { return 0; } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								kernel/cpu.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								kernel/cpu.c
									
									
									
									
									
								
							|  | @ -392,8 +392,7 @@ enum cpuhp_smt_control cpu_smt_control __read_mostly = CPU_SMT_ENABLED; | ||||||
| 
 | 
 | ||||||
| void __init cpu_smt_disable(bool force) | void __init cpu_smt_disable(bool force) | ||||||
| { | { | ||||||
| 	if (cpu_smt_control == CPU_SMT_FORCE_DISABLED || | 	if (!cpu_smt_possible()) | ||||||
| 		cpu_smt_control == CPU_SMT_NOT_SUPPORTED) |  | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	if (force) { | 	if (force) { | ||||||
|  | @ -438,6 +437,14 @@ static inline bool cpu_smt_allowed(unsigned int cpu) | ||||||
| 	 */ | 	 */ | ||||||
| 	return !cpumask_test_cpu(cpu, &cpus_booted_once_mask); | 	return !cpumask_test_cpu(cpu, &cpus_booted_once_mask); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | /* Returns true if SMT is not supported of forcefully (irreversibly) disabled */ | ||||||
|  | bool cpu_smt_possible(void) | ||||||
|  | { | ||||||
|  | 	return cpu_smt_control != CPU_SMT_FORCE_DISABLED && | ||||||
|  | 		cpu_smt_control != CPU_SMT_NOT_SUPPORTED; | ||||||
|  | } | ||||||
|  | EXPORT_SYMBOL_GPL(cpu_smt_possible); | ||||||
| #else | #else | ||||||
| static inline bool cpu_smt_allowed(unsigned int cpu) { return true; } | static inline bool cpu_smt_allowed(unsigned int cpu) { return true; } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Vitaly Kuznetsov
						Vitaly Kuznetsov