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);