[IA64] /proc/cpuinfo "physical id" field cleanups
Clean up the process for presenting the "physical id" field in /proc/cpuinfo. - remove global smp_num_cpucores, as it is mostly useless - remove check_for_logical_procs(), since we do the same functionality in identify_siblings() - reflow logic in identify_siblings(). If an older CPU does not implement PAL_LOGICAL_TO_PHYSICAL, we may still be able to get useful information from SAL_PHYSICAL_ID_INFO - in identify_siblings(), threads/cores are a property of the CPU, not the platform - remove useless printk's about multi-core / thread capability in identify_siblings(), as that information is readily available in /proc/cpuinfo, and printing for the BSP only adds little value - smp_num_siblings is now meaningful if any CPU in the system supports threads, not just the BSP - expose "physical id" field, even on CPUs that are not multi-core / multi-threaded (as long as we have a valid value). Now we know what sockets Madisons live in too. Signed-off-by: Alex Chiang <achiang@hp.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
172c510684
commit
113134fcbc
3 changed files with 22 additions and 49 deletions
|
@ -417,34 +417,6 @@ mark_bsp_online (void)
|
|||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static void __init
|
||||
check_for_logical_procs (void)
|
||||
{
|
||||
pal_logical_to_physical_t info;
|
||||
s64 status;
|
||||
|
||||
status = ia64_pal_logical_to_phys(0, &info);
|
||||
if (status == -1) {
|
||||
printk(KERN_INFO "No logical to physical processor mapping "
|
||||
"available\n");
|
||||
return;
|
||||
}
|
||||
if (status) {
|
||||
printk(KERN_ERR "ia64_pal_logical_to_phys failed with %ld\n",
|
||||
status);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* Total number of siblings that BSP has. Though not all of them
|
||||
* may have booted successfully. The correct number of siblings
|
||||
* booted is in info.overview_num_log.
|
||||
*/
|
||||
smp_num_siblings = info.overview_tpc;
|
||||
smp_num_cpucores = info.overview_cpp;
|
||||
}
|
||||
#endif
|
||||
|
||||
static __initdata int nomca;
|
||||
static __init int setup_nomca(char *s)
|
||||
{
|
||||
|
@ -540,15 +512,6 @@ setup_arch (char **cmdline_p)
|
|||
|
||||
#ifdef CONFIG_SMP
|
||||
cpu_physical_id(0) = hard_smp_processor_id();
|
||||
check_for_logical_procs();
|
||||
if (smp_num_cpucores > 1)
|
||||
printk(KERN_INFO
|
||||
"cpu package is Multi-Core capable: number of cores=%d\n",
|
||||
smp_num_cpucores);
|
||||
if (smp_num_siblings > 1)
|
||||
printk(KERN_INFO
|
||||
"cpu package is Multi-Threading capable: number of siblings=%d\n",
|
||||
smp_num_siblings);
|
||||
#endif
|
||||
|
||||
cpu_init(); /* initialize the bootstrap CPU */
|
||||
|
@ -661,12 +624,13 @@ show_cpuinfo (struct seq_file *m, void *v)
|
|||
lpj*HZ/500000, (lpj*HZ/5000) % 100);
|
||||
#ifdef CONFIG_SMP
|
||||
seq_printf(m, "siblings : %u\n", cpus_weight(cpu_core_map[cpunum]));
|
||||
if (c->socket_id != -1)
|
||||
seq_printf(m, "physical id: %u\n", c->socket_id);
|
||||
if (c->threads_per_core > 1 || c->cores_per_socket > 1)
|
||||
seq_printf(m,
|
||||
"physical id: %u\n"
|
||||
"core id : %u\n"
|
||||
"thread id : %u\n",
|
||||
c->socket_id, c->core_id, c->thread_id);
|
||||
"core id : %u\n"
|
||||
"thread id : %u\n",
|
||||
c->core_id, c->thread_id);
|
||||
#endif
|
||||
seq_printf(m,"\n");
|
||||
|
||||
|
@ -778,6 +742,9 @@ identify_cpu (struct cpuinfo_ia64 *c)
|
|||
c->socket_id = -1;
|
||||
|
||||
identify_siblings(c);
|
||||
|
||||
if (c->threads_per_core > smp_num_siblings)
|
||||
smp_num_siblings = c->threads_per_core;
|
||||
#endif
|
||||
c->ppn = cpuid.field.ppn;
|
||||
c->number = cpuid.field.number;
|
||||
|
|
|
@ -142,7 +142,6 @@ DEFINE_PER_CPU_SHARED_ALIGNED(cpumask_t, cpu_sibling_map);
|
|||
EXPORT_PER_CPU_SYMBOL(cpu_sibling_map);
|
||||
|
||||
int smp_num_siblings = 1;
|
||||
int smp_num_cpucores = 1;
|
||||
|
||||
/* which logical CPU number maps to which CPU (physical APIC ID) */
|
||||
volatile int ia64_cpu_to_sapicid[NR_CPUS];
|
||||
|
@ -886,13 +885,17 @@ identify_siblings(struct cpuinfo_ia64 *c)
|
|||
u16 pltid;
|
||||
pal_logical_to_physical_t info;
|
||||
|
||||
if (smp_num_cpucores == 1 && smp_num_siblings == 1)
|
||||
return;
|
||||
|
||||
if ((status = ia64_pal_logical_to_phys(-1, &info)) != PAL_STATUS_SUCCESS) {
|
||||
printk(KERN_ERR "ia64_pal_logical_to_phys failed with %ld\n",
|
||||
status);
|
||||
return;
|
||||
if (status != PAL_STATUS_UNIMPLEMENTED) {
|
||||
printk(KERN_ERR
|
||||
"ia64_pal_logical_to_phys failed with %ld\n",
|
||||
status);
|
||||
return;
|
||||
}
|
||||
|
||||
info.overview_ppid = 0;
|
||||
info.overview_cpp = 1;
|
||||
info.overview_tpc = 1;
|
||||
}
|
||||
if ((status = ia64_sal_physical_id_info(&pltid)) != PAL_STATUS_SUCCESS) {
|
||||
printk(KERN_ERR "ia64_sal_pltid failed with %ld\n", status);
|
||||
|
@ -900,6 +903,10 @@ identify_siblings(struct cpuinfo_ia64 *c)
|
|||
}
|
||||
|
||||
c->socket_id = (pltid << 8) | info.overview_ppid;
|
||||
|
||||
if (info.overview_cpp == 1 && info.overview_tpc == 1)
|
||||
return;
|
||||
|
||||
c->cores_per_socket = info.overview_cpp;
|
||||
c->threads_per_core = info.overview_tpc;
|
||||
c->num_log = info.overview_num_log;
|
||||
|
|
|
@ -60,7 +60,6 @@ extern cpumask_t cpu_online_map;
|
|||
extern cpumask_t cpu_core_map[NR_CPUS];
|
||||
DECLARE_PER_CPU(cpumask_t, cpu_sibling_map);
|
||||
extern int smp_num_siblings;
|
||||
extern int smp_num_cpucores;
|
||||
extern void __iomem *ipi_base_addr;
|
||||
extern unsigned char smp_int_redirect;
|
||||
|
||||
|
|
Loading…
Reference in a new issue