ARM: 6279/1: highmem: fix SMP preemption bug in kmap_high_l1_vipt
authorGary King <gking@nvidia.com>
Thu, 29 Jul 2010 16:37:20 +0000 (17:37 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 30 Jul 2010 22:16:07 +0000 (23:16 +0100)
commit831e8047eb2af310184a9d4d9e749f3de119ae39
treef9fd2e3982796a50e2d2b9374c80ba0c1c4204bb
parentb92b3612134faff171981fad4f0adb33f485e02e
ARM: 6279/1: highmem: fix SMP preemption bug in kmap_high_l1_vipt

smp_processor_id() must not be called from a preemptible context (this
is checked by CONFIG_DEBUG_PREEMPT).  kmap_high_l1_vipt() was doing so.
This lead to a problem where the wrong per_cpu kmap_high_l1_vipt_depth
could be incremented, causing a BUG_ON(*depth <= 0); in
kunmap_high_l1_vipt().

The solution is to move the call to smp_processor_id() after the call
to preempt_disable().

Originally by: Andrew Howe <ahowe@nvidia.com>

Signed-off-by: Gary King <gking@nvidia.com>
Acked-by: Nicolas Pitre <nico.as.pitre@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/highmem.c