Module Name: src
Committed By: matt
Date: Wed Feb 27 16:55:39 UTC 2013
Modified Files:
src/sys/arch/arm/arm32: arm32_kvminit.c
Log Message:
Add a zero flag to valloc_pages so that we can *not* zero the msgbuf so it
will be preserved across boots.
To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/arm32/arm32_kvminit.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/arm/arm32/arm32_kvminit.c
diff -u src/sys/arch/arm/arm32/arm32_kvminit.c:1.16 src/sys/arch/arm/arm32/arm32_kvminit.c:1.17
--- src/sys/arch/arm/arm32/arm32_kvminit.c:1.16 Mon Dec 31 01:23:31 2012
+++ src/sys/arch/arm/arm32/arm32_kvminit.c Wed Feb 27 16:55:39 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: arm32_kvminit.c,v 1.16 2012/12/31 01:23:31 matt Exp $ */
+/* $NetBSD: arm32_kvminit.c,v 1.17 2013/02/27 16:55:39 matt Exp $ */
/*
* Copyright (c) 2002, 2003, 2005 Genetec Corporation. All rights reserved.
@@ -122,7 +122,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: arm32_kvminit.c,v 1.16 2012/12/31 01:23:31 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: arm32_kvminit.c,v 1.17 2013/02/27 16:55:39 matt Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -295,7 +295,7 @@ add_pages(struct bootmem_info *bmi, pv_a
static void
valloc_pages(struct bootmem_info *bmi, pv_addr_t *pv, size_t npages,
- int prot, int cache)
+ int prot, int cache, bool zero_p)
{
size_t nbytes = npages * PAGE_SIZE;
pv_addr_t *free_pv = bmi->bmi_freeblocks;
@@ -311,7 +311,7 @@ valloc_pages(struct bootmem_info *bmi, p
&& free_pv->pv_size >= L1_TABLE_SIZE) {
l1pt_found = true;
valloc_pages(bmi, &kernel_l1pt, L1_TABLE_SIZE / PAGE_SIZE,
- VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE, true);
add_pages(bmi, &kernel_l1pt);
}
@@ -454,7 +454,7 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
printf(" vector");
#endif
valloc_pages(bmi, &bmi->bmi_vector_l2pt, L2_TABLE_SIZE / PAGE_SIZE,
- VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE, true);
add_pages(bmi, &bmi->bmi_vector_l2pt);
/*
@@ -465,7 +465,7 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
#endif
for (size_t idx = 0; idx < KERNEL_L2PT_KERNEL_NUM; ++idx) {
valloc_pages(bmi, &kernel_l2pt[idx], L2_TABLE_SIZE / PAGE_SIZE,
- VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE, true);
add_pages(bmi, &kernel_l2pt[idx]);
}
@@ -477,7 +477,7 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
#endif
for (size_t idx = 0; idx < KERNEL_L2PT_VMDATA_NUM; ++idx) {
valloc_pages(bmi, &vmdata_l2pt[idx], L2_TABLE_SIZE / PAGE_SIZE,
- VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE, true);
add_pages(bmi, &vmdata_l2pt[idx]);
}
@@ -489,7 +489,7 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
printf(" io");
#endif
valloc_pages(bmi, &bmi->bmi_io_l2pt, L2_TABLE_SIZE / PAGE_SIZE,
- VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE, true);
add_pages(bmi, &bmi->bmi_io_l2pt);
}
@@ -499,28 +499,28 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
/* Allocate stacks for all modes and CPUs */
valloc_pages(bmi, &abtstack, ABT_STACK_SIZE * cpu_num,
- VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE, true);
add_pages(bmi, &abtstack);
valloc_pages(bmi, &fiqstack, FIQ_STACK_SIZE * cpu_num,
- VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE, true);
add_pages(bmi, &fiqstack);
valloc_pages(bmi, &irqstack, IRQ_STACK_SIZE * cpu_num,
- VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE, true);
add_pages(bmi, &irqstack);
valloc_pages(bmi, &undstack, UND_STACK_SIZE * cpu_num,
- VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE, true);
add_pages(bmi, &undstack);
valloc_pages(bmi, &idlestack, UPAGES * cpu_num, /* SVC32 */
- VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE, true);
add_pages(bmi, &idlestack);
valloc_pages(bmi, &kernelstack, UPAGES, /* SVC32 */
- VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE, true);
add_pages(bmi, &kernelstack);
/* Allocate the message buffer from the end of memory. */
const size_t msgbuf_pgs = round_page(MSGBUFSIZE) / PAGE_SIZE;
valloc_pages(bmi, &msgbuf, msgbuf_pgs,
- VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+ VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE, false);
add_pages(bmi, &msgbuf);
msgbufphys = msgbuf.pv_pa;
@@ -529,7 +529,8 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
* This page will just contain the system vectors and can be
* shared by all processes.
*/
- valloc_pages(bmi, &systempage, 1, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+ valloc_pages(bmi, &systempage, 1, VM_PROT_READ|VM_PROT_WRITE,
+ PTE_CACHE, true);
systempage.pv_va = vectors;
/*
@@ -541,7 +542,7 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
if (xscale_use_minidata)
#endif
valloc_pages(bmi, extrapv, nextrapages,
- VM_PROT_READ|VM_PROT_WRITE, 0);
+ VM_PROT_READ|VM_PROT_WRITE, 0, false);
#endif
/*
@@ -883,7 +884,11 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
cpu_domains((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)) | DOMAIN_CLIENT);
cpu_idcache_wbinv_all();
+#ifdef ARM_MMU_EXTENDED
+ cpu_setttb(l1pt_pa, KERNEL_PID);
+#else
cpu_setttb(l1pt_pa, true);
+#endif
cpu_tlb_flushID();
cpu_domains(DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2));