Deleted Added
full compact
pmap.c (270439) pmap.c (270920)
1/* From: $NetBSD: pmap.c,v 1.148 2004/04/03 04:35:48 bsh Exp $ */
2/*-
3 * Copyright 2004 Olivier Houchard.
4 * Copyright 2003 Wasabi Systems, Inc.
5 * All rights reserved.
6 *
7 * Written by Steve C. Woodford for Wasabi Systems, Inc.
8 *

--- 128 unchanged lines hidden (view full) ---

137 *
138 * Note that pmap_mapdev() and pmap_unmapdev() are implemented in arm/devmap.c
139 */
140/* Include header files */
141
142#include "opt_vm.h"
143
144#include <sys/cdefs.h>
1/* From: $NetBSD: pmap.c,v 1.148 2004/04/03 04:35:48 bsh Exp $ */
2/*-
3 * Copyright 2004 Olivier Houchard.
4 * Copyright 2003 Wasabi Systems, Inc.
5 * All rights reserved.
6 *
7 * Written by Steve C. Woodford for Wasabi Systems, Inc.
8 *

--- 128 unchanged lines hidden (view full) ---

137 *
138 * Note that pmap_mapdev() and pmap_unmapdev() are implemented in arm/devmap.c
139 */
140/* Include header files */
141
142#include "opt_vm.h"
143
144#include <sys/cdefs.h>
145__FBSDID("$FreeBSD: stable/10/sys/arm/arm/pmap.c 270439 2014-08-24 07:53:15Z kib $");
145__FBSDID("$FreeBSD: stable/10/sys/arm/arm/pmap.c 270920 2014-09-01 07:58:15Z kib $");
146#include <sys/param.h>
147#include <sys/systm.h>
148#include <sys/kernel.h>
149#include <sys/ktr.h>
150#include <sys/lock.h>
151#include <sys/proc.h>
152#include <sys/malloc.h>
153#include <sys/msgbuf.h>

--- 3383 unchanged lines hidden (view full) ---

3537 PMAP_LOCK(pmap);
3538 pmap_enter_locked(pmap, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE),
3539 PMAP_ENTER_NOSLEEP);
3540 rw_wunlock(&pvh_global_lock);
3541 PMAP_UNLOCK(pmap);
3542}
3543
3544/*
146#include <sys/param.h>
147#include <sys/systm.h>
148#include <sys/kernel.h>
149#include <sys/ktr.h>
150#include <sys/lock.h>
151#include <sys/proc.h>
152#include <sys/malloc.h>
153#include <sys/msgbuf.h>

--- 3383 unchanged lines hidden (view full) ---

3537 PMAP_LOCK(pmap);
3538 pmap_enter_locked(pmap, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE),
3539 PMAP_ENTER_NOSLEEP);
3540 rw_wunlock(&pvh_global_lock);
3541 PMAP_UNLOCK(pmap);
3542}
3543
3544/*
3545 * Routine: pmap_change_wiring
3546 * Function: Change the wiring attribute for a map/virtual-address
3547 * pair.
3548 * In/out conditions:
3549 * The mapping must already exist in the pmap.
3545 * Clear the wired attribute from the mappings for the specified range of
3546 * addresses in the given pmap. Every valid mapping within that range
3547 * must have the wired attribute set. In contrast, invalid mappings
3548 * cannot have the wired attribute set, so they are ignored.
3549 *
3550 * XXX Wired mappings of unmanaged pages cannot be counted by this pmap
3551 * implementation.
3550 */
3551void
3552 */
3553void
3552pmap_change_wiring(pmap_t pmap, vm_offset_t va, boolean_t wired)
3554pmap_unwire(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
3553{
3554 struct l2_bucket *l2b;
3555 pt_entry_t *ptep, pte;
3555{
3556 struct l2_bucket *l2b;
3557 pt_entry_t *ptep, pte;
3556 vm_page_t pg;
3557
3558 pv_entry_t pv;
3559 vm_offset_t next_bucket;
3560 vm_page_t m;
3561
3558 rw_wlock(&pvh_global_lock);
3562 rw_wlock(&pvh_global_lock);
3559 PMAP_LOCK(pmap);
3560 l2b = pmap_get_l2_bucket(pmap, va);
3561 KASSERT(l2b, ("No l2b bucket in pmap_change_wiring"));
3562 ptep = &l2b->l2b_kva[l2pte_index(va)];
3563 pte = *ptep;
3564 pg = PHYS_TO_VM_PAGE(l2pte_pa(pte));
3565 if (pg)
3566 pmap_modify_pv(pg, pmap, va, PVF_WIRED, wired ? PVF_WIRED : 0);
3563 PMAP_LOCK(pmap);
3564 while (sva < eva) {
3565 next_bucket = L2_NEXT_BUCKET(sva);
3566 if (next_bucket > eva)
3567 next_bucket = eva;
3568 l2b = pmap_get_l2_bucket(pmap, sva);
3569 if (l2b == NULL) {
3570 sva = next_bucket;
3571 continue;
3572 }
3573 for (ptep = &l2b->l2b_kva[l2pte_index(sva)]; sva < next_bucket;
3574 sva += PAGE_SIZE, ptep++) {
3575 if ((pte = *ptep) == 0 ||
3576 (m = PHYS_TO_VM_PAGE(l2pte_pa(pte))) == NULL ||
3577 (m->oflags & VPO_UNMANAGED) != 0)
3578 continue;
3579 pv = pmap_find_pv(m, pmap, sva);
3580 if ((pv->pv_flags & PVF_WIRED) == 0)
3581 panic("pmap_unwire: pv %p isn't wired", pv);
3582 pv->pv_flags &= ~PVF_WIRED;
3583 pmap->pm_stats.wired_count--;
3584 }
3585 }
3567 rw_wunlock(&pvh_global_lock);
3568 PMAP_UNLOCK(pmap);
3569}
3570
3571
3572/*
3573 * Copy the range specified by src_addr/len
3574 * from the source map to the range dst_addr/len

--- 1228 unchanged lines hidden ---
3586 rw_wunlock(&pvh_global_lock);
3587 PMAP_UNLOCK(pmap);
3588}
3589
3590
3591/*
3592 * Copy the range specified by src_addr/len
3593 * from the source map to the range dst_addr/len

--- 1228 unchanged lines hidden ---