diff options
| author | David S. Miller <davem@davemloft.net> | 2010-04-11 14:53:53 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-04-11 14:53:53 -0700 | 
| commit | 871039f02f8ec4ab2e5e9010718caa8e085786f1 (patch) | |
| tree | f0d2b3127fc48c862967d68c46c2d46668137515 /kernel/sched.c | |
| parent | e4077e018b5ead3de9951fc01d8bf12eeeeeefed (diff) | |
| parent | 4a1032faac94ebbf647460ae3e06fc21146eb280 (diff) | |
| download | olio-linux-3.10-871039f02f8ec4ab2e5e9010718caa8e085786f1.tar.xz olio-linux-3.10-871039f02f8ec4ab2e5e9010718caa8e085786f1.zip  | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
	drivers/net/stmmac/stmmac_main.c
	drivers/net/wireless/wl12xx/wl1271_cmd.c
	drivers/net/wireless/wl12xx/wl1271_main.c
	drivers/net/wireless/wl12xx/wl1271_spi.c
	net/core/ethtool.c
	net/mac80211/scan.c
Diffstat (limited to 'kernel/sched.c')
| -rw-r--r-- | kernel/sched.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 9ab3cd7858d..6af210a7de7 100644 --- 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/slab.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; -	int cpu = get_cpu(); +	int cpu __maybe_unused = get_cpu();  #ifdef CONFIG_SMP  	/* @@ -4902,7 +4903,9 @@ SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,  	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)) @@ -4910,10 +4913,12 @@ SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,  	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 = cpumask_size(); +			ret = retlen;  	}  	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); -		wake_up_process(rq->migration_thread); +		wake_up_process(mt);  		put_task_struct(mt);  		wait_for_completion(&req.done);  		tlb_migrate_finish(p->mm);  |