Author: nbd
Date: 2015-07-19 00:49:39 +0200 (Sun, 19 Jul 2015)
New Revision: 46420

Added:
   
trunk/target/linux/generic/patches-3.18/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
   
trunk/target/linux/generic/patches-4.0/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
   
trunk/target/linux/generic/patches-4.1/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
Log:
kernel: fix sched_getaffinity on MIPS SMP systems (fixes enabling RPS/XPS in 
netifd with musl)

Signed-off-by: Felix Fietkau <[email protected]>

Added: 
trunk/target/linux/generic/patches-3.18/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
===================================================================
--- 
trunk/target/linux/generic/patches-3.18/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
                              (rev 0)
+++ 
trunk/target/linux/generic/patches-3.18/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
      2015-07-18 22:49:39 UTC (rev 46420)
@@ -0,0 +1,35 @@
+From: Felix Fietkau <[email protected]>
+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: [email protected]
+Signed-off-by: Felix Fietkau <[email protected]>
+---
+
+--- 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);

Added: 
trunk/target/linux/generic/patches-4.0/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
===================================================================
--- 
trunk/target/linux/generic/patches-4.0/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
                               (rev 0)
+++ 
trunk/target/linux/generic/patches-4.0/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
       2015-07-18 22:49:39 UTC (rev 46420)
@@ -0,0 +1,35 @@
+From: Felix Fietkau <[email protected]>
+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: [email protected]
+Signed-off-by: Felix Fietkau <[email protected]>
+---
+
+--- 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);

Added: 
trunk/target/linux/generic/patches-4.1/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
===================================================================
--- 
trunk/target/linux/generic/patches-4.1/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
                               (rev 0)
+++ 
trunk/target/linux/generic/patches-4.1/130-MIPS-kernel-fix-sched_getaffinity-with-MT-FPAFF-enab.patch
       2015-07-18 22:49:39 UTC (rev 46420)
@@ -0,0 +1,35 @@
+From: Felix Fietkau <[email protected]>
+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: [email protected]
+Signed-off-by: Felix Fietkau <[email protected]>
+---
+
+--- 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);
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to