On Tue, Apr 22, 2014 at 06:40:14PM -0700, Zi Shen Lim wrote: > + /* Multiprocessor system */ > + if (mpidr & MPIDR_MT_BITMASK) { > + /* Multi-threads per core */ > + cpuid_topo->thread_id = MPIDR_AFFINITY_LEVEL(mpidr, 0); > + cpuid_topo->core_id = MPIDR_AFFINITY_LEVEL(mpidr, 1); > + cpuid_topo->cluster_id = MPIDR_AFFINITY_LEVEL(mpidr, 2); > + } else { > + /* Single-thread per core */ > + cpuid_topo->thread_id = -1; > + cpuid_topo->core_id = MPIDR_AFFINITY_LEVEL(mpidr, 0); > + cpuid_topo->cluster_id = MPIDR_AFFINITY_LEVEL(mpidr, 1); > + } > + }
This means that we ignore affinity level 3 and on non-MT cores we ignore affinity level 2. That means that if it runs on some system where we do have multiple levels of clustering (for example some future multi socket server) or if for some reason the hardware engineers have decided to use one of the higher affinity levels then we will incorrectly report cores from several clusters as being part of a single cluster. I had been intending to just combine all the bits from affinitly levels above the CPU number into a single number until we know what to do with them individually. We shouldn't just ignore them. > + pr_info("CPU%u: cluster %d core %d thread %d mpidr %llx\n", > + cpuid, cpuid_topo->cluster_id, cpuid_topo->core_id, > + cpuid_topo->thread_id, mpidr); > + Catalin or Lorenzo asked for stuff like that to be taken out.
signature.asc
Description: Digital signature