diff options
author | Gangadhar Mylapuram <Gangadhar.M@Sun.COM> | 2009-03-23 22:10:33 -0700 |
---|---|---|
committer | Gangadhar Mylapuram <Gangadhar.M@Sun.COM> | 2009-03-23 22:10:33 -0700 |
commit | 438076eb789b90b4483862b49c4b9c62ba84ed6a (patch) | |
tree | 2d0d62da810cfcf68e699a53630164a01c8fdb7a | |
parent | 78323854f26c30110c6477875241b76265792c09 (diff) | |
download | illumos-joyent-438076eb789b90b4483862b49c4b9c62ba84ed6a.tar.gz |
6618447 processor_bind(2) returned EPERM when binding bind an active non-global zone to a processor.
6791277 psrset gives wrong message when run on system processes
-rw-r--r-- | usr/src/uts/common/syscall/processor_bind.c | 18 | ||||
-rw-r--r-- | usr/src/uts/common/syscall/pset.c | 19 |
2 files changed, 19 insertions, 18 deletions
diff --git a/usr/src/uts/common/syscall/processor_bind.c b/usr/src/uts/common/syscall/processor_bind.c index 7ff855a86b..034afd05c6 100644 --- a/usr/src/uts/common/syscall/processor_bind.c +++ b/usr/src/uts/common/syscall/processor_bind.c @@ -19,12 +19,10 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include <sys/types.h> #include <sys/param.h> #include <sys/var.h> @@ -61,7 +59,7 @@ cpu_bind_process(proc_t *pp, processorid_t bind, processorid_t *obind, /* skip kernel processes */ if (pp->p_flag & SSYS) { *obind = PBIND_NONE; - *error = EPERM; + *error = ENOTSUP; return (0); } @@ -97,9 +95,11 @@ cpu_bind_task(task_t *tk, processorid_t bind, processorid_t *obind, return (ESRCH); do { - i = cpu_bind_process(p, bind, obind, error); - if (err == 0) - err = i; + if (!(p->p_flag & SSYS)) { + i = cpu_bind_process(p, bind, obind, error); + if (err == 0) + err = i; + } } while ((p = p->p_tasknext) != tk->tk_memb_list); return (err); @@ -121,7 +121,7 @@ cpu_bind_project(kproject_t *kpj, processorid_t bind, processorid_t *obind, for (p = practive; p != NULL; p = p->p_next) { if (p->p_tlist == NULL) continue; - if (p->p_task->tk_proj == kpj) { + if (p->p_task->tk_proj == kpj && !(p->p_flag & SSYS)) { i = cpu_bind_process(p, bind, obind, error); if (err == 0) err = i; @@ -146,7 +146,7 @@ cpu_bind_zone(zone_t *zptr, processorid_t bind, processorid_t *obind, for (p = practive; p != NULL; p = p->p_next) { if (p->p_tlist == NULL) continue; - if (p->p_zone == zptr) { + if (p->p_zone == zptr && !(p->p_flag & SSYS)) { i = cpu_bind_process(p, bind, obind, error); if (err == 0) err = i; diff --git a/usr/src/uts/common/syscall/pset.c b/usr/src/uts/common/syscall/pset.c index b0427e009e..4c1aef27c5 100644 --- a/usr/src/uts/common/syscall/pset.c +++ b/usr/src/uts/common/syscall/pset.c @@ -19,12 +19,10 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include <sys/types.h> #include <sys/systm.h> #include <sys/cmn_err.h> @@ -307,7 +305,7 @@ pset_bind_process(proc_t *pp, psetid_t pset, psetid_t *oldpset, void *projbuf, /* skip kernel processes */ if ((pset != PS_QUERY) && pp->p_flag & SSYS) { *oldpset = PS_NONE; - return (0); + return (ENOTSUP); } mutex_enter(&pp->p_lock); @@ -344,9 +342,12 @@ pset_bind_task(task_t *tk, psetid_t pset, psetid_t *oldpset, void *projbuf, do { int rval; - rval = pset_bind_process(pp, pset, oldpset, projbuf, zonebuf); - if (error == 0) - error = rval; + if (!(pp->p_flag & SSYS)) { + rval = pset_bind_process(pp, pset, oldpset, projbuf, + zonebuf); + if (error == 0) + error = rval; + } } while ((pp = pp->p_tasknext) != tk->tk_memb_list); return (error); @@ -364,7 +365,7 @@ pset_bind_project(kproject_t *kpj, psetid_t pset, psetid_t *oldpset, for (pp = practive; pp != NULL; pp = pp->p_next) { if (pp->p_tlist == NULL) continue; - if (pp->p_task->tk_proj == kpj) { + if (pp->p_task->tk_proj == kpj && !(pp->p_flag & SSYS)) { int rval; rval = pset_bind_process(pp, pset, oldpset, projbuf, @@ -387,7 +388,7 @@ pset_bind_zone(zone_t *zptr, psetid_t pset, psetid_t *oldpset, void *projbuf, ASSERT(MUTEX_HELD(&pidlock)); for (pp = practive; pp != NULL; pp = pp->p_next) { - if (pp->p_zone == zptr) { + if (pp->p_zone == zptr && !(pp->p_flag & SSYS)) { int rval; rval = pset_bind_process(pp, pset, oldpset, projbuf, |