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 commit 9d0859637f)
This commit is contained in:
Piotr Kubaj committed 2026-09-30 10:05:40 +02:00
1 parent edb560a7cc
commit 1072126189
1 file changed
+2 -4
+2 -4
View File
@@ -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;
}