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
|
@ -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 New Issue