Commit 5de16699 authored by Anton Blanchard's avatar Anton Blanchard Committed by Benjamin Herrenschmidt

powerpc/numa: Only use active VPHN count fields

VPHN supports up to 8 distance fields but the number of entries in
ibm,associativity-reference-points signifies how many are in use.
Don't look at all the VPHN counts, only distance_ref_points_depth
worth.

Since we already cap our distance metrics at MAX_DISTANCE_REF_POINTS,
use that to size the VPHN arrays and add a BUILD_BUG_ON to avoid it growing
larger than the VPHN maximum of 8.
Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent cd9d6cc7
...@@ -1291,8 +1291,7 @@ u64 memory_hotplug_max(void) ...@@ -1291,8 +1291,7 @@ u64 memory_hotplug_max(void)
/* Virtual Processor Home Node (VPHN) support */ /* Virtual Processor Home Node (VPHN) support */
#ifdef CONFIG_PPC_SPLPAR #ifdef CONFIG_PPC_SPLPAR
#define VPHN_NR_CHANGE_CTRS (8) static u8 vphn_cpu_change_counts[NR_CPUS][MAX_DISTANCE_REF_POINTS];
static u8 vphn_cpu_change_counts[NR_CPUS][VPHN_NR_CHANGE_CTRS];
static cpumask_t cpu_associativity_changes_mask; static cpumask_t cpu_associativity_changes_mask;
static int vphn_enabled; static int vphn_enabled;
static void set_topology_timer(void); static void set_topology_timer(void);
...@@ -1305,12 +1304,15 @@ static void setup_cpu_associativity_change_counters(void) ...@@ -1305,12 +1304,15 @@ static void setup_cpu_associativity_change_counters(void)
{ {
int cpu; int cpu;
/* The VPHN feature supports a maximum of 8 reference points */
BUILD_BUG_ON(MAX_DISTANCE_REF_POINTS > 8);
for_each_possible_cpu(cpu) { for_each_possible_cpu(cpu) {
int i; int i;
u8 *counts = vphn_cpu_change_counts[cpu]; u8 *counts = vphn_cpu_change_counts[cpu];
volatile u8 *hypervisor_counts = lppaca[cpu].vphn_assoc_counts; volatile u8 *hypervisor_counts = lppaca[cpu].vphn_assoc_counts;
for (i = 0; i < VPHN_NR_CHANGE_CTRS; i++) for (i = 0; i < distance_ref_points_depth; i++)
counts[i] = hypervisor_counts[i]; counts[i] = hypervisor_counts[i];
} }
} }
...@@ -1338,7 +1340,7 @@ static int update_cpu_associativity_changes_mask(void) ...@@ -1338,7 +1340,7 @@ static int update_cpu_associativity_changes_mask(void)
u8 *counts = vphn_cpu_change_counts[cpu]; u8 *counts = vphn_cpu_change_counts[cpu];
volatile u8 *hypervisor_counts = lppaca[cpu].vphn_assoc_counts; volatile u8 *hypervisor_counts = lppaca[cpu].vphn_assoc_counts;
for (i = 0; i < VPHN_NR_CHANGE_CTRS; i++) { for (i = 0; i < distance_ref_points_depth; i++) {
if (hypervisor_counts[i] > counts[i]) { if (hypervisor_counts[i] > counts[i]) {
counts[i] = hypervisor_counts[i]; counts[i] = hypervisor_counts[i];
changed = 1; changed = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment