diff --git a/patches.suse/powerpc-numa-Detect-support-for-coregroup.patch b/patches.suse/powerpc-numa-Detect-support-for-coregroup.patch new file mode 100644 index 0000000..18bf63c --- /dev/null +++ b/patches.suse/powerpc-numa-Detect-support-for-coregroup.patch @@ -0,0 +1,120 @@ +From f9f130ff2ec93c5949576bbfb168cc9530c23649 Mon Sep 17 00:00:00 2001 +From: Srikar Dronamraju +Date: Mon, 10 Aug 2020 12:48:31 +0530 +Subject: [PATCH] powerpc/numa: Detect support for coregroup + +References: bsc#1209999 ltc#202140 bsc#1142685 ltc#179509 FATE#327775 git-fixes +Patch-mainline: v5.10-rc1 +Git-commit: f9f130ff2ec93c5949576bbfb168cc9530c23649 + +Add support for grouping cores based on the device-tree classification. +- The last domain in the associativity domains always refers to the +core. +- If primary reference domain happens to be the penultimate domain in +the associativity domains device-tree property, then there are no +coregroups. However if its not a penultimate domain, then there are +coregroups. There can be more than one coregroup. For now we would be +interested in the last or the smallest coregroups, i.e one sub-group +per DIE. + +Currently there are no firmwares that are exposing this grouping. Hence +allow the basis for grouping to be abstract. Once the firmware starts +using this grouping, code would be added to detect the type of grouping +and adjust the sd domain flags accordingly. + +Signed-off-by: Srikar Dronamraju +Reviewed-by: Gautham R. Shenoy +Signed-off-by: Michael Ellerman +Link: https://lore.kernel.org/r/20200810071834.92514-8-srikar@linux.vnet.ibm.com +Acked-by: Michal Suchanek +--- + arch/powerpc/include/asm/smp.h | 1 + + arch/powerpc/kernel/smp.c | 1 + + arch/powerpc/mm/numa.c | 34 +++++++++++++++++++++------------- + 3 files changed, 23 insertions(+), 13 deletions(-) + +diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h +index b727f5f7b8f9..041f0b97c45b 100644 +--- a/arch/powerpc/include/asm/smp.h ++++ b/arch/powerpc/include/asm/smp.h +@@ -28,6 +28,7 @@ + extern int boot_cpuid; + extern int spinning_secondaries; + extern u32 *cpu_to_phys_id; ++extern bool coregroup_enabled; + + extern void cpu_die(void); + extern int cpu_to_chip_id(int cpu); +diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c +--- a/arch/powerpc/kernel/smp.c ++++ b/arch/powerpc/kernel/smp.c +@@ -75,6 +75,7 @@ static DEFINE_PER_CPU(int, cpu_state) = { 0 }; + + struct thread_info *secondary_ti; + bool has_big_cores; ++bool coregroup_enabled; + + DEFINE_PER_CPU(cpumask_var_t, cpu_sibling_map); + DEFINE_PER_CPU(cpumask_var_t, cpu_smallcore_map); +diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c +index 481951ac3e55..b2c44c5a81fb 100644 +--- a/arch/powerpc/mm/numa.c ++++ b/arch/powerpc/mm/numa.c +@@ -897,7 +897,9 @@ static void __init setup_node_data(int nid, u64 start_pfn, u64 end_pfn) + static void __init find_possible_nodes(void) + { + struct device_node *rtas; +- u32 numnodes, i; ++ const __be32 *domains; ++ int prop_length, max_nodes; ++ u32 i; + + if (!numa_enabled) + return; +@@ -906,25 +908,31 @@ static void __init find_possible_nodes(void) + if (!rtas) + return; + +- if (of_property_read_u32_index(rtas, "ibm,current-associativity-domains", +- min_common_depth, &numnodes)) { +- /* +- * ibm,current-associativity-domains is a fairly recent +- * property. If it doesn't exist, then fallback on +- * ibm,max-associativity-domains. Current denotes what the +- * platform can support compared to max which denotes what the +- * Hypervisor can support. +- */ +- if (of_property_read_u32_index(rtas, "ibm,max-associativity-domains", +- min_common_depth, &numnodes)) ++ /* ++ * ibm,current-associativity-domains is a fairly recent property. If ++ * it doesn't exist, then fallback on ibm,max-associativity-domains. ++ * Current denotes what the platform can support compared to max ++ * which denotes what the Hypervisor can support. ++ */ ++ domains = of_get_property(rtas, "ibm,current-associativity-domains", ++ &prop_length); ++ if (!domains) { ++ domains = of_get_property(rtas, "ibm,max-associativity-domains", ++ &prop_length); ++ if (!domains) + goto out; + } + +- for (i = 0; i < numnodes; i++) { ++ max_nodes = of_read_number(&domains[min_common_depth], 1); ++ for (i = 0; i < max_nodes; i++) { + if (!node_possible(i)) + node_set(i, node_possible_map); + } + ++ prop_length /= sizeof(int); ++ if (prop_length > min_common_depth + 2) ++ coregroup_enabled = 1; ++ + out: + of_node_put(rtas); + } +-- +2.40.0 + diff --git a/series.conf b/series.conf index 71fb4e2..ecd1ced 100644 --- a/series.conf +++ b/series.conf @@ -58549,6 +58549,7 @@ patches.suse/powerepc-book3s64-hash-Align-start-end-address-corre.patch patches.suse/powerpc-numa-Restrict-possible-nodes-based-on-platfo.patch patches.suse/powerpc-numa-Prefer-node-id-queried-from-vphn.patch + patches.suse/powerpc-numa-Detect-support-for-coregroup.patch patches.suse/powerpc-powernv-elog-Fix-race-while-processing-OPAL-.patch patches.suse/powerpc-pseries-add-new-branch-prediction-security-b.patch patches.suse/powerpc-rtas-Restrict-RTAS-requests-from-userspace.patch