1
0
Fork 0
forked from len0rd/rockbox

Really fix the MIPS cache bug this time

In fixing the original bug I tried to optimize discard_dcache_range()
to minimize writeback and inadvertently introduced a second bug, which
typically ends in a TLB refill panic.

It occurs only if the range fits within one cache line, and when both
the start and end of the range are not aligned to a cache line. This
causes ptr to be incremented and end to be decremented, so ptr > end,
and the loop can't terminate.

Change-Id: Ibaac072f1369268d3327d534ad08ef9dcee3db65
This commit is contained in:
Aidan MacDonald 2021-03-03 23:48:49 +00:00
parent cde5ae755f
commit 8cb4c18310

View file

@ -235,7 +235,7 @@ void discard_dcache_range(const void *base, unsigned int size)
}
/* Interior of region is safe to discard */
for(; ptr != end; ptr += CACHEALIGN_SIZE)
for(; ptr <= end; ptr += CACHEALIGN_SIZE)
__CACHE_OP(DCHitInv, ptr);
SYNC_WB();