aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2010-02-16 17:14:04 +0900
committerPaul Mundt <lethal@linux-sh.org>2010-02-16 17:14:04 +0900
commit55cef91a5d553265f03fe159f9fcdfac36902248 (patch)
treeae0dc74566ef0c8c80390d441ba690b28642b1ba
parentsh: Fix zImage boot using fixed PMB. (diff)
downloadlinux-dev-55cef91a5d553265f03fe159f9fcdfac36902248.tar.xz
linux-dev-55cef91a5d553265f03fe159f9fcdfac36902248.zip
sh: Prevent fixed slot PMB remapping from clobbering boot entries.
The PMB initialization code walks the entries and synchronizes the software PMB state with the hardware mappings, preserving the slot index. Unfortunately pmb_alloc() only tested the bit position in the entry map and failed to set it, resulting in subsequent remaps being able to be dynamically assigned a slot that trampled an existing boot mapping with general badness ensuing. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r--arch/sh/mm/pmb.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/sh/mm/pmb.c b/arch/sh/mm/pmb.c
index 3c9bf5b5c36f..a06483076a41 100644
--- a/arch/sh/mm/pmb.c
+++ b/arch/sh/mm/pmb.c
@@ -77,7 +77,7 @@ static struct pmb_entry *pmb_alloc(unsigned long vpn, unsigned long ppn,
if (pos < 0)
return ERR_PTR(pos);
} else {
- if (test_bit(entry, &pmb_map))
+ if (test_and_set_bit(entry, &pmb_map))
return ERR_PTR(-ENOSPC);
pos = entry;
}