diff options
author | alc <alc@FreeBSD.org> | 2014-08-03 20:40:51 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2014-08-03 20:40:51 +0000 |
commit | 38b6c535da5fc58f5d97fec83c199b56a4856e36 (patch) | |
tree | 2ab40fc0f8244e8e1d8a04f61b19ada4139006e1 /sys/i386 | |
parent | ff18393ff054f8f8f4779a04e260ff6549b44e78 (diff) | |
download | FreeBSD-src-38b6c535da5fc58f5d97fec83c199b56a4856e36.zip FreeBSD-src-38b6c535da5fc58f5d97fec83c199b56a4856e36.tar.gz |
Retire pmap_change_wiring(). We have never used it to wire virtual pages.
We continue to use pmap_enter() for that. For unwiring virtual pages, we
now use pmap_unwire(), which unwires a range of virtual addresses instead
of a single virtual page.
Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'sys/i386')
-rw-r--r-- | sys/i386/i386/pmap.c | 52 | ||||
-rw-r--r-- | sys/i386/xen/pmap.c | 33 |
2 files changed, 0 insertions, 85 deletions
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index d0c74b5..8c21b0d 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -3968,58 +3968,6 @@ pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_object_t object, } /* - * Routine: pmap_change_wiring - * Function: Change the wiring attribute for a map/virtual-address - * pair. - * In/out conditions: - * The mapping must already exist in the pmap. - */ -void -pmap_change_wiring(pmap_t pmap, vm_offset_t va, boolean_t wired) -{ - pd_entry_t *pde; - pt_entry_t *pte; - boolean_t are_queues_locked; - - are_queues_locked = FALSE; -retry: - PMAP_LOCK(pmap); - pde = pmap_pde(pmap, va); - if ((*pde & PG_PS) != 0) { - if (!wired != ((*pde & PG_W) == 0)) { - if (!are_queues_locked) { - are_queues_locked = TRUE; - if (!rw_try_wlock(&pvh_global_lock)) { - PMAP_UNLOCK(pmap); - rw_wlock(&pvh_global_lock); - goto retry; - } - } - if (!pmap_demote_pde(pmap, pde, va)) - panic("pmap_change_wiring: demotion failed"); - } else - goto out; - } - pte = pmap_pte(pmap, va); - - if (wired && !pmap_pte_w(pte)) - pmap->pm_stats.wired_count++; - else if (!wired && pmap_pte_w(pte)) - pmap->pm_stats.wired_count--; - - /* - * Wiring is not a hardware characteristic so there is no need to - * invalidate TLB. - */ - pmap_pte_set_w(pte, wired); - pmap_pte_release(pte); -out: - if (are_queues_locked) - rw_wunlock(&pvh_global_lock); - PMAP_UNLOCK(pmap); -} - -/* * Clear the wired attribute from the mappings for the specified range of * addresses in the given pmap. Every valid mapping within that range * must have the wired attribute set. In contrast, invalid mappings diff --git a/sys/i386/xen/pmap.c b/sys/i386/xen/pmap.c index 54ee3a6..fbfdcf7 100644 --- a/sys/i386/xen/pmap.c +++ b/sys/i386/xen/pmap.c @@ -3167,39 +3167,6 @@ pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_object_t object, } /* - * Routine: pmap_change_wiring - * Function: Change the wiring attribute for a map/virtual-address - * pair. - * In/out conditions: - * The mapping must already exist in the pmap. - */ -void -pmap_change_wiring(pmap_t pmap, vm_offset_t va, boolean_t wired) -{ - pt_entry_t *pte; - - rw_wlock(&pvh_global_lock); - PMAP_LOCK(pmap); - pte = pmap_pte(pmap, va); - - if (wired && !pmap_pte_w(pte)) { - PT_SET_VA_MA((pte), *(pte) | PG_W, TRUE); - pmap->pm_stats.wired_count++; - } else if (!wired && pmap_pte_w(pte)) { - PT_SET_VA_MA((pte), *(pte) & ~PG_W, TRUE); - pmap->pm_stats.wired_count--; - } - - /* - * Wiring is not a hardware characteristic so there is no need to - * invalidate TLB. - */ - pmap_pte_release(pte); - PMAP_UNLOCK(pmap); - rw_wunlock(&pvh_global_lock); -} - -/* * Clear the wired attribute from the mappings for the specified range of * addresses in the given pmap. Every valid mapping within that range * must have the wired attribute set. In contrast, invalid mappings |