Re: [PATCH 2/3 v3] x86/topology: Avoid wasting 128k for package id array

From: Thomas Gleixner
Date: Fri Oct 20 2017 - 05:03:30 EST


On Thu, 19 Oct 2017, Prarit Bhargava wrote:
> static void remove_siblinginfo(int cpu)
> {
> - int sibling;
> + int phys_pkg_id, sibling;
> struct cpuinfo_x86 *c = &cpu_data(cpu);
>
> for_each_cpu(sibling, topology_core_cpumask(cpu)) {
> @@ -1529,6 +1526,12 @@ static void remove_siblinginfo(int cpu)
> cpumask_clear(topology_core_cpumask(cpu));
> c->phys_proc_id = 0;
> c->cpu_core_id = 0;
> +
> + phys_pkg_id = c->phys_pkg_id;
> + c->phys_pkg_id = U16_MAX;

This leaves c->logical_proc_set = 1, which is inconsistent at best. I have
no idea why we need this logical_proc_set flag at all.

> + if (topology_phys_to_logical_pkg(phys_pkg_id) < 0)
> + logical_packages--;

Now this has another issue. Depending on hotplug ordering the logical
package association can change across hotplug operations. I don't know it
that's an issue, but this needs to be analyzed before we merge that.

Thanks,

tglx