[ARM] Do not call flush_tlb_kernel_range() with IRQs disabled.
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Fri, 25 Nov 2005 15:52:51 +0000 (15:52 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 25 Nov 2005 15:52:51 +0000 (15:52 +0000)
commit5edf71ae129167ac276ebac18b25ccc7bec6ac3e
tree619daac39d08dbf66fb19698205b263e21bba3d0
parent3c0bdac3875505516eda1c6b6e68dd84eff3b231
[ARM] Do not call flush_tlb_kernel_range() with IRQs disabled.

We must not call TLB maintainence operations with interrupts disabled,
otherwise we risk a lockup in the SMP IPI code.

This means that consistent_free() can not be called from a context with
IRQs disabled.  In addition, we must not hold the lock in consistent_free
when we call flush_tlb_kernel_range().  However, we must continue to
prevent consistent_alloc() from re-using the memory region until we've
finished tearing down the mapping and dealing with the TLB.

Therefore, leave the vm_region entry in the list, but mark it inactive
before dropping the lock and starting the tear-down process.  After the
mapping has been torn down, re-acquire the lock and remove the entry
from the list.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/consistent.c