Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F136981279
D9383.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D9383.diff
View Options
Index: head/sys/compat/freebsd32/freebsd32_misc.c
===================================================================
--- head/sys/compat/freebsd32/freebsd32_misc.c
+++ head/sys/compat/freebsd32/freebsd32_misc.c
@@ -2554,30 +2554,18 @@
freebsd32_cpuset_getaffinity(struct thread *td,
struct freebsd32_cpuset_getaffinity_args *uap)
{
- struct cpuset_getaffinity_args ap;
- ap.level = uap->level;
- ap.which = uap->which;
- ap.id = PAIR32TO64(id_t,uap->id);
- ap.cpusetsize = uap->cpusetsize;
- ap.mask = uap->mask;
-
- return (sys_cpuset_getaffinity(td, &ap));
+ return (kern_cpuset_getaffinity(td, uap->level, uap->which,
+ PAIR32TO64(id_t,uap->id), uap->cpusetsize, uap->mask));
}
int
freebsd32_cpuset_setaffinity(struct thread *td,
struct freebsd32_cpuset_setaffinity_args *uap)
{
- struct cpuset_setaffinity_args ap;
-
- ap.level = uap->level;
- ap.which = uap->which;
- ap.id = PAIR32TO64(id_t,uap->id);
- ap.cpusetsize = uap->cpusetsize;
- ap.mask = uap->mask;
- return (sys_cpuset_setaffinity(td, &ap));
+ return (kern_cpuset_setaffinity(td, uap->level, uap->which,
+ PAIR32TO64(id_t,uap->id), uap->cpusetsize, uap->mask));
}
int
Index: head/sys/compat/linux/linux_misc.c
===================================================================
--- head/sys/compat/linux/linux_misc.c
+++ head/sys/compat/linux/linux_misc.c
@@ -2102,7 +2102,6 @@
{
int error;
struct thread *tdt;
- struct cpuset_getaffinity_args cga;
#ifdef DEBUG
if (ldebug(sched_getaffinity))
@@ -2117,13 +2116,10 @@
return (ESRCH);
PROC_UNLOCK(tdt->td_proc);
- cga.level = CPU_LEVEL_WHICH;
- cga.which = CPU_WHICH_TID;
- cga.id = tdt->td_tid;
- cga.cpusetsize = sizeof(cpuset_t);
- cga.mask = (cpuset_t *) args->user_mask_ptr;
- if ((error = sys_cpuset_getaffinity(td, &cga)) == 0)
+ error = kern_cpuset_getaffinity(td, CPU_LEVEL_WHICH, CPU_WHICH_TID,
+ tdt->td_tid, sizeof(cpuset_t), (cpuset_t *)args->user_mask_ptr);
+ if (error == 0)
td->td_retval[0] = sizeof(cpuset_t);
return (error);
@@ -2136,7 +2132,6 @@
linux_sched_setaffinity(struct thread *td,
struct linux_sched_setaffinity_args *args)
{
- struct cpuset_setaffinity_args csa;
struct thread *tdt;
#ifdef DEBUG
@@ -2152,13 +2147,9 @@
return (ESRCH);
PROC_UNLOCK(tdt->td_proc);
- csa.level = CPU_LEVEL_WHICH;
- csa.which = CPU_WHICH_TID;
- csa.id = tdt->td_tid;
- csa.cpusetsize = sizeof(cpuset_t);
- csa.mask = (cpuset_t *) args->user_mask_ptr;
- return (sys_cpuset_setaffinity(td, &csa));
+ return (kern_cpuset_setaffinity(td, CPU_LEVEL_WHICH, CPU_WHICH_TID,
+ tdt->td_tid, sizeof(cpuset_t), (cpuset_t *) args->user_mask_ptr));
}
struct linux_rlimit64 {
Index: head/sys/kern/kern_cpuset.c
===================================================================
--- head/sys/kern/kern_cpuset.c
+++ head/sys/kern/kern_cpuset.c
@@ -1078,6 +1078,15 @@
int
sys_cpuset_getaffinity(struct thread *td, struct cpuset_getaffinity_args *uap)
{
+
+ return (kern_cpuset_getaffinity(td, uap->level, uap->which,
+ uap->id, uap->cpusetsize, uap->mask));
+}
+
+int
+kern_cpuset_getaffinity(struct thread *td, cpulevel_t level, cpuwhich_t which,
+ id_t id, size_t cpusetsize, cpuset_t *maskp)
+{
struct thread *ttd;
struct cpuset *nset;
struct cpuset *set;
@@ -1086,18 +1095,17 @@
int error;
size_t size;
- if (uap->cpusetsize < sizeof(cpuset_t) ||
- uap->cpusetsize > CPU_MAXSIZE / NBBY)
+ if (cpusetsize < sizeof(cpuset_t) || cpusetsize > CPU_MAXSIZE / NBBY)
return (ERANGE);
- size = uap->cpusetsize;
+ size = cpusetsize;
mask = malloc(size, M_TEMP, M_WAITOK | M_ZERO);
- error = cpuset_which(uap->which, uap->id, &p, &ttd, &set);
+ error = cpuset_which(which, id, &p, &ttd, &set);
if (error)
goto out;
- switch (uap->level) {
+ switch (level) {
case CPU_LEVEL_ROOT:
case CPU_LEVEL_CPUSET:
- switch (uap->which) {
+ switch (which) {
case CPU_WHICH_TID:
case CPU_WHICH_PID:
thread_lock(ttd);
@@ -1112,7 +1120,7 @@
error = EINVAL;
goto out;
}
- if (uap->level == CPU_LEVEL_ROOT)
+ if (level == CPU_LEVEL_ROOT)
nset = cpuset_refroot(set);
else
nset = cpuset_refbase(set);
@@ -1120,7 +1128,7 @@
cpuset_rel(nset);
break;
case CPU_LEVEL_WHICH:
- switch (uap->which) {
+ switch (which) {
case CPU_WHICH_TID:
thread_lock(ttd);
CPU_COPY(&ttd->td_cpuset->cs_mask, mask);
@@ -1138,13 +1146,13 @@
CPU_COPY(&set->cs_mask, mask);
break;
case CPU_WHICH_IRQ:
- error = intr_getaffinity(uap->id, mask);
+ error = intr_getaffinity(id, mask);
break;
case CPU_WHICH_DOMAIN:
- if (uap->id < 0 || uap->id >= MAXMEMDOM)
+ if (id < 0 || id >= MAXMEMDOM)
error = ESRCH;
else
- CPU_COPY(&cpuset_domain[uap->id], mask);
+ CPU_COPY(&cpuset_domain[id], mask);
break;
}
break;
@@ -1157,7 +1165,7 @@
if (p)
PROC_UNLOCK(p);
if (error == 0)
- error = copyout(mask, uap->mask, size);
+ error = copyout(mask, maskp, size);
out:
free(mask, M_TEMP);
return (error);
@@ -1175,6 +1183,15 @@
int
sys_cpuset_setaffinity(struct thread *td, struct cpuset_setaffinity_args *uap)
{
+
+ return (kern_cpuset_setaffinity(td, uap->level, uap->which,
+ uap->id, uap->cpusetsize, uap->mask));
+}
+
+int
+kern_cpuset_setaffinity(struct thread *td, cpulevel_t level, cpuwhich_t which,
+ id_t id, size_t cpusetsize, const cpuset_t *maskp)
+{
struct cpuset *nset;
struct cpuset *set;
struct thread *ttd;
@@ -1182,22 +1199,21 @@
cpuset_t *mask;
int error;
- if (uap->cpusetsize < sizeof(cpuset_t) ||
- uap->cpusetsize > CPU_MAXSIZE / NBBY)
+ if (cpusetsize < sizeof(cpuset_t) || cpusetsize > CPU_MAXSIZE / NBBY)
return (ERANGE);
- mask = malloc(uap->cpusetsize, M_TEMP, M_WAITOK | M_ZERO);
- error = copyin(uap->mask, mask, uap->cpusetsize);
+ mask = malloc(cpusetsize, M_TEMP, M_WAITOK | M_ZERO);
+ error = copyin(maskp, mask, cpusetsize);
if (error)
goto out;
/*
* Verify that no high bits are set.
*/
- if (uap->cpusetsize > sizeof(cpuset_t)) {
+ if (cpusetsize > sizeof(cpuset_t)) {
char *end;
char *cp;
end = cp = (char *)&mask->__bits;
- end += uap->cpusetsize;
+ end += cpusetsize;
cp += sizeof(cpuset_t);
while (cp != end)
if (*cp++ != 0) {
@@ -1206,13 +1222,13 @@
}
}
- switch (uap->level) {
+ switch (level) {
case CPU_LEVEL_ROOT:
case CPU_LEVEL_CPUSET:
- error = cpuset_which(uap->which, uap->id, &p, &ttd, &set);
+ error = cpuset_which(which, id, &p, &ttd, &set);
if (error)
break;
- switch (uap->which) {
+ switch (which) {
case CPU_WHICH_TID:
case CPU_WHICH_PID:
thread_lock(ttd);
@@ -1228,7 +1244,7 @@
error = EINVAL;
goto out;
}
- if (uap->level == CPU_LEVEL_ROOT)
+ if (level == CPU_LEVEL_ROOT)
nset = cpuset_refroot(set);
else
nset = cpuset_refbase(set);
@@ -1237,24 +1253,23 @@
cpuset_rel(set);
break;
case CPU_LEVEL_WHICH:
- switch (uap->which) {
+ switch (which) {
case CPU_WHICH_TID:
- error = cpuset_setthread(uap->id, mask);
+ error = cpuset_setthread(id, mask);
break;
case CPU_WHICH_PID:
- error = cpuset_setproc(uap->id, NULL, mask);
+ error = cpuset_setproc(id, NULL, mask);
break;
case CPU_WHICH_CPUSET:
case CPU_WHICH_JAIL:
- error = cpuset_which(uap->which, uap->id, &p,
- &ttd, &set);
+ error = cpuset_which(which, id, &p, &ttd, &set);
if (error == 0) {
error = cpuset_modify(set, mask);
cpuset_rel(set);
}
break;
case CPU_WHICH_IRQ:
- error = intr_setaffinity(uap->id, mask);
+ error = intr_setaffinity(id, mask);
break;
default:
error = EINVAL;
Index: head/sys/sys/syscallsubr.h
===================================================================
--- head/sys/sys/syscallsubr.h
+++ head/sys/sys/syscallsubr.h
@@ -33,6 +33,7 @@
#include <sys/socket.h>
#include <sys/mac.h>
#include <sys/mount.h>
+#include <sys/_cpuset.h>
struct file;
struct filecaps;
@@ -86,6 +87,11 @@
int kern_close(struct thread *td, int fd);
int kern_connectat(struct thread *td, int dirfd, int fd,
struct sockaddr *sa);
+int kern_cpuset_getaffinity(struct thread *td, cpulevel_t level,
+ cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *maskp);
+int kern_cpuset_setaffinity(struct thread *td, cpulevel_t level,
+ cpuwhich_t which, id_t id, size_t cpusetsize,
+ const cpuset_t *maskp);
int kern_cpuset_getid(struct thread *td, cpulevel_t level,
cpuwhich_t which, id_t id, cpusetid_t *setid);
int kern_cpuset_setid(struct thread *td, cpuwhich_t which,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Nov 21, 9:56 PM (3 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25809278
Default Alt Text
D9383.diff (8 KB)
Attached To
Mode
D9383: Add kern_cpuset_getaffinity() and kern_cpuset_getaffinity().
Attached
Detach File
Event Timeline
Log In to Comment