summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/i386/linux/linux_ptrace.c24
-rw-r--r--sys/kern/sys_process.c3
-rw-r--r--sys/vm/vm_fault.c7
3 files changed, 13 insertions, 21 deletions
diff --git a/sys/i386/linux/linux_ptrace.c b/sys/i386/linux/linux_ptrace.c
index adfe3df..3ead237 100644
--- a/sys/i386/linux/linux_ptrace.c
+++ b/sys/i386/linux/linux_ptrace.c
@@ -222,31 +222,23 @@ struct linux_pt_fpxreg {
static int
linux_proc_read_fpxregs(struct thread *td, struct linux_pt_fpxreg *fpxregs)
{
- int error;
- error = 0;
- mtx_lock_spin(&sched_lock);
+ PROC_LOCK_ASSERT(td->td_proc, MA_OWNED);
if (cpu_fxsr == 0 || (td->td_proc->p_sflag & PS_INMEM) == 0)
- error = EIO;
- else
- bcopy(&td->td_pcb->pcb_save.sv_xmm, fpxregs, sizeof(*fpxregs));
- mtx_unlock_spin(&sched_lock);
- return (error);
+ return (EIO);
+ bcopy(&td->td_pcb->pcb_save.sv_xmm, fpxregs, sizeof(*fpxregs));
+ return (0);
}
static int
linux_proc_write_fpxregs(struct thread *td, struct linux_pt_fpxreg *fpxregs)
{
- int error;
- error = 0;
- mtx_lock_spin(&sched_lock);
+ PROC_LOCK_ASSERT(td->td_proc, MA_OWNED);
if (cpu_fxsr == 0 || (td->td_proc->p_sflag & PS_INMEM) == 0)
- error = EIO;
- else
- bcopy(fpxregs, &td->td_pcb->pcb_save.sv_xmm, sizeof(*fpxregs));
- mtx_unlock_spin(&sched_lock);
- return (error);
+ return (EIO);
+ bcopy(fpxregs, &td->td_pcb->pcb_save.sv_xmm, sizeof(*fpxregs));
+ return (0);
}
#endif
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
index eed2329..b12d8a1 100644
--- a/sys/kern/sys_process.c
+++ b/sys/kern/sys_process.c
@@ -82,12 +82,11 @@
#define PROC_ACTION(action) do { \
int error; \
\
- mtx_lock_spin(&sched_lock); \
+ PROC_LOCK_ASSERT(td->td_proc, MA_OWNED); \
if ((td->td_proc->p_sflag & PS_INMEM) == 0) \
error = EIO; \
else \
error = (action); \
- mtx_unlock_spin(&sched_lock); \
return (error); \
} while(0)
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index d2d7372..d8f2409 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -917,15 +917,16 @@ readrest:
}
vm_page_wakeup(fs.m);
vm_page_unlock_queues();
- mtx_lock_spin(&sched_lock);
- if (curproc && (curproc->p_sflag & PS_INMEM) && curproc->p_stats) {
+
+ PROC_LOCK(curproc);
+ if ((curproc->p_sflag & PS_INMEM) && curproc->p_stats) {
if (hardfault) {
curproc->p_stats->p_ru.ru_majflt++;
} else {
curproc->p_stats->p_ru.ru_minflt++;
}
}
- mtx_unlock_spin(&sched_lock);
+ PROC_UNLOCK(curproc);
/*
* Unlock everything, and return
OpenPOWER on IntegriCloud