@Aklis
2016-10-24T11:42:41.000000Z
字数 1083
阅读 503
未分类
陈品维 14051409
SYSCALL_DEFINE0(mycall)
{
printk("cpw is Here!\n");
return 0;
}
SYSCALL_DEFINE3(mysetnice, int, pid, int, flag, int, nicevalue)
{
// set_one_prio
// set_user_nice
struct task_struct *g, *p;
struct user_struct *user;
const struct cred *cred = current_cred();
long niceval, retval = -ESRCH;
struct pid *pgrp;
kuid_t uid;
// set
int error = -EINVAL;
niceval = (long)nicevalue;
// hook
int which = PRIO_PROCESS;
int who = pid;
printk("Aklis's SysCall!\n");
if (which > PRIO_USER || which < PRIO_PROCESS)
return -EINVAL;
error = -ESRCH;
if (flag == 1) {
if (niceval < MIN_NICE)
niceval = MIN_NICE;
if (niceval > MAX_NICE)
niceval = MAX_NICE;
}
rcu_read_lock(); // 上锁
read_lock(&tasklist_lock); // 上锁
if (flag == 1) {
switch (which) {
case PRIO_PROCESS:
if (who)
p = find_task_by_vpid(who);
else
p = current;
if (p)
error = set_one_prio(p, niceval, error);
break;
}
read_unlock(&tasklist_lock); // 解锁
rcu_read_unlock();
return error;
}else if (flag == 0){
printk("Aklis want to get the nice!\n");
switch (which) {
case PRIO_PROCESS:
if (who)
p = find_task_by_vpid(who);
else
p = current;
if (p) {
niceval = (task_nice(p));
if (niceval >= MIN_NICE)
retval = niceval;
}
break;
}
}
read_unlock(&tasklist_lock); // 解锁
rcu_read_unlock();
return retval;
}