Commit 9cc12363 authored by Kevin D. Kissell's avatar Kevin D. Kissell Committed by Ralf Baechle

[MIPS] SMTC: Fix holes in SMTC and FPU affinity support.

Signed-off-by: default avatarKevin D. Kissell <kevink@paralogos.com>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 498a863f
...@@ -159,7 +159,7 @@ __setup("fpaff=", fpaff_thresh); ...@@ -159,7 +159,7 @@ __setup("fpaff=", fpaff_thresh);
/* /*
* FPU Use Factor empirically derived from experiments on 34K * FPU Use Factor empirically derived from experiments on 34K
*/ */
#define FPUSEFACTOR 333 #define FPUSEFACTOR 2000
static __init int mt_fp_affinity_init(void) static __init int mt_fp_affinity_init(void)
{ {
......
...@@ -55,7 +55,7 @@ void __noreturn cpu_idle(void) ...@@ -55,7 +55,7 @@ void __noreturn cpu_idle(void)
while (1) { while (1) {
tick_nohz_stop_sched_tick(1); tick_nohz_stop_sched_tick(1);
while (!need_resched()) { while (!need_resched()) {
#ifdef CONFIG_SMTC_IDLE_HOOK_DEBUG #ifdef CONFIG_MIPS_MT_SMTC
extern void smtc_idle_loop_hook(void); extern void smtc_idle_loop_hook(void);
smtc_idle_loop_hook(); smtc_idle_loop_hook();
...@@ -145,19 +145,18 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp, ...@@ -145,19 +145,18 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
*/ */
p->thread.cp0_status = read_c0_status() & ~(ST0_CU2|ST0_CU1); p->thread.cp0_status = read_c0_status() & ~(ST0_CU2|ST0_CU1);
childregs->cp0_status &= ~(ST0_CU2|ST0_CU1); childregs->cp0_status &= ~(ST0_CU2|ST0_CU1);
#ifdef CONFIG_MIPS_MT_SMTC
/*
* SMTC restores TCStatus after Status, and the CU bits
* are aliased there.
*/
childregs->cp0_tcstatus &= ~(ST0_CU2|ST0_CU1);
#endif
clear_tsk_thread_flag(p, TIF_USEDFPU); clear_tsk_thread_flag(p, TIF_USEDFPU);
#ifdef CONFIG_MIPS_MT_FPAFF #ifdef CONFIG_MIPS_MT_FPAFF
clear_tsk_thread_flag(p, TIF_FPUBOUND); clear_tsk_thread_flag(p, TIF_FPUBOUND);
/*
* FPU affinity support is cleaner if we track the
* user-visible CPU affinity from the very beginning.
* The generic cpus_allowed mask will already have
* been copied from the parent before copy_thread
* is invoked.
*/
p->thread.user_cpus_allowed = p->cpus_allowed;
#endif /* CONFIG_MIPS_MT_FPAFF */ #endif /* CONFIG_MIPS_MT_FPAFF */
if (clone_flags & CLONE_SETTLS) if (clone_flags & CLONE_SETTLS)
......
...@@ -825,8 +825,10 @@ static void mt_ase_fp_affinity(void) ...@@ -825,8 +825,10 @@ static void mt_ase_fp_affinity(void)
if (cpus_intersects(current->cpus_allowed, mt_fpu_cpumask)) { if (cpus_intersects(current->cpus_allowed, mt_fpu_cpumask)) {
cpumask_t tmask; cpumask_t tmask;
cpus_and(tmask, current->thread.user_cpus_allowed, current->thread.user_cpus_allowed
mt_fpu_cpumask); = current->cpus_allowed;
cpus_and(tmask, current->cpus_allowed,
mt_fpu_cpumask);
set_cpus_allowed(current, tmask); set_cpus_allowed(current, tmask);
set_thread_flag(TIF_FPUBOUND); set_thread_flag(TIF_FPUBOUND);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment