Module Name: src Committed By: skrll Date: Tue Sep 24 07:29:55 UTC 2024
Modified Files: src/sys/arch/powerpc/booke: booke_pmap.c Log Message: Partially fix PMAP_MINIMALTLB compilation. From andvar@ To generate a diff of this commit: cvs rdiff -u -r1.38 -r1.39 src/sys/arch/powerpc/booke/booke_pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/powerpc/booke/booke_pmap.c diff -u src/sys/arch/powerpc/booke/booke_pmap.c:1.38 src/sys/arch/powerpc/booke/booke_pmap.c:1.39 --- src/sys/arch/powerpc/booke/booke_pmap.c:1.38 Mon Apr 17 06:46:53 2023 +++ src/sys/arch/powerpc/booke/booke_pmap.c Tue Sep 24 07:29:55 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: booke_pmap.c,v 1.38 2023/04/17 06:46:53 skrll Exp $ */ +/* $NetBSD: booke_pmap.c,v 1.39 2024/09/24 07:29:55 skrll Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -37,7 +37,7 @@ #define __PMAP_PRIVATE #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: booke_pmap.c,v 1.38 2023/04/17 06:46:53 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: booke_pmap.c,v 1.39 2024/09/24 07:29:55 skrll Exp $"); #ifdef _KERNEL_OPT #include "opt_multiprocessor.h" @@ -125,12 +125,16 @@ pmap_md_direct_mapped_vaddr_to_paddr(vad #ifdef PMAP_MINIMALTLB static pt_entry_t * -kvtopte(const pmap_segtab_t *stb, vaddr_t va) +pmap_kvtopte(const pmap_segtab_t *stb, vaddr_t va) { - pt_entry_t * const ptep = stb->seg_tab[va >> SEGSHIFT]; - if (ptep == NULL) + const vaddr_t segtab_mask = PMAP_SEGTABSIZE - 1; + const size_t idx = (va >> SEGSHIFT) & segtab_mask; + pmap_ptpage_t * const ppg = stb->seg_ppg[idx]; + if (ppg == NULL) return NULL; - return &ptep[(va & SEGOFSET) >> PAGE_SHIFT]; + const size_t pte_idx = (va >> PGSHIFT) & (NPTEPG - 1); + + return &ppg->ppg_ptes[pte_idx]; } vaddr_t @@ -138,7 +142,7 @@ pmap_kvptefill(vaddr_t sva, vaddr_t eva, { pmap_segtab_t * const stb = &pmap_kern_segtab; KASSERT(sva == trunc_page(sva)); - pt_entry_t *ptep = kvtopte(stb, sva); + pt_entry_t *ptep = pmap_kvtopte(stb, sva); for (; sva < eva; sva += NBPG) { *ptep++ = pt_entry ? (sva | pt_entry) : 0; } @@ -154,7 +158,7 @@ vaddr_t pmap_bootstrap(vaddr_t startkernel, vaddr_t endkernel, phys_ram_seg_t *avail, size_t cnt) { - pmap_segtab_t * const stp = &pmap_kern_segtab; + pmap_segtab_t * const stb = &pmap_kern_segtab; KASSERT(endkernel == trunc_page(endkernel)); @@ -228,14 +232,14 @@ pmap_bootstrap(vaddr_t startkernel, vadd * access to be common. */ - pmap_ptpage_t **ppg_p = &stp->seg_ppg[VM_MIN_KERNEL_ADDRESS >> SEGSHIFT]; + pmap_ptpage_t **ppg_p = &stb->seg_ppg[VM_MIN_KERNEL_ADDRESS >> SEGSHIFT]; pmap_ptpage_t *ppg = (void *)kv_segtabs; memset(ppg, 0, NBPG * kv_nsegtabs); for (size_t i = 0; i < kv_nsegtabs; i++, ppg++) { *ppg_p++ = ppg; } -#if PMAP_MINIMALTLB +#ifdef PMAP_MINIMALTLB const vsize_t dm_nsegtabs = (physmem + NPTEPG - 1) / NPTEPG; const vaddr_t dm_segtabs = avail[0].start; printf(" dm_nsegtabs=%#"PRIxVSIZE, dm_nsegtabs); @@ -246,11 +250,11 @@ pmap_bootstrap(vaddr_t startkernel, vadd avail[0].size -= NBPG * dm_nsegtabs; endkernel += NBPG * dm_nsegtabs; - ptp = stp->seg_tab; + ppg_p = stb->seg_ppg; ppg = (void *)dm_segtabs; memset(ppg, 0, NBPG * dm_nsegtabs); - for (size_t i = 0; i < dm_nsegtabs; i++, ptp++, ppg++) { - *ptp = ppg; + for (size_t i = 0; i < dm_nsegtabs; i++, ppg_p++, ppg++) { + *ppg_p = ppg; } /*