]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/resctrl: Fix a division by zero error on Hygon
authorXiaochen Shen <shenxiaochen@open-hieco.net>
Wed, 17 Dec 2025 03:04:53 +0000 (11:04 +0800)
committerShuah Khan <skhan@linuxfoundation.org>
Fri, 9 Jan 2026 23:48:11 +0000 (16:48 -0700)
Change to adjust effective L3 cache size with SNC enabled change
introduced the snc_nodes_per_l3_cache() function to detect the Intel
Sub-NUMA Clustering (SNC) feature by comparing #CPUs in node0 with #CPUs
sharing LLC with CPU0. The function was designed to return:
  (1) >1: SNC mode is enabled.
  (2)  1: SNC mode is not enabled or not supported.

However, on certain Hygon CPUs, #CPUs sharing LLC with CPU0 is actually
less than #CPUs in node0. This results in snc_nodes_per_l3_cache()
returning 0 (calculated as cache_cpus / node_cpus).

This leads to a division by zero error in get_cache_size():
  *cache_size /= snc_nodes_per_l3_cache();

Causing the resctrl selftest to fail with:
  "Floating point exception (core dumped)"

Fix the issue by ensuring snc_nodes_per_l3_cache() returns 1 when SNC
mode is not supported on the platform.

Updated commit log to fix commit has issues:
Shuah Khan <skhan@linuxfoundation.org>

Link: https://lore.kernel.org/r/20251217030456.3834956-2-shenxiaochen@open-hieco.net
Fixes: a1cd99e700ec ("selftests/resctrl: Adjust effective L3 cache size with SNC enabled")
Signed-off-by: Xiaochen Shen <shenxiaochen@open-hieco.net>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Reviewed-by: Fenghua Yu <fenghuay@nvidia.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
tools/testing/selftests/resctrl/resctrlfs.c

index 195f04c4d15868e8f15631afbd985d4c89e5a0bf..b9c1bfb6cc029ae55b9df4302a6de2fce36a267d 100644 (file)
@@ -243,6 +243,16 @@ int snc_nodes_per_l3_cache(void)
                }
                snc_mode = cache_cpus / node_cpus;
 
+               /*
+                * On some platforms (e.g. Hygon),
+                * cache_cpus < node_cpus, the calculated snc_mode is 0.
+                *
+                * Set snc_mode = 1 to indicate that SNC mode is not
+                * supported on the platform.
+                */
+               if (!snc_mode)
+                       snc_mode = 1;
+
                if (snc_mode > 1)
                        ksft_print_msg("SNC-%d mode discovered.\n", snc_mode);
        }