diff options
author | Michael Bringmann <mwb@linux.vnet.ibm.com> | 2017-09-08 15:47:47 -0500 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2017-10-16 23:12:04 +1100 |
commit | cee5405da4020b0b0233bc8fb7c8da7322d2c52e (patch) | |
tree | 7aa1ab90fe1ab627a6dcd01d7114bbd387a0094e /arch/powerpc/mm/numa.c | |
parent | a3496e9137f6f58439da29a761725e083229c4a8 (diff) | |
download | linux-cee5405da4020b0b0233bc8fb7c8da7322d2c52e.tar.gz |
powerpc/hotplug: Improve responsiveness of hotplug change
powerpc/hotplug: On Power systems with shared configurations of CPUs
and memory, there are some issues with the association of additional
CPUs and memory to nodes when hot-adding resources. During hotplug
CPU operations, this patch resets the timer on topology update work
function to a small value to better ensure that the CPU topology is
detected and configured sooner.
Signed-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/mm/numa.c')
-rw-r--r-- | arch/powerpc/mm/numa.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index 5f5ff46ae76d..32f5f8db46ec 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c @@ -1148,15 +1148,35 @@ struct topology_update_data { int new_nid; }; +#define TOPOLOGY_DEF_TIMER_SECS 60 + static u8 vphn_cpu_change_counts[NR_CPUS][MAX_DISTANCE_REF_POINTS]; static cpumask_t cpu_associativity_changes_mask; static int vphn_enabled; static int prrn_enabled; static void reset_topology_timer(void); +static int topology_timer_secs = 1; static int topology_inited; static int topology_update_needed; /* + * Change polling interval for associativity changes. + */ +int timed_topology_update(int nsecs) +{ + if (vphn_enabled) { + if (nsecs > 0) + topology_timer_secs = nsecs; + else + topology_timer_secs = TOPOLOGY_DEF_TIMER_SECS; + + reset_topology_timer(); + } + + return 0; +} + +/* * Store the current values of the associativity change counters in the * hypervisor. */ @@ -1251,6 +1271,7 @@ static long vphn_get_associativity(unsigned long cpu, break; case H_SUCCESS: dbg("VPHN hcall succeeded. Reset polling...\n"); + timed_topology_update(0); break; } @@ -1481,7 +1502,7 @@ static struct timer_list topology_timer = static void reset_topology_timer(void) { topology_timer.data = 0; - topology_timer.expires = jiffies + 60 * HZ; + topology_timer.expires = jiffies + topology_timer_secs * HZ; mod_timer(&topology_timer, topology_timer.expires); } |