|
|
@@ -49,7 +49,13 @@ void leave_mm(int cpu)
|
|
|
if (cpumask_test_cpu(cpu, mm_cpumask(active_mm))) {
|
|
|
cpumask_clear_cpu(cpu, mm_cpumask(active_mm));
|
|
|
load_cr3(swapper_pg_dir);
|
|
|
- trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
|
|
|
+ /*
|
|
|
+ * This gets called in the idle path where RCU
|
|
|
+ * functions differently. Tracing normally
|
|
|
+ * uses RCU, so we have to call the tracepoint
|
|
|
+ * specially here.
|
|
|
+ */
|
|
|
+ trace_tlb_flush_rcuidle(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
|
|
|
}
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(leave_mm);
|