x86/cacheinfo: Add a cpu_llc_shared_mask() UP variant
On a CONFIG_SMP=n kernel, the LLC shared mask is 0, which prevents
__cache_amd_cpumap_setup() from doing the L3 masks setup, and more
specifically from setting up the shared_cpu_map and shared_cpu_list
files in sysfs, leading to lscpu from util-linux getting confused and
segfaulting.
Add a cpu_llc_shared_mask() UP variant which returns a mask with a
single bit set, i.e., for CPU0.
Fixes: 2b83809a5e
("x86/cpu/amd: Derive L3 shared_cpu_map from cpu_llc_shared_mask")
Reported-by: Saurabh Sengar <ssengar@linux.microsoft.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/1660148115-302-1-git-send-email-ssengar@linux.microsoft.com
This commit is contained in:
parent
efd608fa74
commit
df5b035b56
|
@ -21,16 +21,6 @@ DECLARE_PER_CPU_READ_MOSTLY(u16, cpu_llc_id);
|
|||
DECLARE_PER_CPU_READ_MOSTLY(u16, cpu_l2c_id);
|
||||
DECLARE_PER_CPU_READ_MOSTLY(int, cpu_number);
|
||||
|
||||
static inline struct cpumask *cpu_llc_shared_mask(int cpu)
|
||||
{
|
||||
return per_cpu(cpu_llc_shared_map, cpu);
|
||||
}
|
||||
|
||||
static inline struct cpumask *cpu_l2c_shared_mask(int cpu)
|
||||
{
|
||||
return per_cpu(cpu_l2c_shared_map, cpu);
|
||||
}
|
||||
|
||||
DECLARE_EARLY_PER_CPU_READ_MOSTLY(u16, x86_cpu_to_apicid);
|
||||
DECLARE_EARLY_PER_CPU_READ_MOSTLY(u32, x86_cpu_to_acpiid);
|
||||
DECLARE_EARLY_PER_CPU_READ_MOSTLY(u16, x86_bios_cpu_apicid);
|
||||
|
@ -172,6 +162,16 @@ extern int safe_smp_processor_id(void);
|
|||
# define safe_smp_processor_id() smp_processor_id()
|
||||
#endif
|
||||
|
||||
static inline struct cpumask *cpu_llc_shared_mask(int cpu)
|
||||
{
|
||||
return per_cpu(cpu_llc_shared_map, cpu);
|
||||
}
|
||||
|
||||
static inline struct cpumask *cpu_l2c_shared_mask(int cpu)
|
||||
{
|
||||
return per_cpu(cpu_l2c_shared_map, cpu);
|
||||
}
|
||||
|
||||
#else /* !CONFIG_SMP */
|
||||
#define wbinvd_on_cpu(cpu) wbinvd()
|
||||
static inline int wbinvd_on_all_cpus(void)
|
||||
|
@ -179,6 +179,11 @@ static inline int wbinvd_on_all_cpus(void)
|
|||
wbinvd();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline struct cpumask *cpu_llc_shared_mask(int cpu)
|
||||
{
|
||||
return (struct cpumask *)cpumask_of(0);
|
||||
}
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
extern unsigned disabled_cpus;
|
||||
|
|
Loading…
Reference in New Issue