diff options
author | jhb <jhb@FreeBSD.org> | 2001-05-30 00:03:13 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2001-05-30 00:03:13 +0000 |
commit | a877c444cf4044f3eb0fce75058090c542c860b3 (patch) | |
tree | 249049dd5bcd66d05dba6a8be770f729429d31c7 | |
parent | 9a8e4d5a40df92a0552773e90586c5dc762abd1f (diff) | |
download | FreeBSD-src-a877c444cf4044f3eb0fce75058090c542c860b3.zip FreeBSD-src-a877c444cf4044f3eb0fce75058090c542c860b3.tar.gz |
- Catch up to the VM mutex changes.
- Sort includes in a few places.
-rw-r--r-- | sys/ia64/ia64/busdma_machdep.c | 1 | ||||
-rw-r--r-- | sys/ia64/ia64/machdep.c | 2 | ||||
-rw-r--r-- | sys/ia64/ia64/mem.c | 16 | ||||
-rw-r--r-- | sys/ia64/ia64/pmap.c | 15 | ||||
-rw-r--r-- | sys/ia64/ia64/ssc.c | 13 | ||||
-rw-r--r-- | sys/ia64/ia64/sscdisk.c | 7 | ||||
-rw-r--r-- | sys/ia64/ia64/trap.c | 7 | ||||
-rw-r--r-- | sys/ia64/ia64/vm_machdep.c | 34 |
8 files changed, 51 insertions, 44 deletions
diff --git a/sys/ia64/ia64/busdma_machdep.c b/sys/ia64/ia64/busdma_machdep.c index 794e331..2d021fd 100644 --- a/sys/ia64/ia64/busdma_machdep.c +++ b/sys/ia64/ia64/busdma_machdep.c @@ -29,6 +29,7 @@ #include <sys/param.h> #include <sys/systm.h> #include <sys/malloc.h> +#include <sys/mutex.h> #include <sys/bus.h> #include <sys/interrupt.h> diff --git a/sys/ia64/ia64/machdep.c b/sys/ia64/ia64/machdep.c index 9dae762..d2325f3 100644 --- a/sys/ia64/ia64/machdep.c +++ b/sys/ia64/ia64/machdep.c @@ -177,6 +177,7 @@ cpu_startup(dummy) /* * Good {morning,afternoon,evening,night}. */ + mtx_lock(&vm_mtx); identifycpu(); /* startrtclock(); */ @@ -300,6 +301,7 @@ again: &maxaddr, mb_map_size); mb_map->system_map = 1; } + mtx_unlock(&vm_mtx); /* * Initialize callouts diff --git a/sys/ia64/ia64/mem.c b/sys/ia64/ia64/mem.c index 15433f9..6aed40d 100644 --- a/sys/ia64/ia64/mem.c +++ b/sys/ia64/ia64/mem.c @@ -49,12 +49,14 @@ #include <sys/conf.h> #include <sys/fcntl.h> #include <sys/kernel.h> +#include <sys/lock.h> #include <sys/malloc.h> #include <sys/memrange.h> -#include <sys/proc.h> #include <sys/msgbuf.h> -#include <sys/systm.h> +#include <sys/mutex.h> +#include <sys/proc.h> #include <sys/signalvar.h> +#include <sys/systm.h> #include <sys/uio.h> #include <machine/frame.h> @@ -187,13 +189,19 @@ kmemphys: */ addr = trunc_page(v); eaddr = round_page(v + c); + mtx_lock(&vm_mtx); for (; addr < eaddr; addr += PAGE_SIZE) - if (pmap_extract(kernel_pmap, addr) == 0) + if (pmap_extract(kernel_pmap, addr) == 0) { + mtx_unlock(&vm_mtx); return EFAULT; + } if (!kernacc((caddr_t)v, c, uio->uio_rw == UIO_READ ? - VM_PROT_READ : VM_PROT_WRITE)) + VM_PROT_READ : VM_PROT_WRITE)) { + mtx_unlock(&vm_mtx); return (EFAULT); + } + mtx_unlock(&vm_mtx); error = uiomove((caddr_t)v, c, uio); } diff --git a/sys/ia64/ia64/pmap.c b/sys/ia64/ia64/pmap.c index 8b24788..a9619df 100644 --- a/sys/ia64/ia64/pmap.c +++ b/sys/ia64/ia64/pmap.c @@ -94,18 +94,19 @@ */ #include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/msgbuf.h> -#include <sys/vmmeter.h> -#include <sys/mman.h> -#include <sys/malloc.h> #include <sys/kernel.h> +#include <sys/lock.h> +#include <sys/malloc.h> +#include <sys/mman.h> +#include <sys/msgbuf.h> +#include <sys/mutex.h> +#include <sys/proc.h> #include <sys/sx.h> +#include <sys/systm.h> +#include <sys/vmmeter.h> #include <vm/vm.h> #include <vm/vm_param.h> -#include <sys/lock.h> #include <vm/vm_kern.h> #include <vm/vm_page.h> #include <vm/vm_map.h> diff --git a/sys/ia64/ia64/ssc.c b/sys/ia64/ia64/ssc.c index 6fc59a8..ecc593e 100644 --- a/sys/ia64/ia64/ssc.c +++ b/sys/ia64/ia64/ssc.c @@ -26,18 +26,19 @@ * $FreeBSD$ */ #include <sys/param.h> -#include <sys/kernel.h> -#include <sys/systm.h> -#include <sys/module.h> #include <sys/bus.h> #include <sys/conf.h> -#include <sys/tty.h> -#include <sys/proc.h> #include <sys/cons.h> +#include <sys/kernel.h> +#include <sys/lock.h> +#include <sys/module.h> +#include <sys/mutex.h> +#include <sys/proc.h> +#include <sys/systm.h> +#include <sys/tty.h> #include <vm/vm.h> #include <vm/vm_param.h> -#include <sys/lock.h> #include <vm/vm_kern.h> #include <vm/vm_page.h> #include <vm/vm_map.h> diff --git a/sys/ia64/ia64/sscdisk.c b/sys/ia64/ia64/sscdisk.c index e58f412..7ce911a 100644 --- a/sys/ia64/ia64/sscdisk.c +++ b/sys/ia64/ia64/sscdisk.c @@ -21,11 +21,12 @@ #include <sys/devicestat.h> #include <sys/disk.h> #include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/sysctl.h> #include <sys/linker.h> -#include <sys/queue.h> #include <sys/lock.h> +#include <sys/malloc.h> +#include <sys/mutex.h> +#include <sys/queue.h> +#include <sys/sysctl.h> #include <vm/vm.h> #include <vm/vm_kern.h> #include <vm/vm_page.h> diff --git a/sys/ia64/ia64/trap.c b/sys/ia64/ia64/trap.c index 3582dd2..5b9e9d2 100644 --- a/sys/ia64/ia64/trap.c +++ b/sys/ia64/ia64/trap.c @@ -318,7 +318,6 @@ trap(int vector, int imm, struct trapframe *framep) vm_prot_t ftype = 0; int rv; - mtx_lock(&Giant); /* * If it was caused by fuswintr or suswintr, * just punt. Note that we check the faulting @@ -333,7 +332,6 @@ trap(int vector, int imm, struct trapframe *framep) p->p_addr->u_pcb.pcb_accessaddr == va) { framep->tf_cr_iip = p->p_addr->u_pcb.pcb_onfault; p->p_addr->u_pcb.pcb_onfault = 0; - mtx_unlock(&Giant); goto out; } @@ -435,12 +433,9 @@ trap(int vector, int imm, struct trapframe *framep) } else if (rv == KERN_PROTECTION_FAILURE) rv = KERN_INVALID_ADDRESS; } - if (rv == KERN_SUCCESS) { - mtx_unlock(&Giant); + if (rv == KERN_SUCCESS) goto out; - } - mtx_unlock(&Giant); ucode = va; i = SIGSEGV; #ifdef DEBUG diff --git a/sys/ia64/ia64/vm_machdep.c b/sys/ia64/ia64/vm_machdep.c index dbe5336..f4bd000 100644 --- a/sys/ia64/ia64/vm_machdep.c +++ b/sys/ia64/ia64/vm_machdep.c @@ -315,11 +315,14 @@ void cpu_wait(p) struct proc *p; { + + mtx_lock(&vm_mtx); /* drop per-process resources */ pmap_dispose_proc(p); /* and clean-out the vmspace */ vmspace_free(p->p_vmspace); + mtx_unlock(&vm_mtx); } /* @@ -371,6 +374,7 @@ vmapbuf(bp) if ((bp->b_flags & B_PHYS) == 0) panic("vmapbuf"); + mtx_lock(&vm_mtx); for (v = bp->b_saveaddr, addr = (caddr_t)trunc_page(bp->b_data); addr < bp->b_data + bp->b_bufsize; addr += PAGE_SIZE, v += PAGE_SIZE) { @@ -386,6 +390,7 @@ vmapbuf(bp) vm_page_hold(PHYS_TO_VM_PAGE(pa)); pmap_kenter((vm_offset_t) v, pa); } + mtx_unlock(&vm_mtx); kva = bp->b_saveaddr; bp->b_saveaddr = bp->b_data; @@ -406,6 +411,7 @@ vunmapbuf(bp) if ((bp->b_flags & B_PHYS) == 0) panic("vunmapbuf"); + mtx_lock(&vm_mtx); for (addr = (caddr_t)trunc_page(bp->b_data); addr < bp->b_data + bp->b_bufsize; addr += PAGE_SIZE) { @@ -413,6 +419,7 @@ vunmapbuf(bp) pmap_kremove((vm_offset_t) addr); vm_page_unhold(PHYS_TO_VM_PAGE(pa)); } + mtx_unlock(&vm_mtx); bp->b_data = bp->b_saveaddr; } @@ -470,14 +477,17 @@ vm_page_zero_idle() * pages because doing so may flush our L1 and L2 caches too much. */ - if (zero_state && vm_page_zero_count >= ZIDLE_LO(cnt.v_free_count)) + if (mtx_trylock(&vm_mtx) == 0) + return (0); + if (zero_state && vm_page_zero_count >= ZIDLE_LO(cnt.v_free_count)) { + mtx_unlock(&vm_mtx); return(0); - if (vm_page_zero_count >= ZIDLE_HI(cnt.v_free_count)) + } + if (vm_page_zero_count >= ZIDLE_HI(cnt.v_free_count)) { + mtx_unlock(&vm_mtx); return(0); + } -#ifdef SMP - if (try_mplock()) { -#endif s = splvm(); m = vm_page_list_find(PQ_FREE, free_rover, FALSE); zero_state = 0; @@ -486,13 +496,7 @@ vm_page_zero_idle() TAILQ_REMOVE(&vm_page_queues[m->queue].pl, m, pageq); m->queue = PQ_NONE; splx(s); -#if 0 - rel_mplock(); -#endif pmap_zero_page(VM_PAGE_TO_PHYS(m)); -#if 0 - get_mplock(); -#endif (void)splvm(); vm_page_flag_set(m, PG_ZERO); m->queue = PQ_FREE + m->pc; @@ -506,14 +510,8 @@ vm_page_zero_idle() } free_rover = (free_rover + PQ_PRIME2) & PQ_L2_MASK; splx(s); -#ifdef SMP - rel_mplock(); -#endif + mtx_unlock(&vm_mtx); return (1); -#ifdef SMP - } -#endif - return (0); } /* |