git: 304088ed1222 - stable/14 - powerpc/radix: fix double page offset in mmu_radix_sync_icache()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 30 Sep 2026 08:07:47 UTC
The branch stable/14 has been updated by pkubaj:
URL: https://cgit.FreeBSD.org/src/commit/?id=304088ed12223e585409aba30ca62931e32f74ed
commit 304088ed12223e585409aba30ca62931e32f74ed
Author: Piotr Kubaj <pkubaj@FreeBSD.org>
AuthorDate: 2026-09-21 07:45:27 +0000
Commit: Piotr Kubaj <pkubaj@FreeBSD.org>
CommitDate: 2026-09-30 08:07:39 +0000
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: 6f0b2a235a13 ("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 9d0859637f99160e17b656df153effae3df31f8b)
(cherry picked from commit 107212618921492ffed84d6ea3c9a27c77aaf725)
---
sys/powerpc/aim/mmu_radix.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c
index f762e8db0afc..f6011fe09d09 100644
--- a/sys/powerpc/aim/mmu_radix.c
+++ b/sys/powerpc/aim/mmu_radix.c
@@ -5951,10 +5951,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;
}