summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Mooney <pmooney@pfmooney.com>2017-04-20 19:43:29 +0000
committerPatrick Mooney <pmooney@pfmooney.com>2017-04-24 23:10:10 +0000
commitfbc5848b477b441a7e8f5e25096c81994887cd09 (patch)
treea0fb6d1d5ae1dbcb9835c0a1c0bb2dc36c66d5f5
parent9bca11289f890427fa4f77af8704560636e4c246 (diff)
downloadillumos-joyent-fbc5848b477b441a7e8f5e25096c81994887cd09.tar.gz
OS-6068 cpuset functions should be more strict about input
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com> Approved by: Jerry Jelinek <jerry.jelinek@joyent.com>
-rw-r--r--usr/src/uts/common/os/cpu.c25
-rw-r--r--usr/src/uts/common/sys/cpuvar.h18
2 files changed, 25 insertions, 18 deletions
diff --git a/usr/src/uts/common/os/cpu.c b/usr/src/uts/common/os/cpu.c
index bcf050a6d6..9c7600ea24 100644
--- a/usr/src/uts/common/os/cpu.c
+++ b/usr/src/uts/common/os/cpu.c
@@ -2732,34 +2732,37 @@ cpuset_all(cpuset_t *s)
}
void
-cpuset_all_but(cpuset_t *s, uint_t cpu)
+cpuset_all_but(cpuset_t *s, const uint_t cpu)
{
cpuset_all(s);
CPUSET_DEL(*s, cpu);
}
void
-cpuset_only(cpuset_t *s, uint_t cpu)
+cpuset_only(cpuset_t *s, const uint_t cpu)
{
CPUSET_ZERO(*s);
CPUSET_ADD(*s, cpu);
}
long
-cpu_in_set(cpuset_t *s, uint_t cpu)
+cpu_in_set(cpuset_t *s, const uint_t cpu)
{
+ VERIFY(cpu < NCPU);
return (BT_TEST(s->cpub, cpu));
}
void
-cpuset_add(cpuset_t *s, uint_t cpu)
+cpuset_add(cpuset_t *s, const uint_t cpu)
{
+ VERIFY(cpu < NCPU);
BT_SET(s->cpub, cpu);
}
void
-cpuset_del(cpuset_t *s, uint_t cpu)
+cpuset_del(cpuset_t *s, const uint_t cpu)
{
+ VERIFY(cpu < NCPU);
BT_CLEAR(s->cpub, cpu);
}
@@ -2853,31 +2856,35 @@ cpuset_bounds(cpuset_t *s, uint_t *smallestid, uint_t *largestid)
}
void
-cpuset_atomic_del(cpuset_t *s, uint_t cpu)
+cpuset_atomic_del(cpuset_t *s, const uint_t cpu)
{
+ VERIFY(cpu < NCPU);
BT_ATOMIC_CLEAR(s->cpub, (cpu))
}
void
-cpuset_atomic_add(cpuset_t *s, uint_t cpu)
+cpuset_atomic_add(cpuset_t *s, const uint_t cpu)
{
+ VERIFY(cpu < NCPU);
BT_ATOMIC_SET(s->cpub, (cpu))
}
long
-cpuset_atomic_xadd(cpuset_t *s, uint_t cpu)
+cpuset_atomic_xadd(cpuset_t *s, const uint_t cpu)
{
long res;
+ VERIFY(cpu < NCPU);
BT_ATOMIC_SET_EXCL(s->cpub, cpu, res);
return (res);
}
long
-cpuset_atomic_xdel(cpuset_t *s, uint_t cpu)
+cpuset_atomic_xdel(cpuset_t *s, const uint_t cpu)
{
long res;
+ VERIFY(cpu < NCPU);
BT_ATOMIC_CLEAR_EXCL(s->cpub, cpu, res);
return (res);
}
diff --git a/usr/src/uts/common/sys/cpuvar.h b/usr/src/uts/common/sys/cpuvar.h
index bab0793c2f..eccb12f05f 100644
--- a/usr/src/uts/common/sys/cpuvar.h
+++ b/usr/src/uts/common/sys/cpuvar.h
@@ -424,19 +424,19 @@ extern void cpuset_free(cpuset_t *);
* They are now acceptable to use in non-_MACHDEP code.
*/
extern void cpuset_all(cpuset_t *);
-extern void cpuset_all_but(cpuset_t *, uint_t);
+extern void cpuset_all_but(cpuset_t *, const uint_t);
extern int cpuset_isnull(cpuset_t *);
extern int cpuset_isequal(cpuset_t *, cpuset_t *);
-extern void cpuset_only(cpuset_t *, uint_t);
-extern long cpu_in_set(cpuset_t *, uint_t);
-extern void cpuset_add(cpuset_t *, uint_t);
-extern void cpuset_del(cpuset_t *, uint_t);
+extern void cpuset_only(cpuset_t *, const uint_t);
+extern long cpu_in_set(cpuset_t *, const uint_t);
+extern void cpuset_add(cpuset_t *, const uint_t);
+extern void cpuset_del(cpuset_t *, const uint_t);
extern uint_t cpuset_find(cpuset_t *);
extern void cpuset_bounds(cpuset_t *, uint_t *, uint_t *);
-extern void cpuset_atomic_del(cpuset_t *, uint_t);
-extern void cpuset_atomic_add(cpuset_t *, uint_t);
-extern long cpuset_atomic_xadd(cpuset_t *, uint_t);
-extern long cpuset_atomic_xdel(cpuset_t *, uint_t);
+extern void cpuset_atomic_del(cpuset_t *, const uint_t);
+extern void cpuset_atomic_add(cpuset_t *, const uint_t);
+extern long cpuset_atomic_xadd(cpuset_t *, const uint_t);
+extern long cpuset_atomic_xdel(cpuset_t *, const uint_t);
extern void cpuset_or(cpuset_t *, cpuset_t *);
extern void cpuset_xor(cpuset_t *, cpuset_t *);
extern void cpuset_and(cpuset_t *, cpuset_t *);