[Blackfin] arch: fix bug - a crash on bootup with CONFIG_MPU on the BF548
The function flush_switched_dcplbs was clearing the CPLB entries covering the process permission bitmasks. This means that the sequence flush_switched_dcplbs (); set_mask_dcplbs(mm->context.page_rwx_mask); has a problem: if kernel code (such as an interrupt) causes a CPLB miss before set_mask_dcplbs completes, the CPLB handler function causes a double fault, with an instantaneous reboot. This bug fix is dedicated to Michael Hennerich, the only person in the world capable of providing working JTAG hardware. Signed-off-by: Bernd Schmidt <bernds_cb1@t-online.de> Signed-off-by: Bryan Wu <cooloney@kernel.org>
This commit is contained in:
Родитель
697a9d65aa
Коммит
d56daae9be
|
@ -307,7 +307,7 @@ void flush_switched_cplbs(void)
|
||||||
enable_icplb();
|
enable_icplb();
|
||||||
|
|
||||||
disable_dcplb();
|
disable_dcplb();
|
||||||
for (i = first_mask_dcplb; i < MAX_CPLBS; i++) {
|
for (i = first_switched_dcplb; i < MAX_CPLBS; i++) {
|
||||||
dcplb_tbl[i].data = 0;
|
dcplb_tbl[i].data = 0;
|
||||||
bfin_write32(DCPLB_DATA0 + i * 4, 0);
|
bfin_write32(DCPLB_DATA0 + i * 4, 0);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче