diff options
author | 2015-02-02 09:29:53 +0000 | |
---|---|---|
committer | 2015-02-02 09:29:53 +0000 | |
commit | 0045b270cb3e756a639f570bd940523e173f60fe (patch) | |
tree | 2dda5a627fa965fe41caa9b0b4f20a8128ddd856 | |
parent | replace the wireless scan example with one showing how to select monitor (diff) | |
download | wireguard-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.c | 40 | ||||
-rw-r--r-- | sys/arch/amd64/amd64/pmap.c | 28 | ||||
-rw-r--r-- | sys/arch/arm/arm/pmap.c | 57 | ||||
-rw-r--r-- | sys/arch/arm/arm/pmap7.c | 56 | ||||
-rw-r--r-- | sys/arch/i386/i386/pmap.c | 28 | ||||
-rw-r--r-- | sys/arch/i386/i386/pmapae.c | 30 |
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 |