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:
parent
cde5ae755f
commit
8cb4c18310
1 changed files with 1 additions and 1 deletions
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue