[PATCH] flush_tlb_all is not preempt safe
Patch from: Zwane Mwaikambo <zwane@holomorphy.com> Considering that smp_call_function isn't allowed to hold a lock reference and within smp_call_function we lock and unlock call_lock thus triggering a preempt point. Therefore we can't guarantee that we'll be on the same processor when we hit do_flush_tlb_all_local. void flush_tlb_all(void) { smp_call_function (flush_tlb_all_ipi,0,1,1); do_flush_tlb_all_local(); } ... smp_call_function() { spin_lock(call_lock); ... spin_unlock(call_lock); <preemption point> } ... do_flush_tlb_all_local() - possibly not executing on same processor anymore.
Showing
Please register or sign in to comment