mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
prctl: adds PR_SET_TIMERSLACK_PID for setting timer slack of an arbitrary thread.
Second argument is similar to PR_SET_TIMERSLACK, if non-zero then the slack is set to that value otherwise sets it to the default for the thread. Takes PID of the thread as the third argument. This allows power/performance management software to set timer slack for other threads according to its policy for the thread (such as when the thread is designated foreground vs. background activity) Change-Id: I744d451ff4e60dae69f38f53948ff36c51c14a3f Signed-off-by: Ruchi Kandoi <kandoiruchi@google.com>
This commit is contained in:
@@ -149,6 +149,12 @@
|
|||||||
|
|
||||||
#define PR_GET_TID_ADDRESS 40
|
#define PR_GET_TID_ADDRESS 40
|
||||||
|
|
||||||
|
/* Sets the timerslack for arbitrary threads
|
||||||
|
* arg2 slack value, 0 means "use default"
|
||||||
|
* arg3 pid of the thread whose timer slack needs to be set
|
||||||
|
*/
|
||||||
|
#define PR_SET_TIMERSLACK_PID 41
|
||||||
|
|
||||||
#define PR_SET_VMA 0x53564d41
|
#define PR_SET_VMA 0x53564d41
|
||||||
# define PR_SET_VMA_ANON_NAME 0
|
# define PR_SET_VMA_ANON_NAME 0
|
||||||
|
|
||||||
|
|||||||
19
kernel/sys.c
19
kernel/sys.c
@@ -44,6 +44,7 @@
|
|||||||
#include <linux/ctype.h>
|
#include <linux/ctype.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/mempolicy.h>
|
#include <linux/mempolicy.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
|
||||||
#include <linux/compat.h>
|
#include <linux/compat.h>
|
||||||
#include <linux/syscalls.h>
|
#include <linux/syscalls.h>
|
||||||
@@ -2252,6 +2253,7 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
|
|||||||
unsigned long, arg4, unsigned long, arg5)
|
unsigned long, arg4, unsigned long, arg5)
|
||||||
{
|
{
|
||||||
struct task_struct *me = current;
|
struct task_struct *me = current;
|
||||||
|
struct task_struct *tsk;
|
||||||
unsigned char comm[sizeof(me->comm)];
|
unsigned char comm[sizeof(me->comm)];
|
||||||
long error;
|
long error;
|
||||||
|
|
||||||
@@ -2375,6 +2377,23 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
|
|||||||
else
|
else
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
break;
|
break;
|
||||||
|
case PR_SET_TIMERSLACK_PID:
|
||||||
|
rcu_read_lock();
|
||||||
|
tsk = find_task_by_pid_ns((pid_t)arg3, &init_pid_ns);
|
||||||
|
if (tsk == NULL) {
|
||||||
|
rcu_read_unlock();
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
get_task_struct(tsk);
|
||||||
|
rcu_read_unlock();
|
||||||
|
if (arg2 <= 0)
|
||||||
|
tsk->timer_slack_ns =
|
||||||
|
tsk->default_timer_slack_ns;
|
||||||
|
else
|
||||||
|
tsk->timer_slack_ns = arg2;
|
||||||
|
put_task_struct(tsk);
|
||||||
|
error = 0;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user