mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-30 20:35:03 +01:00
powerpc/radix: fix double page offset in mmu_radix_sync_icache()
mmu_radix_sync_icache() adds the offset of va within its page to the physical address it gets from mmu_radix_extract_locked(). That address already includes the offset - the extract routines return the physical address of the byte, not of the frame - so the offset is counted twice and __syncicache() is handed frame + 2 * offset. The hash MMU counterpart, moea64_sync_icache(), has to add the offset because PVO_PADDR() yields only the frame. Here the addition is wrong. Fixes:6f0b2a235a("powerpc/pmap: Add pmap_sync_icache() for radix pmap") Reviewed by: jhibbits MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D59870 (cherry picked from commit9d0859637f)
This commit is contained in:
1 parent
edb560a7cc
commit
1072126189
1 file changed
+2
-4
@@ -6000,10 +6000,8 @@ mmu_radix_sync_icache(pmap_t pm, vm_offset_t va, vm_size_t sz)
|
||||
pa = mmu_radix_extract_locked(pm, va);
|
||||
sync_sz = PAGE_SIZE - (va & PAGE_MASK);
|
||||
sync_sz = min(sync_sz, sz);
|
||||
if (pa != 0) {
|
||||
pa += (va & PAGE_MASK);
|
||||
__syncicache((void *)PHYS_TO_DMAP(pa), sync_sz);
|
||||
}
|
||||
if (pa != 0)
|
||||
__syncicache(PHYS_TO_DMAP(pa), sync_sz);
|
||||
va += sync_sz;
|
||||
sz -= sync_sz;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user