git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/anholt...
[pandora-kernel.git]
/
kernel
/
sched.c
diff --git
a/kernel/sched.c
b/kernel/sched.c
index
9ab3cd7
..
6af210a
100644
(file)
--- a/
kernel/sched.c
+++ b/
kernel/sched.c
@@
-71,6
+71,7
@@
#include <linux/debugfs.h>
#include <linux/ctype.h>
#include <linux/ftrace.h>
#include <linux/debugfs.h>
#include <linux/ctype.h>
#include <linux/ftrace.h>
+#include <linux/slab.h>
#include <asm/tlb.h>
#include <asm/irq_regs.h>
#include <asm/tlb.h>
#include <asm/irq_regs.h>
@@
-2650,7
+2651,7
@@
void wake_up_new_task(struct task_struct *p, unsigned long clone_flags)
{
unsigned long flags;
struct rq *rq;
{
unsigned long flags;
struct rq *rq;
- int cpu = get_cpu();
+ int cpu
__maybe_unused
= get_cpu();
#ifdef CONFIG_SMP
/*
#ifdef CONFIG_SMP
/*
@@
-4902,7
+4903,9
@@
SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,
int ret;
cpumask_var_t mask;
int ret;
cpumask_var_t mask;
- if (len < cpumask_size())
+ if ((len * BITS_PER_BYTE) < nr_cpu_ids)
+ return -EINVAL;
+ if (len & (sizeof(unsigned long)-1))
return -EINVAL;
if (!alloc_cpumask_var(&mask, GFP_KERNEL))
return -EINVAL;
if (!alloc_cpumask_var(&mask, GFP_KERNEL))
@@
-4910,10
+4913,12
@@
SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,
ret = sched_getaffinity(pid, mask);
if (ret == 0) {
ret = sched_getaffinity(pid, mask);
if (ret == 0) {
- if (copy_to_user(user_mask_ptr, mask, cpumask_size()))
+ size_t retlen = min_t(size_t, len, cpumask_size());
+
+ if (copy_to_user(user_mask_ptr, mask, retlen))
ret = -EFAULT;
else
ret = -EFAULT;
else
- ret =
cpumask_size()
;
+ ret =
retlen
;
}
free_cpumask_var(mask);
}
free_cpumask_var(mask);
@@
-5383,7
+5388,7
@@
int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask)
get_task_struct(mt);
task_rq_unlock(rq, &flags);
get_task_struct(mt);
task_rq_unlock(rq, &flags);
- wake_up_process(
rq->migration_thread
);
+ wake_up_process(
mt
);
put_task_struct(mt);
wait_for_completion(&req.done);
tlb_migrate_finish(p->mm);
put_task_struct(mt);
wait_for_completion(&req.done);
tlb_migrate_finish(p->mm);