Module Name: src Committed By: matt Date: Mon Jul 11 16:06:52 UTC 2016
Modified Files: src/sys/arch/powerpc/booke: booke_machdep.c booke_pmap.c booke_stubs.c e500_tlb.c src/sys/arch/powerpc/include/booke: pmap.h pte.h Log Message: Adapt to common pmap changes. To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/arch/powerpc/booke/booke_machdep.c \ src/sys/arch/powerpc/booke/booke_pmap.c cvs rdiff -u -r1.9 -r1.10 src/sys/arch/powerpc/booke/booke_stubs.c cvs rdiff -u -r1.17 -r1.18 src/sys/arch/powerpc/booke/e500_tlb.c cvs rdiff -u -r1.15 -r1.16 src/sys/arch/powerpc/include/booke/pmap.h cvs rdiff -u -r1.7 -r1.8 src/sys/arch/powerpc/include/booke/pte.h 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_machdep.c diff -u src/sys/arch/powerpc/booke/booke_machdep.c:1.23 src/sys/arch/powerpc/booke/booke_machdep.c:1.24 --- src/sys/arch/powerpc/booke/booke_machdep.c:1.23 Fri Jan 23 07:27:05 2015 +++ src/sys/arch/powerpc/booke/booke_machdep.c Mon Jul 11 16:06:52 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: booke_machdep.c,v 1.23 2015/01/23 07:27:05 nonaka Exp $ */ +/* $NetBSD: booke_machdep.c,v 1.24 2016/07/11 16:06:52 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -38,7 +38,7 @@ #define _POWERPC_BUS_DMA_PRIVATE #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: booke_machdep.c,v 1.23 2015/01/23 07:27:05 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: booke_machdep.c,v 1.24 2016/07/11 16:06:52 matt Exp $"); #include "opt_modular.h" @@ -130,6 +130,7 @@ struct cpu_info cpu_info[] = { .ci_softc = &cpu_softc[0], .ci_cpl = IPL_HIGH, .ci_idepth = -1, + .ci_pmap_kern_segtab = &pmap_kern_segtab, }, #ifdef MULTIPROCESSOR [CPU_MAXNUM-1] = { @@ -138,6 +139,7 @@ struct cpu_info cpu_info[] = { .ci_softc = &cpu_softc[CPU_MAXNUM-1], .ci_cpl = IPL_HIGH, .ci_idepth = -1, + .ci_pmap_kern_segtab = &pmap_kern_segtab, }, #endif }; Index: src/sys/arch/powerpc/booke/booke_pmap.c diff -u src/sys/arch/powerpc/booke/booke_pmap.c:1.23 src/sys/arch/powerpc/booke/booke_pmap.c:1.24 --- src/sys/arch/powerpc/booke/booke_pmap.c:1.23 Thu Nov 5 06:26:15 2015 +++ src/sys/arch/powerpc/booke/booke_pmap.c Mon Jul 11 16:06:52 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: booke_pmap.c,v 1.23 2015/11/05 06:26:15 pgoyette Exp $ */ +/* $NetBSD: booke_pmap.c,v 1.24 2016/07/11 16:06:52 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -38,7 +38,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: booke_pmap.c,v 1.23 2015/11/05 06:26:15 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: booke_pmap.c,v 1.24 2016/07/11 16:06:52 matt Exp $"); #include <sys/param.h> #include <sys/kcore.h> @@ -53,19 +53,11 @@ __KERNEL_RCSID(0, "$NetBSD: booke_pmap.c kmutex_t pmap_tlb_miss_lock; #endif -/* - * Initialize the kernel pmap. - */ -#ifdef MULTIPROCESSOR -#define PMAP_SIZE offsetof(struct pmap, pm_pai[PMAP_TLB_MAX]) -#else -#define PMAP_SIZE sizeof(struct pmap) -#endif +PMAP_COUNTER(zeroed_pages, "pages zeroed"); +PMAP_COUNTER(copied_pages, "pages copied"); CTASSERT(sizeof(pmap_segtab_t) == NBPG); -pmap_segtab_t pmap_kernel_segtab; - void pmap_procwr(struct proc *p, vaddr_t va, size_t len) { @@ -140,7 +132,7 @@ kvtopte(const pmap_segtab_t *stp, vaddr_ vaddr_t pmap_kvptefill(vaddr_t sva, vaddr_t eva, pt_entry_t pt_entry) { - const pmap_segtab_t * const stp = pmap_kernel()->pm_segtab; + pmap_segtab_t * const stp = &pmap_kern_segtab; KASSERT(sva == trunc_page(sva)); pt_entry_t *ptep = kvtopte(stp, sva); for (; sva < eva; sva += NBPG) { @@ -158,13 +150,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_kernel_segtab; - - /* - * Initialize the kernel segment table. - */ - pmap_kernel()->pm_segtab = stp; - curcpu()->ci_pmap_kern_segtab = stp; + pmap_segtab_t * const stp = &pmap_kern_segtab; KASSERT(endkernel == trunc_page(endkernel)); @@ -350,6 +336,7 @@ pmap_md_unmap_poolpage(vaddr_t va, vsize void pmap_zero_page(paddr_t pa) { + PMAP_COUNT(zeroed_pages); vaddr_t va = pmap_md_map_poolpage(pa, NBPG); dcache_zero_page(va); @@ -365,6 +352,8 @@ pmap_copy_page(paddr_t src, paddr_t dst) vaddr_t dst_va = pmap_md_map_poolpage(dst, NBPG); const vaddr_t end = src_va + PAGE_SIZE; + PMAP_COUNT(copied_pages); + while (src_va < end) { __asm __volatile( "dcbt %2,%0" "\n\t" /* touch next src cacheline */ Index: src/sys/arch/powerpc/booke/booke_stubs.c diff -u src/sys/arch/powerpc/booke/booke_stubs.c:1.9 src/sys/arch/powerpc/booke/booke_stubs.c:1.10 --- src/sys/arch/powerpc/booke/booke_stubs.c:1.9 Thu Jun 30 00:52:58 2011 +++ src/sys/arch/powerpc/booke/booke_stubs.c Mon Jul 11 16:06:52 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: booke_stubs.c,v 1.9 2011/06/30 00:52:58 matt Exp $ */ +/* $NetBSD: booke_stubs.c,v 1.10 2016/07/11 16:06:52 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: booke_stubs.c,v 1.9 2011/06/30 00:52:58 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: booke_stubs.c,v 1.10 2016/07/11 16:06:52 matt Exp $"); #include <sys/param.h> #include <sys/cpu.h> @@ -118,12 +118,12 @@ tlb_write_entry(size_t pos, const struct (*cpu_md_ops.md_tlb_ops->md_tlb_write_entry)(pos, tlb); } -u_int tlb_record_asids(u_long *) __stub; +u_int tlb_record_asids(u_long *, tlb_asid_t) __stub; u_int -tlb_record_asids(u_long *bitmap) +tlb_record_asids(u_long *bitmap, tlb_asid_t asid_max) { - return (*cpu_md_ops.md_tlb_ops->md_tlb_record_asids)(bitmap); + return (*cpu_md_ops.md_tlb_ops->md_tlb_record_asids)(bitmap, asid_max); } void tlb_dump(void (*)(const char *, ...)) __stub; Index: src/sys/arch/powerpc/booke/e500_tlb.c diff -u src/sys/arch/powerpc/booke/e500_tlb.c:1.17 src/sys/arch/powerpc/booke/e500_tlb.c:1.18 --- src/sys/arch/powerpc/booke/e500_tlb.c:1.17 Thu Feb 19 08:59:56 2015 +++ src/sys/arch/powerpc/booke/e500_tlb.c Mon Jul 11 16:06:52 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: e500_tlb.c,v 1.17 2015/02/19 08:59:56 nonaka Exp $ */ +/* $NetBSD: e500_tlb.c,v 1.18 2016/07/11 16:06:52 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -40,7 +40,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: e500_tlb.c,v 1.17 2015/02/19 08:59:56 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: e500_tlb.c,v 1.18 2016/07/11 16:06:52 matt Exp $"); #include <sys/param.h> @@ -465,7 +465,7 @@ e500_tlb_invalidate_asids(tlb_asid_t asi } static u_int -e500_tlb_record_asids(u_long *bitmap) +e500_tlb_record_asids(u_long *bitmap, tlb_asid_t asid_max) { const size_t tlbassoc = TLBCFG_ASSOC(mftlb0cfg()); const size_t tlbentries = TLBCFG_NENTRY(mftlb0cfg()); @@ -554,7 +554,8 @@ e500_tlb_update_addr(vaddr_t va, tlb_asi #endif return false; } - mtspr(SPR_MAS1, hwtlb.hwtlb_mas1); + mas1 = hwtlb.hwtlb_mas1 | MAS1_V; + mtspr(SPR_MAS1, mas1); } mtspr(SPR_MAS2, hwtlb.hwtlb_mas2); mtspr(SPR_MAS3, hwtlb.hwtlb_mas3); Index: src/sys/arch/powerpc/include/booke/pmap.h diff -u src/sys/arch/powerpc/include/booke/pmap.h:1.15 src/sys/arch/powerpc/include/booke/pmap.h:1.16 --- src/sys/arch/powerpc/include/booke/pmap.h:1.15 Mon Jan 26 04:47:53 2015 +++ src/sys/arch/powerpc/include/booke/pmap.h Mon Jul 11 16:06:52 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.15 2015/01/26 04:47:53 nonaka Exp $ */ +/* $NetBSD: pmap.h,v 1.16 2016/07/11 16:06:52 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -131,7 +131,7 @@ pmap_md_vca_add(struct vm_page *pg, vadd } static inline void -pmap_md_vca_remove(struct vm_page *pg, vaddr_t va) +pmap_md_vca_remove(struct vm_page *pg, vaddr_t va, bool dirty) { } @@ -140,12 +140,21 @@ static inline void pmap_md_vca_clean(struct vm_page *pg, vaddr_t va, int op) { } +#endif +#ifdef __PMAP_PRIVATE static inline size_t pmap_md_tlb_asid_max(void) { return PMAP_TLB_NUM_PIDS - 1; } + +struct vm_physseg; +static inline bool +pmap_md_ok_to_steal_p(const struct vm_physseg *seg, size_t npgs) +{ + return true; +} #endif #define POOL_VTOPHYS(va) ((paddr_t)(vaddr_t)(va)) Index: src/sys/arch/powerpc/include/booke/pte.h diff -u src/sys/arch/powerpc/include/booke/pte.h:1.7 src/sys/arch/powerpc/include/booke/pte.h:1.8 --- src/sys/arch/powerpc/include/booke/pte.h:1.7 Thu Jun 11 08:01:50 2015 +++ src/sys/arch/powerpc/include/booke/pte.h Mon Jul 11 16:06:52 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pte.h,v 1.7 2015/06/11 08:01:50 matt Exp $ */ +/* $NetBSD: pte.h,v 1.8 2016/07/11 16:06:52 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -114,6 +114,12 @@ pte_exec_p(pt_entry_t pt_entry) } static inline bool +pte_readonly_p(pt_entry_t pt_entry) +{ + return (pt_entry & PTE_xW) == 0; +} + +static inline bool pte_deferred_exec_p(pt_entry_t pt_entry) { //return (pt_entry & (PTE_xX|PTE_UNSYNCED)) == (PTE_xX|PTE_UNSYNCED);