summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/i386/procfs_machdep.c68
1 files changed, 19 insertions, 49 deletions
diff --git a/sys/i386/i386/procfs_machdep.c b/sys/i386/i386/procfs_machdep.c
index ae285c9a..44a5564 100644
--- a/sys/i386/i386/procfs_machdep.c
+++ b/sys/i386/i386/procfs_machdep.c
@@ -83,19 +83,25 @@
#include <vm/pmap.h>
#include <vm/vm_map.h>
+#define PROCFS_ACTION(action) do { \
+ int error; \
+ \
+ mtx_lock_spin(&sched_lock); \
+ if ((p->p_sflag & PS_INMEM) == 0) \
+ error = EIO; \
+ else \
+ error = (action); \
+ mtx_unlock_spin(&sched_lock); \
+ return (error); \
+} while(0)
+
int
procfs_read_regs(p, regs)
struct proc *p;
struct reg *regs;
{
- mtx_lock_spin(&sched_lock);
- if ((p->p_sflag & PS_INMEM) == 0) {
- mtx_unlock_spin(&sched_lock);
- return (EIO);
- }
- mtx_unlock_spin(&sched_lock);
- return (fill_regs(p, regs));
+ PROCFS_ACTION(fill_regs(p, regs));
}
int
@@ -104,13 +110,7 @@ procfs_write_regs(p, regs)
struct reg *regs;
{
- mtx_lock_spin(&sched_lock);
- if ((p->p_sflag & PS_INMEM) == 0) {
- mtx_unlock_spin(&sched_lock);
- return (EIO);
- }
- mtx_unlock_spin(&sched_lock);
- return (set_regs(p, regs));
+ PROCFS_ACTION(set_regs(p, regs));
}
int
@@ -119,13 +119,7 @@ procfs_read_dbregs(p, dbregs)
struct dbreg *dbregs;
{
- mtx_lock_spin(&sched_lock);
- if ((p->p_sflag & PS_INMEM) == 0) {
- mtx_unlock_spin(&sched_lock);
- return (EIO);
- }
- mtx_unlock_spin(&sched_lock);
- return (fill_dbregs(p, dbregs));
+ PROCFS_ACTION(fill_dbregs(p, dbregs));
}
int
@@ -134,13 +128,7 @@ procfs_write_dbregs(p, dbregs)
struct dbreg *dbregs;
{
- mtx_lock_spin(&sched_lock);
- if ((p->p_sflag & PS_INMEM) == 0) {
- mtx_unlock_spin(&sched_lock);
- return (EIO);
- }
- mtx_unlock_spin(&sched_lock);
- return (set_dbregs(p, dbregs));
+ PROCFS_ACTION(set_dbregs(p, dbregs));
}
/*
@@ -154,13 +142,7 @@ procfs_read_fpregs(p, fpregs)
struct fpreg *fpregs;
{
- mtx_lock_spin(&sched_lock);
- if ((p->p_sflag & PS_INMEM) == 0) {
- mtx_unlock_spin(&sched_lock);
- return (EIO);
- }
- mtx_unlock_spin(&sched_lock);
- return (fill_fpregs(p, fpregs));
+ PROCFS_ACTION(fill_fpregs(p, fpregs));
}
int
@@ -169,13 +151,7 @@ procfs_write_fpregs(p, fpregs)
struct fpreg *fpregs;
{
- mtx_lock_spin(&sched_lock);
- if ((p->p_sflag & PS_INMEM) == 0) {
- mtx_unlock_spin(&sched_lock);
- return (EIO);
- }
- mtx_unlock_spin(&sched_lock);
- return (set_fpregs(p, fpregs));
+ PROCFS_ACTION(set_fpregs(p, fpregs));
}
int
@@ -183,11 +159,5 @@ procfs_sstep(p)
struct proc *p;
{
- mtx_lock_spin(&sched_lock);
- if ((p->p_sflag & PS_INMEM) == 0) {
- mtx_unlock_spin(&sched_lock);
- return (EIO);
- }
- mtx_unlock_spin(&sched_lock);
- return (ptrace_single_step(p));
+ PROCFS_ACTION(ptrace_single_step(p));
}
OpenPOWER on IntegriCloud