summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGangadhar Mylapuram <Gangadhar.M@Sun.COM>2009-03-23 22:10:33 -0700
committerGangadhar Mylapuram <Gangadhar.M@Sun.COM>2009-03-23 22:10:33 -0700
commit438076eb789b90b4483862b49c4b9c62ba84ed6a (patch)
tree2d0d62da810cfcf68e699a53630164a01c8fdb7a
parent78323854f26c30110c6477875241b76265792c09 (diff)
downloadillumos-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.c18
-rw-r--r--usr/src/uts/common/syscall/pset.c19
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,