Page MenuHomeFreeBSD

D1036.id2665.diff
No OneTemporary

D1036.id2665.diff

Index: sys/amd64/linux32/syscalls.master
===================================================================
--- sys/amd64/linux32/syscalls.master
+++ sys/amd64/linux32/syscalls.master
@@ -267,10 +267,10 @@
151 AUE_MUNLOCK NOPROTO { int munlock(const void *addr, size_t len); }
152 AUE_MLOCKALL NOPROTO { int mlockall(int how); }
153 AUE_MUNLOCKALL NOPROTO { int munlockall(void); }
-154 AUE_SCHED_SETPARAM NOPROTO { int sched_setparam(pid_t pid, \
- const struct sched_param *param); }
-155 AUE_SCHED_GETPARAM NOPROTO { int sched_getparam(pid_t pid, \
- struct sched_param *param); }
+154 AUE_SCHED_SETPARAM STD { int linux_sched_setparam(l_pid_t pid, \
+ struct l_sched_param *param); }
+155 AUE_SCHED_GETPARAM STD { int linux_sched_getparam(l_pid_t pid, \
+ struct l_sched_param *param); }
156 AUE_SCHED_SETSCHEDULER STD { int linux_sched_setscheduler( \
l_pid_t pid, l_int policy, \
struct l_sched_param *param); }
Index: sys/compat/linux/linux_misc.c
===================================================================
--- sys/compat/linux/linux_misc.c
+++ sys/compat/linux/linux_misc.c
@@ -1873,6 +1873,73 @@
return (error);
}
+int
+linux_sched_setparam(struct thread *td,
+ struct linux_sched_setparam_args *uap)
+{
+ struct sched_param sched_param;
+ struct thread *tdt;
+ struct proc *p;
+ int error;
+
+#ifdef DEBUG
+ if (ldebug(sched_setparam))
+ printf(ARGS(sched_setparam, "%d, *"), uap->pid);
+#endif
+
+ error = copyin(uap->param, &sched_param, sizeof(sched_param));
+ if (error)
+ return (error);
+
+ if (uap->pid == 0) {
+ tdt = td;
+ p = tdt->td_proc;
+ PROC_LOCK(p);
+ } else {
+ p = pfind(uap->pid);
+ if (p == NULL)
+ return (ESRCH);
+ tdt = FIRST_THREAD_IN_PROC(p);
+ }
+
+ error = kern_sched_setparam(td, tdt, &sched_param);
+ PROC_UNLOCK(p);
+ return (error);
+}
+
+int
+linux_sched_getparam(struct thread *td,
+ struct linux_sched_getparam_args *uap)
+{
+ struct sched_param sched_param;
+ struct thread *tdt;
+ struct proc *p;
+ int error;
+
+#ifdef DEBUG
+ if (ldebug(sched_getparam))
+ printf(ARGS(sched_getparam, "%d, *"), uap->pid);
+#endif
+
+ if (uap->pid == 0) {
+ tdt = td;
+ p = tdt->td_proc;
+ PROC_LOCK(p);
+ } else {
+ p = pfind(uap->pid);
+ if (p == NULL)
+ return (ESRCH);
+ tdt = FIRST_THREAD_IN_PROC(p);
+ }
+
+ error = kern_sched_getparam(td, tdt, &sched_param);
+ PROC_UNLOCK(p);
+ if (error == 0)
+ error = copyout(&sched_param, uap->param,
+ sizeof(sched_param));
+ return (error);
+}
+
/*
* Get affinity of a process.
*/
Index: sys/i386/linux/syscalls.master
===================================================================
--- sys/i386/linux/syscalls.master
+++ sys/i386/linux/syscalls.master
@@ -269,10 +269,10 @@
151 AUE_MUNLOCK NOPROTO { int munlock(const void *addr, size_t len); }
152 AUE_MLOCKALL NOPROTO { int mlockall(int how); }
153 AUE_MUNLOCKALL NOPROTO { int munlockall(void); }
-154 AUE_SCHED_SETPARAM NOPROTO { int sched_setparam(pid_t pid, \
- const struct sched_param *param); }
-155 AUE_SCHED_GETPARAM NOPROTO { int sched_getparam(pid_t pid, \
- struct sched_param *param); }
+154 AUE_SCHED_SETPARAM STD { int linux_sched_setparam(l_pid_t pid, \
+ struct l_sched_param *param); }
+155 AUE_SCHED_GETPARAM STD { int linux_sched_getparam(l_pid_t pid, \
+ struct l_sched_param *param); }
156 AUE_SCHED_SETSCHEDULER STD { int linux_sched_setscheduler( \
l_pid_t pid, l_int policy, \
struct l_sched_param *param); }

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 30, 8:58 PM (13 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14950305
Default Alt Text
D1036.id2665.diff (3 KB)

Event Timeline