36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From: Felix Fietkau <nbd@openwrt.org>
 | 
						|
Date: Sun, 19 Jul 2015 00:21:57 +0200
 | 
						|
Subject: [PATCH] MIPS: kernel: fix sched_getaffinity with MT FPAFF enabled
 | 
						|
 | 
						|
p->thread.user_cpus_allowed is zero-initialized and is only filled on
 | 
						|
the first sched_setaffinity call.
 | 
						|
 | 
						|
To avoid adding overhead in the task initialization codepath, simply OR
 | 
						|
the returned mask in sched_getaffinity with p->cpus_allowed.
 | 
						|
 | 
						|
Cc: stable@vger.kernel.org
 | 
						|
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 | 
						|
---
 | 
						|
 | 
						|
--- a/arch/mips/kernel/mips-mt-fpaff.c
 | 
						|
+++ b/arch/mips/kernel/mips-mt-fpaff.c
 | 
						|
@@ -154,7 +154,7 @@ asmlinkage long mipsmt_sys_sched_getaffi
 | 
						|
 				      unsigned long __user *user_mask_ptr)
 | 
						|
 {
 | 
						|
 	unsigned int real_len;
 | 
						|
-	cpumask_t mask;
 | 
						|
+	cpumask_t allowed, mask;
 | 
						|
 	int retval;
 | 
						|
 	struct task_struct *p;
 | 
						|
 
 | 
						|
@@ -173,7 +173,8 @@ asmlinkage long mipsmt_sys_sched_getaffi
 | 
						|
 	if (retval)
 | 
						|
 		goto out_unlock;
 | 
						|
 
 | 
						|
-	cpumask_and(&mask, &p->thread.user_cpus_allowed, cpu_possible_mask);
 | 
						|
+	cpumask_or(&allowed, &p->thread.user_cpus_allowed, &p->cpus_allowed);
 | 
						|
+	cpumask_and(&mask, &allowed, cpu_active_mask);
 | 
						|
 
 | 
						|
 out_unlock:
 | 
						|
 	read_unlock(&tasklist_lock);
 |