sh: Prevent fixed slot PMB remapping from clobbering boot entries.
authorPaul Mundt <lethal@linux-sh.org>
Tue, 16 Feb 2010 08:14:04 +0000 (17:14 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Tue, 16 Feb 2010 08:14:04 +0000 (17:14 +0900)
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>
arch/sh/mm/pmb.c

index 3c9bf5b..a064830 100644 (file)
@@ -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;
        }