summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormlarkin <mlarkin@openbsd.org>2015-02-02 09:29:53 +0000
committermlarkin <mlarkin@openbsd.org>2015-02-02 09:29:53 +0000
commit0045b270cb3e756a639f570bd940523e173f60fe (patch)
tree2dda5a627fa965fe41caa9b0b4f20a8128ddd856
parentreplace the wireless scan example with one showing how to select monitor (diff)
downloadwireguard-openbsd-0045b270cb3e756a639f570bd940523e173f60fe.tar.xz
wireguard-openbsd-0045b270cb3e756a639f570bd940523e173f60fe.zip
Remove some pmap locks that were #defined to be nothing (empty). Discussed
with many, ok kettenis@.
-rw-r--r--sys/arch/alpha/alpha/pmap.c40
-rw-r--r--sys/arch/amd64/amd64/pmap.c28
-rw-r--r--sys/arch/arm/arm/pmap.c57
-rw-r--r--sys/arch/arm/arm/pmap7.c56
-rw-r--r--sys/arch/i386/i386/pmap.c28
-rw-r--r--sys/arch/i386/i386/pmapae.c30
6 files changed, 17 insertions, 222 deletions
diff --git a/sys/arch/alpha/alpha/pmap.c b/sys/arch/alpha/alpha/pmap.c
index 63f53933e36..28152eb0f19 100644
--- a/sys/arch/alpha/alpha/pmap.c
+++ b/sys/arch/alpha/alpha/pmap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pmap.c,v 1.74 2014/12/17 15:23:40 deraadt Exp $ */
+/* $OpenBSD: pmap.c,v 1.75 2015/02/02 09:29:53 mlarkin Exp $ */
/* $NetBSD: pmap.c,v 1.154 2000/12/07 22:18:55 thorpej Exp $ */
/*-
@@ -357,11 +357,6 @@ struct pmap_asn_info pmap_asn_info[ALPHA_MAXPROCS];
struct mutex pmap_all_pmaps_mtx;
struct mutex pmap_growkernel_mtx;
-#define PMAP_MAP_TO_HEAD_LOCK() /* nothing */
-#define PMAP_MAP_TO_HEAD_UNLOCK() /* nothing */
-#define PMAP_HEAD_TO_MAP_LOCK() /* nothing */
-#define PMAP_HEAD_TO_MAP_UNLOCK() /* nothing */
-
#if defined(MULTIPROCESSOR)
/*
* TLB Shootdown:
@@ -1229,8 +1224,6 @@ pmap_do_remove(pmap_t pmap, vaddr_t sva, vaddr_t eva, boolean_t dowired)
* interrupt context; pmap_kremove() is used for that.
*/
if (pmap == pmap_kernel()) {
- PMAP_MAP_TO_HEAD_LOCK();
-
KASSERT(dowired == TRUE);
while (sva < eva) {
@@ -1249,8 +1242,6 @@ pmap_do_remove(pmap_t pmap, vaddr_t sva, vaddr_t eva, boolean_t dowired)
sva += PAGE_SIZE;
}
- PMAP_MAP_TO_HEAD_UNLOCK();
-
if (needisync)
PMAP_SYNC_ISTREAM_KERNEL();
return;
@@ -1262,14 +1253,12 @@ pmap_do_remove(pmap_t pmap, vaddr_t sva, vaddr_t eva, boolean_t dowired)
"address range", sva, eva);
#endif
- PMAP_MAP_TO_HEAD_LOCK();
-
/*
* If we're already referencing the kernel_lev1map, there
* is no work for us to do.
*/
if (pmap->pm_lev1map == kernel_lev1map)
- goto out;
+ return;
saved_l1pte = l1pte = pmap_l1pte(pmap, sva);
@@ -1349,9 +1338,6 @@ pmap_do_remove(pmap_t pmap, vaddr_t sva, vaddr_t eva, boolean_t dowired)
if (needisync)
PMAP_SYNC_ISTREAM_USER(pmap);
-
- out:
- PMAP_MAP_TO_HEAD_UNLOCK();
}
/*
@@ -1383,7 +1369,6 @@ pmap_page_protect(struct vm_page *pg, vm_prot_t prot)
/* copy_on_write */
case PROT_READ | PROT_EXEC:
case PROT_READ:
- PMAP_HEAD_TO_MAP_LOCK();
for (pv = pg->mdpage.pvh_list; pv != NULL; pv = pv->pv_next) {
if (*pv->pv_pte & (PG_KWE | PG_UWE)) {
*pv->pv_pte &= ~(PG_KWE | PG_UWE);
@@ -1394,7 +1379,6 @@ pmap_page_protect(struct vm_page *pg, vm_prot_t prot)
pmap_pte_asm(pv->pv_pte));
}
}
- PMAP_HEAD_TO_MAP_UNLOCK();
PMAP_TLB_SHOOTNOW();
return;
@@ -1403,7 +1387,6 @@ pmap_page_protect(struct vm_page *pg, vm_prot_t prot)
break;
}
- PMAP_HEAD_TO_MAP_LOCK();
for (pv = pg->mdpage.pvh_list; pv != NULL; pv = nextpv) {
nextpv = pv->pv_next;
pmap = pv->pv_pmap;
@@ -1424,8 +1407,6 @@ pmap_page_protect(struct vm_page *pg, vm_prot_t prot)
if (needkisync)
PMAP_SYNC_ISTREAM_KERNEL();
-
- PMAP_HEAD_TO_MAP_UNLOCK();
}
/*
@@ -1548,8 +1529,6 @@ pmap_enter(pmap_t pmap, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
}
}
- PMAP_MAP_TO_HEAD_LOCK();
-
if (pmap == pmap_kernel()) {
#ifdef DIAGNOSTIC
/*
@@ -1792,8 +1771,6 @@ pmap_enter(pmap_t pmap, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
PMAP_SYNC_ISTREAM(pmap);
out:
- PMAP_MAP_TO_HEAD_UNLOCK();
-
return error;
}
@@ -2225,17 +2202,12 @@ pmap_clear_modify(struct vm_page *pg)
if (pmapdebug & PDB_FOLLOW)
printf("pmap_clear_modify(%p)\n", pg);
#endif
-
- PMAP_HEAD_TO_MAP_LOCK();
-
if (pg->mdpage.pvh_attrs & PGA_MODIFIED) {
rv = TRUE;
pmap_changebit(pg, PG_FOW, ~0, cpu_id);
pg->mdpage.pvh_attrs &= ~PGA_MODIFIED;
}
- PMAP_HEAD_TO_MAP_UNLOCK();
-
return (rv);
}
@@ -2255,16 +2227,12 @@ pmap_clear_reference(struct vm_page *pg)
printf("pmap_clear_reference(%p)\n", pg);
#endif
- PMAP_HEAD_TO_MAP_LOCK();
-
if (pg->mdpage.pvh_attrs & PGA_REFERENCED) {
rv = TRUE;
pmap_changebit(pg, PG_FOR | PG_FOW | PG_FOE, ~0, cpu_id);
pg->mdpage.pvh_attrs &= ~PGA_REFERENCED;
}
- PMAP_HEAD_TO_MAP_UNLOCK();
-
return (rv);
}
@@ -2605,8 +2573,6 @@ pmap_emulate_reference(struct proc *p, vaddr_t v, int user, int type)
* (2) if it was a write fault, mark page as modified.
*/
- PMAP_HEAD_TO_MAP_LOCK();
-
if (type == ALPHA_MMCSR_FOW) {
pg->mdpage.pvh_attrs |= (PGA_REFERENCED|PGA_MODIFIED);
faultoff = PG_FOR | PG_FOW;
@@ -2619,8 +2585,6 @@ pmap_emulate_reference(struct proc *p, vaddr_t v, int user, int type)
}
pmap_changebit(pg, 0, ~faultoff, cpu_id);
- PMAP_HEAD_TO_MAP_UNLOCK();
-
return (0);
}
diff --git a/sys/arch/amd64/amd64/pmap.c b/sys/arch/amd64/amd64/pmap.c
index f2ba90f4e4d..a7ace581367 100644
--- a/sys/arch/amd64/amd64/pmap.c
+++ b/sys/arch/amd64/amd64/pmap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pmap.c,v 1.86 2015/01/28 02:56:50 mlarkin Exp $ */
+/* $OpenBSD: pmap.c,v 1.87 2015/02/02 09:29:53 mlarkin Exp $ */
/* $NetBSD: pmap.c,v 1.3 2003/05/08 18:13:13 thorpej Exp $ */
/*
@@ -211,17 +211,10 @@ long nkptpmax[] = NKPTPMAX_INITIALIZER;
long nbpd[] = NBPD_INITIALIZER;
pd_entry_t *normal_pdes[] = PDES_INITIALIZER;
-#define PMAP_MAP_TO_HEAD_LOCK() /* null */
-#define PMAP_MAP_TO_HEAD_UNLOCK() /* null */
-
-#define PMAP_HEAD_TO_MAP_LOCK() /* null */
-#define PMAP_HEAD_TO_MAP_UNLOCK() /* null */
-
#define pmap_pte_set(p, n) atomic_swap_64(p, n)
#define pmap_pte_clearbits(p, b) x86_atomic_clearbits_u64(p, b)
#define pmap_pte_setbits(p, b) x86_atomic_setbits_u64(p, b)
-
/*
* global data structures
*/
@@ -1465,7 +1458,6 @@ pmap_do_remove(struct pmap *pmap, vaddr_t sva, vaddr_t eva, int flags)
TAILQ_INIT(&empty_ptps);
- PMAP_MAP_TO_HEAD_LOCK();
pmap_map_ptes(pmap, &ptes, &pdes, &scr3);
shootself = (scr3 == 0);
@@ -1512,7 +1504,6 @@ pmap_do_remove(struct pmap *pmap, vaddr_t sva, vaddr_t eva, int flags)
} else {
pmap_unmap_ptes(pmap, scr3);
}
- PMAP_MAP_TO_HEAD_UNLOCK();
while ((ptp = TAILQ_FIRST(&empty_ptps)) != NULL) {
TAILQ_REMOVE(&empty_ptps, ptp, pageq);
@@ -1582,7 +1573,6 @@ pmap_do_remove(struct pmap *pmap, vaddr_t sva, vaddr_t eva, int flags)
pmap_unmap_ptes(pmap, scr3);
pmap_tlb_shootwait();
- PMAP_MAP_TO_HEAD_UNLOCK();
while ((ptp = TAILQ_FIRST(&empty_ptps)) != NULL) {
TAILQ_REMOVE(&empty_ptps, ptp, pageq);
@@ -1612,8 +1602,6 @@ pmap_page_remove(struct vm_page *pg)
TAILQ_INIT(&empty_ptps);
- PMAP_HEAD_TO_MAP_LOCK();
-
while ((pve = pg->mdpage.pv_list) != NULL) {
pg->mdpage.pv_list = pve->pv_next;
@@ -1658,7 +1646,6 @@ pmap_page_remove(struct vm_page *pg)
pool_put(&pmap_pv_pool, pve);
}
- PMAP_HEAD_TO_MAP_UNLOCK();
pmap_tlb_shootwait();
while ((ptp = TAILQ_FIRST(&empty_ptps)) != NULL) {
@@ -1691,7 +1678,6 @@ pmap_test_attrs(struct vm_page *pg, unsigned int testbits)
if (pg->pg_flags & testflags)
return (TRUE);
- PMAP_HEAD_TO_MAP_LOCK();
mybits = 0;
for (pve = pg->mdpage.pv_list; pve != NULL && mybits == 0;
pve = pve->pv_next) {
@@ -1699,7 +1685,6 @@ pmap_test_attrs(struct vm_page *pg, unsigned int testbits)
&offs);
mybits |= (ptes[offs] & testbits);
}
- PMAP_HEAD_TO_MAP_UNLOCK();
if (mybits == 0)
return (FALSE);
@@ -1725,8 +1710,6 @@ pmap_clear_attrs(struct vm_page *pg, unsigned long clearbits)
clearflags = pmap_pte2flags(clearbits);
- PMAP_HEAD_TO_MAP_LOCK();
-
result = pg->pg_flags & clearflags;
if (result)
atomic_clearbits_int(&pg->pg_flags, clearflags);
@@ -1743,8 +1726,6 @@ pmap_clear_attrs(struct vm_page *pg, unsigned long clearbits)
}
}
- PMAP_HEAD_TO_MAP_UNLOCK();
-
pmap_tlb_shootwait();
return (result != 0);
@@ -1954,9 +1935,6 @@ pmap_enter(struct pmap *pmap, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
#endif
- /* get lock */
- PMAP_MAP_TO_HEAD_LOCK();
-
/*
* map in ptes and get a pointer to our PTP (unless we are the kernel)
*/
@@ -2142,7 +2120,6 @@ enter_now:
out:
pmap_unmap_ptes(pmap, scr3);
- PMAP_MAP_TO_HEAD_UNLOCK();
return error;
}
@@ -2372,8 +2349,6 @@ pmap_dump(struct pmap *pmap, vaddr_t sva, vaddr_t eva)
if (eva > VM_MAXUSER_ADDRESS || eva <= sva)
eva = VM_MAXUSER_ADDRESS;
-
- PMAP_MAP_TO_HEAD_LOCK();
pmap_map_ptes(pmap, &ptes, &pdes, &scr3);
/*
@@ -2400,7 +2375,6 @@ pmap_dump(struct pmap *pmap, vaddr_t sva, vaddr_t eva)
}
}
pmap_unmap_ptes(pmap, scr3);
- PMAP_MAP_TO_HEAD_UNLOCK();
}
#endif
diff --git a/sys/arch/arm/arm/pmap.c b/sys/arch/arm/arm/pmap.c
index 4f5bf41ba76..f6bf9c892bc 100644
--- a/sys/arch/arm/arm/pmap.c
+++ b/sys/arch/arm/arm/pmap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pmap.c,v 1.50 2015/01/29 20:10:50 deraadt Exp $ */
+/* $OpenBSD: pmap.c,v 1.51 2015/02/02 09:29:53 mlarkin Exp $ */
/* $NetBSD: pmap.c,v 1.147 2004/01/18 13:03:50 scw Exp $ */
/*
@@ -300,15 +300,6 @@ boolean_t pmap_initialized;
int pmap_cachevivt = 1;
/*
- * Misc. locking data structures
- */
-
-#define PMAP_MAP_TO_HEAD_LOCK() /* null */
-#define PMAP_MAP_TO_HEAD_UNLOCK() /* null */
-#define PMAP_HEAD_TO_MAP_LOCK() /* null */
-#define PMAP_HEAD_TO_MAP_UNLOCK() /* null */
-
-/*
* Metadata for L1 translation tables.
*/
struct l1_ttable {
@@ -1473,17 +1464,13 @@ pmap_clearbit(struct vm_page *pg, u_int maskbits)
printf("pmap_clearbit: pg %p (0x%08lx) mask 0x%x\n",
pg, pg->phys_addr, maskbits));
- PMAP_HEAD_TO_MAP_LOCK();
-
/*
* Clear saved attributes (modify, reference)
*/
pg->mdpage.pvh_attrs &= ~(maskbits & (PVF_MOD | PVF_REF));
- if (pg->mdpage.pvh_list == NULL) {
- PMAP_HEAD_TO_MAP_UNLOCK();
+ if (pg->mdpage.pvh_list == NULL)
return;
- }
/*
* Loop over all current mappings setting/clearing as appropos
@@ -1618,8 +1605,6 @@ pmap_clearbit(struct vm_page *pg, u_int maskbits)
printf("pmap_clearbit: pm %p va 0x%lx opte 0x%08x npte 0x%08x\n",
pm, va, opte, npte));
}
-
- PMAP_HEAD_TO_MAP_UNLOCK();
}
/*
@@ -1730,13 +1715,9 @@ pmap_page_remove(struct vm_page *pg)
NPDEBUG(PDB_FOLLOW,
printf("pmap_page_remove: pg %p (0x%08lx)\n", pg, pg->phys_addr));
- PMAP_HEAD_TO_MAP_LOCK();
-
pv = pg->mdpage.pvh_list;
- if (pv == NULL) {
- PMAP_HEAD_TO_MAP_UNLOCK();
+ if (pv == NULL)
return;
- }
/*
* Clear alias counts
@@ -1787,7 +1768,6 @@ pmap_page_remove(struct vm_page *pg)
pv = npv;
}
pg->mdpage.pvh_list = NULL;
- PMAP_HEAD_TO_MAP_UNLOCK();
if (flush) {
if (PV_BEEN_EXECD(flags))
@@ -1874,8 +1854,6 @@ pmap_enter(pmap_t pm, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
if (flags & PMAP_WIRED)
nflags |= PVF_WIRED;
- PMAP_MAP_TO_HEAD_LOCK();
-
/*
* Fetch the L2 bucket which maps this page, allocating one if
* necessary for user pmaps.
@@ -1885,10 +1863,9 @@ pmap_enter(pmap_t pm, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
else
l2b = pmap_alloc_l2_bucket(pm, va);
if (l2b == NULL) {
- if (flags & PMAP_CANFAIL) {
- PMAP_MAP_TO_HEAD_UNLOCK();
+ if (flags & PMAP_CANFAIL)
return (ENOMEM);
- }
+
panic("pmap_enter: failed to allocate L2 bucket");
}
ptep = &l2b->l2b_kva[l2pte_index(va)];
@@ -2004,8 +1981,7 @@ pmap_enter(pmap_t pm, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
if (pm != pmap_kernel())
pmap_free_l2_bucket(pm, l2b, 0);
- PMAP_MAP_TO_HEAD_UNLOCK();
- NPDEBUG(PDB_ENTER,
+
printf("pmap_enter: ENOMEM\n"));
return (ENOMEM);
}
@@ -2114,8 +2090,6 @@ pmap_enter(pmap_t pm, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
pmap_vac_me_harder(pg, pm, va);
}
- PMAP_MAP_TO_HEAD_UNLOCK();
-
return (0);
}
@@ -2157,11 +2131,6 @@ pmap_remove(pmap_t pm, vaddr_t sva, vaddr_t eva)
NPDEBUG(PDB_REMOVE, printf("pmap_remove: pmap=%p sva=%08lx eva=%08lx\n",
pm, sva, eva));
- /*
- * we lock in the pmap => pv_head direction
- */
- PMAP_MAP_TO_HEAD_LOCK();
-
if (pm->pm_remove_all || !pmap_is_cached(pm)) {
cleanlist_idx = PMAP_REMOVE_CLEAN_LIST_SIZE + 1;
if (pm->pm_cstate.cs_tlb == 0)
@@ -2325,8 +2294,6 @@ pmap_remove(pmap_t pm, vaddr_t sva, vaddr_t eva)
pmap_free_l2_bucket(pm, l2b, mappings);
}
-
- PMAP_MAP_TO_HEAD_UNLOCK();
}
/*
@@ -2497,8 +2464,6 @@ pmap_protect(pmap_t pm, vaddr_t sva, vaddr_t eva, vm_prot_t prot)
return;
}
- PMAP_MAP_TO_HEAD_LOCK();
-
flush = ((eva - sva) >= (PAGE_SIZE * 4)) ? 0 : -1;
flags = 0;
@@ -2556,8 +2521,6 @@ pmap_protect(pmap_t pm, vaddr_t sva, vaddr_t eva, vm_prot_t prot)
}
}
- PMAP_MAP_TO_HEAD_UNLOCK();
-
if (flush) {
if (PV_BEEN_EXECD(flags))
pmap_tlb_flushID(pm);
@@ -2654,8 +2617,6 @@ pmap_fault_fixup(pmap_t pm, vaddr_t va, vm_prot_t ftype, int user)
u_int l1idx;
int rv = 0;
- PMAP_MAP_TO_HEAD_LOCK();
-
l1idx = L1_IDX(va);
/*
@@ -2827,8 +2788,6 @@ pmap_fault_fixup(pmap_t pm, vaddr_t va, vm_prot_t ftype, int user)
rv = 1;
out:
- PMAP_MAP_TO_HEAD_UNLOCK();
-
return (rv);
}
@@ -2879,8 +2838,6 @@ pmap_unwire(pmap_t pm, vaddr_t va)
NPDEBUG(PDB_WIRING, printf("pmap_unwire: pm %p, va 0x%08lx\n", pm, va));
- PMAP_MAP_TO_HEAD_LOCK();
-
l2b = pmap_get_l2_bucket(pm, va);
KDASSERT(l2b != NULL);
@@ -2894,8 +2851,6 @@ pmap_unwire(pmap_t pm, vaddr_t va)
/* Update the wired bit in the pv entry for this page. */
(void) pmap_modify_pv(pg, pm, va, PVF_WIRED, 0);
}
-
- PMAP_MAP_TO_HEAD_UNLOCK();
}
void
diff --git a/sys/arch/arm/arm/pmap7.c b/sys/arch/arm/arm/pmap7.c
index a946f816625..5dff66eca97 100644
--- a/sys/arch/arm/arm/pmap7.c
+++ b/sys/arch/arm/arm/pmap7.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pmap7.c,v 1.19 2015/01/29 20:10:50 deraadt Exp $ */
+/* $OpenBSD: pmap7.c,v 1.20 2015/02/02 09:29:53 mlarkin Exp $ */
/* $NetBSD: pmap.c,v 1.147 2004/01/18 13:03:50 scw Exp $ */
/*
@@ -280,15 +280,6 @@ extern caddr_t msgbufaddr;
boolean_t pmap_initialized;
/*
- * Misc. locking data structures
- */
-
-#define PMAP_MAP_TO_HEAD_LOCK() /* null */
-#define PMAP_MAP_TO_HEAD_UNLOCK() /* null */
-#define PMAP_HEAD_TO_MAP_LOCK() /* null */
-#define PMAP_HEAD_TO_MAP_UNLOCK() /* null */
-
-/*
* Metadata for L1 translation tables.
*/
struct l1_ttable {
@@ -995,17 +986,13 @@ pmap_clearbit(struct vm_page *pg, u_int maskbits)
printf("pmap_clearbit: pg %p (0x%08lx) mask 0x%x\n",
pg, pg->phys_addr, maskbits));
- PMAP_HEAD_TO_MAP_LOCK();
-
/*
* Clear saved attributes (modify, reference)
*/
pg->mdpage.pvh_attrs &= ~(maskbits & (PVF_MOD | PVF_REF));
- if (pg->mdpage.pvh_list == NULL) {
- PMAP_HEAD_TO_MAP_UNLOCK();
+ if (pg->mdpage.pvh_list == NULL)
return;
- }
/*
* If we are changing a writable or modified page to
@@ -1065,8 +1052,6 @@ pmap_clearbit(struct vm_page *pg, u_int maskbits)
printf("pmap_clearbit: pm %p va 0x%lx opte 0x%08x npte 0x%08x\n",
pm, va, opte, npte));
}
-
- PMAP_HEAD_TO_MAP_UNLOCK();
}
/*
@@ -1168,13 +1153,9 @@ pmap_page_remove(struct vm_page *pg)
NPDEBUG(PDB_FOLLOW,
printf("pmap_page_remove: pg %p (0x%08lx)\n", pg, pg->phys_addr));
- PMAP_HEAD_TO_MAP_LOCK();
-
pv = pg->mdpage.pvh_list;
- if (pv == NULL) {
- PMAP_HEAD_TO_MAP_UNLOCK();
+ if (pv == NULL)
return;
- }
flush = FALSE;
flags = 0;
@@ -1236,7 +1217,6 @@ pmap_page_remove(struct vm_page *pg)
pv = npv;
}
pg->mdpage.pvh_list = NULL;
- PMAP_HEAD_TO_MAP_UNLOCK();
if (flush)
cpu_cpwait();
@@ -1308,8 +1288,6 @@ pmap_enter(pmap_t pm, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
if (flags & PMAP_WIRED)
nflags |= PVF_WIRED;
- PMAP_MAP_TO_HEAD_LOCK();
-
/*
* Fetch the L2 bucket which maps this page, allocating one if
* necessary for user pmaps.
@@ -1319,10 +1297,9 @@ pmap_enter(pmap_t pm, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
else
l2b = pmap_alloc_l2_bucket(pm, va);
if (l2b == NULL) {
- if (flags & PMAP_CANFAIL) {
- PMAP_MAP_TO_HEAD_UNLOCK();
+ if (flags & PMAP_CANFAIL)
return (ENOMEM);
- }
+
panic("pmap_enter: failed to allocate L2 bucket");
}
ptep = &l2b->l2b_kva[l2pte_index(va)];
@@ -1422,7 +1399,7 @@ pmap_enter(pmap_t pm, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
if (pm != pmap_kernel())
pmap_free_l2_bucket(pm, l2b, 0);
- PMAP_MAP_TO_HEAD_UNLOCK();
+
NPDEBUG(PDB_ENTER,
printf("pmap_enter: ENOMEM\n"));
return (ENOMEM);
@@ -1510,8 +1487,6 @@ pmap_enter(pmap_t pm, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
if (mapped && (prot & PROT_EXEC) != 0 && pmap_is_current(pm))
cpu_icache_sync_range(va, PAGE_SIZE);
- PMAP_MAP_TO_HEAD_UNLOCK();
-
return (0);
}
@@ -1533,11 +1508,6 @@ pmap_remove(pmap_t pm, vaddr_t sva, vaddr_t eva)
NPDEBUG(PDB_REMOVE, printf("pmap_remove: pmap=%p sva=%08lx eva=%08lx\n",
pm, sva, eva));
- /*
- * we lock in the pmap => pv_head direction
- */
- PMAP_MAP_TO_HEAD_LOCK();
-
while (sva < eva) {
/*
* Do one L2 bucket's worth at a time.
@@ -1621,8 +1591,6 @@ pmap_remove(pmap_t pm, vaddr_t sva, vaddr_t eva)
pmap_free_l2_bucket(pm, l2b, mappings);
}
-
- PMAP_MAP_TO_HEAD_UNLOCK();
}
/*
@@ -1808,8 +1776,6 @@ NPDEBUG(PDB_PROTECT, printf("\n"));
return;
}
- PMAP_MAP_TO_HEAD_LOCK();
-
/*
* OK, at this point, we know we're doing write-protect operation.
*/
@@ -1873,8 +1839,6 @@ NPDEBUG(PDB_PROTECT, printf("\n"));
}
}
- PMAP_MAP_TO_HEAD_UNLOCK();
-
if (flush < 0) {
if (PV_BEEN_EXECD(flags))
pmap_tlb_flushID(pm);
@@ -1972,8 +1936,6 @@ pmap_fault_fixup(pmap_t pm, vaddr_t va, vm_prot_t ftype, int user)
u_int l1idx;
int rv = 0;
- PMAP_MAP_TO_HEAD_LOCK();
-
l1idx = L1_IDX(va);
/*
@@ -2121,8 +2083,6 @@ printf("%s: va %08lx ftype %x %c pte %08x\n", __func__, va, ftype, user ? 'u' :
}
out:
- PMAP_MAP_TO_HEAD_UNLOCK();
-
return (rv);
}
@@ -2173,8 +2133,6 @@ pmap_unwire(pmap_t pm, vaddr_t va)
NPDEBUG(PDB_WIRING, printf("pmap_unwire: pm %p, va 0x%08lx\n", pm, va));
- PMAP_MAP_TO_HEAD_LOCK();
-
l2b = pmap_get_l2_bucket(pm, va);
KDASSERT(l2b != NULL);
@@ -2188,8 +2146,6 @@ pmap_unwire(pmap_t pm, vaddr_t va)
/* Update the wired bit in the pv entry for this page. */
(void) pmap_modify_pv(pg, pm, va, PVF_WIRED, 0);
}
-
- PMAP_MAP_TO_HEAD_UNLOCK();
}
void
diff --git a/sys/arch/i386/i386/pmap.c b/sys/arch/i386/i386/pmap.c
index 1e7957fbee3..0063d5e9cf3 100644
--- a/sys/arch/i386/i386/pmap.c
+++ b/sys/arch/i386/i386/pmap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pmap.c,v 1.167 2015/01/27 02:09:07 mlarkin Exp $ */
+/* $OpenBSD: pmap.c,v 1.168 2015/02/02 09:29:53 mlarkin Exp $ */
/* $NetBSD: pmap.c,v 1.91 2000/06/02 17:46:37 thorpej Exp $ */
/*
@@ -192,16 +192,6 @@
*
*/
-/*
- * locking data structures
- */
-
-#define PMAP_MAP_TO_HEAD_LOCK() /* null */
-#define PMAP_MAP_TO_HEAD_UNLOCK() /* null */
-
-#define PMAP_HEAD_TO_MAP_LOCK() /* null */
-#define PMAP_HEAD_TO_MAP_UNLOCK() /* null */
-
#define PD_MASK 0xffc00000 /* page directory address bits */
#define PT_MASK 0x003ff000 /* page table address bits */
@@ -1920,7 +1910,6 @@ pmap_do_remove(struct pmap *pmap, vaddr_t sva, vaddr_t eva, int flags)
TAILQ_INIT(&empty_ptps);
- PMAP_MAP_TO_HEAD_LOCK();
ptes = pmap_map_ptes(pmap); /* locks pmap */
/*
@@ -1999,7 +1988,6 @@ pmap_do_remove(struct pmap *pmap, vaddr_t sva, vaddr_t eva, int flags)
pmap_tlb_shootwait();
pmap_unmap_ptes(pmap);
- PMAP_MAP_TO_HEAD_UNLOCK();
while ((ptp = TAILQ_FIRST(&empty_ptps)) != NULL) {
TAILQ_REMOVE(&empty_ptps, ptp, pageq);
uvm_pagefree(ptp);
@@ -2025,8 +2013,6 @@ pmap_page_remove(struct vm_page *pg)
TAILQ_INIT(&empty_ptps);
- PMAP_HEAD_TO_MAP_LOCK();
-
for (pve = pg->mdpage.pv_list ; pve != NULL ; pve = pve->pv_next) {
ptes = pmap_map_ptes(pve->pv_pmap); /* locks pmap */
@@ -2067,7 +2053,6 @@ pmap_page_remove(struct vm_page *pg)
}
pmap_free_pvs(NULL, pg->mdpage.pv_list);
pg->mdpage.pv_list = NULL;
- PMAP_HEAD_TO_MAP_UNLOCK();
pmap_tlb_shootwait();
while ((ptp = TAILQ_FIRST(&empty_ptps)) != NULL) {
@@ -2099,7 +2084,6 @@ pmap_test_attrs(struct vm_page *pg, int testbits)
if (pg->pg_flags & testflags)
return (TRUE);
- PMAP_HEAD_TO_MAP_LOCK();
mybits = 0;
for (pve = pg->mdpage.pv_list; pve != NULL && mybits == 0;
pve = pve->pv_next) {
@@ -2108,7 +2092,6 @@ pmap_test_attrs(struct vm_page *pg, int testbits)
pmap_unmap_ptes(pve->pv_pmap);
mybits |= (pte & testbits);
}
- PMAP_HEAD_TO_MAP_UNLOCK();
if (mybits == 0)
return (FALSE);
@@ -2134,8 +2117,6 @@ pmap_clear_attrs(struct vm_page *pg, int clearbits)
clearflags = pmap_pte2flags(clearbits);
- PMAP_HEAD_TO_MAP_LOCK();
-
result = pg->pg_flags & clearflags;
if (result)
atomic_clearbits_int(&pg->pg_flags, clearflags);
@@ -2158,7 +2139,6 @@ pmap_clear_attrs(struct vm_page *pg, int clearbits)
pmap_unmap_ptes(pve->pv_pmap); /* unlocks pmap */
}
- PMAP_HEAD_TO_MAP_UNLOCK();
pmap_tlb_shootwait();
return (result != 0);
@@ -2377,9 +2357,6 @@ pmap_enter(struct pmap *pmap, vaddr_t va, paddr_t pa,
freepve = NULL;
wired_count = resident_count = ptp_count = 0;
- /* get lock */
- PMAP_MAP_TO_HEAD_LOCK();
-
/*
* map in ptes and get a pointer to our PTP (unless we are the kernel)
*/
@@ -2549,7 +2526,6 @@ enter_now:
out:
pmap_unmap_ptes(pmap);
- PMAP_MAP_TO_HEAD_UNLOCK();
if (freepve)
pmap_free_pv(pmap, freepve);
@@ -2649,7 +2625,6 @@ pmap_dump(struct pmap *pmap, vaddr_t sva, vaddr_t eva)
if (eva > VM_MAXUSER_ADDRESS || eva <= sva)
eva = VM_MAXUSER_ADDRESS;
- PMAP_MAP_TO_HEAD_LOCK();
ptes = pmap_map_ptes(pmap); /* locks pmap */
/*
@@ -2676,7 +2651,6 @@ pmap_dump(struct pmap *pmap, vaddr_t sva, vaddr_t eva)
}
}
pmap_unmap_ptes(pmap);
- PMAP_MAP_TO_HEAD_UNLOCK();
}
#endif
diff --git a/sys/arch/i386/i386/pmapae.c b/sys/arch/i386/i386/pmapae.c
index 34f6ad1228d..f0636f758c4 100644
--- a/sys/arch/i386/i386/pmapae.c
+++ b/sys/arch/i386/i386/pmapae.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pmapae.c,v 1.26 2014/12/02 18:13:10 tedu Exp $ */
+/* $OpenBSD: pmapae.c,v 1.27 2015/02/02 09:29:53 mlarkin Exp $ */
/*
* Copyright (c) 2006 Michael Shalayeff
@@ -414,16 +414,6 @@
*
*/
-/*
- * locking data structures
- */
-
-#define PMAP_MAP_TO_HEAD_LOCK() /* null */
-#define PMAP_MAP_TO_HEAD_UNLOCK() /* null */
-
-#define PMAP_HEAD_TO_MAP_LOCK() /* null */
-#define PMAP_HEAD_TO_MAP_UNLOCK() /* null */
-
#define PG_FRAME 0xffffff000ULL /* page frame mask */
#define PG_LGFRAME 0xfffe00000ULL /* large (2M) page frame mask */
@@ -1306,7 +1296,6 @@ pmap_remove_pae(struct pmap *pmap, vaddr_t sva, vaddr_t eva)
TAILQ_INIT(&empty_ptps);
- PMAP_MAP_TO_HEAD_LOCK();
ptes = pmap_map_ptes_pae(pmap); /* locks pmap */
/*
* removing one page? take shortcut function.
@@ -1384,7 +1373,6 @@ pmap_remove_pae(struct pmap *pmap, vaddr_t sva, vaddr_t eva)
}
pmap_tlb_shootnow(cpumask);
pmap_unmap_ptes_pae(pmap); /* unlock pmap */
- PMAP_MAP_TO_HEAD_UNLOCK();
while ((ptp = TAILQ_FIRST(&empty_ptps)) != NULL) {
TAILQ_REMOVE(&empty_ptps, ptp, pageq);
uvm_pagefree(ptp);
@@ -1478,7 +1466,6 @@ pmap_remove_pae(struct pmap *pmap, vaddr_t sva, vaddr_t eva)
pmap_tlb_shootnow(cpumask);
pmap_unmap_ptes_pae(pmap);
- PMAP_MAP_TO_HEAD_UNLOCK();
while ((ptp = TAILQ_FIRST(&empty_ptps)) != NULL) {
TAILQ_REMOVE(&empty_ptps, ptp, pageq);
uvm_pagefree(ptp);
@@ -1517,9 +1504,6 @@ pmap_page_remove_pae(struct vm_page *pg)
TAILQ_INIT(&empty_ptps);
- /* set pv_head => pmap locking */
- PMAP_HEAD_TO_MAP_LOCK();
-
for (pve = pvh->pvh_list ; pve != NULL ; pve = pve->pv_next) {
ptes = pmap_map_ptes_pae(pve->pv_pmap); /* locks pmap */
@@ -1595,7 +1579,6 @@ pmap_page_remove_pae(struct vm_page *pg)
}
pmap_free_pvs(NULL, pvh->pvh_list);
pvh->pvh_list = NULL;
- PMAP_HEAD_TO_MAP_UNLOCK();
pmap_tlb_shootnow(cpumask);
while ((ptp = TAILQ_FIRST(&empty_ptps)) != NULL) {
TAILQ_REMOVE(&empty_ptps, ptp, pageq);
@@ -1648,8 +1631,6 @@ pmap_test_attrs_pae(struct vm_page *pg, int testbits)
}
/* nope, gonna have to do it the hard way */
- PMAP_HEAD_TO_MAP_LOCK();
-
for (pve = pvh->pvh_list; pve != NULL && (*myattrs & testbits) == 0;
pve = pve->pv_next) {
ptes = pmap_map_ptes_pae(pve->pv_pmap);
@@ -1662,7 +1643,6 @@ pmap_test_attrs_pae(struct vm_page *pg, int testbits)
* note that we will exit the for loop with a non-null pve if
* we have found the bits we are testing for.
*/
- PMAP_HEAD_TO_MAP_UNLOCK();
return((*myattrs & testbits) != 0);
}
@@ -1691,7 +1671,6 @@ pmap_change_attrs_pae(struct vm_page *pg, int setbits, int clearbits)
return(FALSE);
}
- PMAP_HEAD_TO_MAP_LOCK();
pvh = &vm_physmem[bank].pmseg.pvhead[off];
myattrs = &vm_physmem[bank].pmseg.attrs[off];
@@ -1718,7 +1697,6 @@ pmap_change_attrs_pae(struct vm_page *pg, int setbits, int clearbits)
pmap_unmap_ptes_pae(pve->pv_pmap); /* unlocks pmap */
}
- PMAP_HEAD_TO_MAP_UNLOCK();
pmap_tlb_shootnow(cpumask);
return(result != 0);
@@ -1900,9 +1878,6 @@ pmap_enter_pae(struct pmap *pmap, vaddr_t va, paddr_t pa, vm_prot_t prot,
panic("pmap_enter: missing kernel PTP!");
#endif
- /* get lock */
- PMAP_MAP_TO_HEAD_LOCK();
-
/*
* map in ptes and get a pointer to our PTP (unless we are the kernel)
*/
@@ -2064,7 +2039,6 @@ enter_now:
out:
pmap_unmap_ptes_pae(pmap);
- PMAP_MAP_TO_HEAD_UNLOCK();
return error;
}
@@ -2168,7 +2142,6 @@ pmap_dump_pae(struct pmap *pmap, vaddr_t sva, vaddr_t eva)
* we lock in the pmap => pv_head direction
*/
- PMAP_MAP_TO_HEAD_LOCK();
ptes = pmap_map_ptes_pae(pmap); /* locks pmap */
/*
@@ -2195,6 +2168,5 @@ pmap_dump_pae(struct pmap *pmap, vaddr_t sva, vaddr_t eva)
}
}
pmap_unmap_ptes_pae(pmap);
- PMAP_MAP_TO_HEAD_UNLOCK();
}
#endif