s390/topology: Improve topology detection
authorMete Durlu <meted@linux.ibm.com>
Wed, 8 Jan 2025 10:31:27 +0000 (11:31 +0100)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Mon, 13 Jan 2025 08:50:17 +0000 (09:50 +0100)
Add early polarization detection instead of assuming horizontal
polarization.

Signed-off-by: Mete Durlu <meted@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/kernel/topology.c

index 4f9c301a705b63f8dd0e7bc33e7206ad1222e7a7..39f5ed21f31a6dbca343933bcc4ba654e5c58ac0 100644 (file)
@@ -556,6 +556,16 @@ static void __init alloc_masks(struct sysinfo_15_1_x *info,
        }
 }
 
+static int __init detect_polarization(union topology_entry *tle)
+{
+       struct topology_core *tl_core;
+
+       while (tle->nl)
+               tle = next_tle(tle);
+       tl_core = (struct topology_core *)tle;
+       return tl_core->pp != POLARIZATION_HRZ;
+}
+
 void __init topology_init_early(void)
 {
        struct sysinfo_15_1_x *info;
@@ -575,6 +585,7 @@ void __init topology_init_early(void)
                      __func__, PAGE_SIZE, PAGE_SIZE);
        info = tl_info;
        store_topology(info);
+       cpu_management = detect_polarization(info->tle);
        pr_info("The CPU configuration topology of the machine is: %d %d %d %d %d %d / %d\n",
                info->mag[0], info->mag[1], info->mag[2], info->mag[3],
                info->mag[4], info->mag[5], info->mnest);