[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[patch 10/37] x86/cpu/cacheinfo: Remove cpu_callout_mask dependency



cpu_callout_mask is used for the stop machine based MTRR/PAT init.

In preparation of moving the BP/AP synchronization to the core hotplug
code, use a private CPU mask for cacheinfo and manage it in the
starting/dying hotplug state.

Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
---
 arch/x86/kernel/cpu/cacheinfo.c |   21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

--- a/arch/x86/kernel/cpu/cacheinfo.c
+++ b/arch/x86/kernel/cpu/cacheinfo.c
@@ -39,6 +39,8 @@ DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t
 /* Shared L2 cache maps */
 DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_l2c_shared_map);
 
+static cpumask_var_t cpu_cacheinfo_mask;
+
 /* Kernel controls MTRR and/or PAT MSRs. */
 unsigned int memory_caching_control __ro_after_init;
 
@@ -1172,8 +1174,10 @@ void cache_bp_restore(void)
                cache_cpu_init();
 }
 
-static int cache_ap_init(unsigned int cpu)
+static int cache_ap_online(unsigned int cpu)
 {
+       cpumask_set_cpu(cpu, cpu_cacheinfo_mask);
+
        if (!memory_caching_control || get_cache_aps_delayed_init())
                return 0;
 
@@ -1191,11 +1195,17 @@ static int cache_ap_init(unsigned int cp
         *      lock to prevent MTRR entry changes
         */
        stop_machine_from_inactive_cpu(cache_rendezvous_handler, NULL,
-                                      cpu_callout_mask);
+                                      cpu_cacheinfo_mask);
 
        return 0;
 }
 
+static int cache_ap_offline(unsigned int cpu)
+{
+       cpumask_clear_cpu(cpu, cpu_cacheinfo_mask);
+       return 0;
+}
+
 /*
  * Delayed cache initialization for all AP's
  */
@@ -1210,9 +1220,12 @@ void cache_aps_init(void)
 
 static int __init cache_ap_register(void)
 {
+       zalloc_cpumask_var(&cpu_cacheinfo_mask, GFP_KERNEL);
+       cpumask_set_cpu(smp_processor_id(), cpu_cacheinfo_mask);
+
        cpuhp_setup_state_nocalls(CPUHP_AP_CACHECTRL_STARTING,
                                  "x86/cachectrl:starting",
-                                 cache_ap_init, NULL);
+                                 cache_ap_online, cache_ap_offline);
        return 0;
 }
-core_initcall(cache_ap_register);
+early_initcall(cache_ap_register);




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.