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>
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;
}