|
@@ -1279,6 +1279,20 @@ static int __cpuinit cpuup_callback(struct notifier_block *nfb,
|
|
start_cpu_timer(cpu);
|
|
start_cpu_timer(cpu);
|
|
break;
|
|
break;
|
|
#ifdef CONFIG_HOTPLUG_CPU
|
|
#ifdef CONFIG_HOTPLUG_CPU
|
|
|
|
+ case CPU_DOWN_PREPARE:
|
|
|
|
+ /*
|
|
|
|
+ * Shutdown cache reaper. Note that the cache_chain_mutex is
|
|
|
|
+ * held so that if cache_reap() is invoked it cannot do
|
|
|
|
+ * anything expensive but will only modify reap_work
|
|
|
|
+ * and reschedule the timer.
|
|
|
|
+ */
|
|
|
|
+ cancel_rearming_delayed_work(&per_cpu(reap_work, cpu));
|
|
|
|
+ /* Now the cache_reaper is guaranteed to be not running. */
|
|
|
|
+ per_cpu(reap_work, cpu).work.func = NULL;
|
|
|
|
+ break;
|
|
|
|
+ case CPU_DOWN_FAILED:
|
|
|
|
+ start_cpu_timer(cpu);
|
|
|
|
+ break;
|
|
case CPU_DEAD:
|
|
case CPU_DEAD:
|
|
/*
|
|
/*
|
|
* Even if all the cpus of a node are down, we don't free the
|
|
* Even if all the cpus of a node are down, we don't free the
|