Date: Wed, 19 Nov 2025 04:40:25 +0000 From: Justin Hibbits <jhibbits@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 9b0102837e30 - main - powerpc: Don't use cache to zero pages Message-ID: <691d4a39.b5e8.1a3bb356@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=9b0102837e305ca75de2bc14d284f786a33f9a6a commit 9b0102837e305ca75de2bc14d284f786a33f9a6a Author: Justin Hibbits <jhibbits@FreeBSD.org> AuthorDate: 2025-11-14 16:56:42 +0000 Commit: Justin Hibbits <jhibbits@FreeBSD.org> CommitDate: 2025-11-19 04:40:09 +0000 powerpc: Don't use cache to zero pages pmap_zero_page() may be called on uncached pages, so using the cache to zero uncached pages may trigger a fault. MFC after: 2 weeks --- sys/powerpc/aim/mmu_oea.c | 5 ++--- sys/powerpc/aim/mmu_oea64.c | 10 ++++------ sys/powerpc/booke/pmap_32.c | 5 ++--- sys/powerpc/booke/pmap_64.c | 5 ++--- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/sys/powerpc/aim/mmu_oea.c b/sys/powerpc/aim/mmu_oea.c index ae17b3289593..b1f74597aa42 100644 --- a/sys/powerpc/aim/mmu_oea.c +++ b/sys/powerpc/aim/mmu_oea.c @@ -1090,10 +1090,9 @@ moea_copy_pages(vm_page_t *ma, vm_offset_t a_offset, void moea_zero_page(vm_page_t m) { - vm_offset_t off, pa = VM_PAGE_TO_PHYS(m); + vm_offset_t pa = VM_PAGE_TO_PHYS(m); - for (off = 0; off < PAGE_SIZE; off += cacheline_size) - __asm __volatile("dcbz 0,%0" :: "r"(pa + off)); + bzero((void *)pa, PAGE_SIZE); } void diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c index 01bf4c7e90a8..62bbb6ddaf9b 100644 --- a/sys/powerpc/aim/mmu_oea64.c +++ b/sys/powerpc/aim/mmu_oea64.c @@ -1567,15 +1567,14 @@ void moea64_zero_page(vm_page_t m) { vm_paddr_t pa = VM_PAGE_TO_PHYS(m); - vm_offset_t va, off; + vm_offset_t va; mtx_lock(&moea64_scratchpage_mtx); moea64_set_scratchpage_pa(0, pa); va = moea64_scratchpage_va[0]; - for (off = 0; off < PAGE_SIZE; off += cacheline_size) - __asm __volatile("dcbz 0,%0" :: "r"(va + off)); + bzero((void *)va, PAGE_SIZE); mtx_unlock(&moea64_scratchpage_mtx); } @@ -1584,11 +1583,10 @@ void moea64_zero_page_dmap(vm_page_t m) { vm_paddr_t pa = VM_PAGE_TO_PHYS(m); - vm_offset_t va, off; + vm_offset_t va; va = PHYS_TO_DMAP(pa); - for (off = 0; off < PAGE_SIZE; off += cacheline_size) - __asm __volatile("dcbz 0,%0" :: "r"(va + off)); + bzero((void *)va, PAGE_SIZE); } vm_offset_t diff --git a/sys/powerpc/booke/pmap_32.c b/sys/powerpc/booke/pmap_32.c index efeefb6a91c5..5186a8852ed3 100644 --- a/sys/powerpc/booke/pmap_32.c +++ b/sys/powerpc/booke/pmap_32.c @@ -803,15 +803,14 @@ mmu_booke_zero_page_area(vm_page_t m, int off, int size) static void mmu_booke_zero_page(vm_page_t m) { - vm_offset_t off, va; + vm_offset_t va; va = zero_page_va; mtx_lock(&zero_page_mutex); mmu_booke_kenter(va, VM_PAGE_TO_PHYS(m)); - for (off = 0; off < PAGE_SIZE; off += cacheline_size) - __asm __volatile("dcbz 0,%0" :: "r"(va + off)); + bzero((void *)va, PAGE_SIZE); mmu_booke_kremove(va); diff --git a/sys/powerpc/booke/pmap_64.c b/sys/powerpc/booke/pmap_64.c index affa08ebee3f..5a414b9026c8 100644 --- a/sys/powerpc/booke/pmap_64.c +++ b/sys/powerpc/booke/pmap_64.c @@ -679,12 +679,11 @@ mmu_booke_zero_page_area(vm_page_t m, int off, int size) static void mmu_booke_zero_page(vm_page_t m) { - vm_offset_t off, va; + vm_offset_t va; va = PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)); - for (off = 0; off < PAGE_SIZE; off += cacheline_size) - __asm __volatile("dcbz 0,%0" :: "r"(va + off)); + bzero((void *)va, PAGE_SIZE); } /*help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?691d4a39.b5e8.1a3bb356>
