[MIPS] FPU affinity for MT ASE.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
@@ -758,6 +758,36 @@ asmlinkage void do_cpu(struct pt_regs *regs)
|
||||
¤t->thread.fpu.soft);
|
||||
if (sig)
|
||||
force_sig(sig, current);
|
||||
#ifdef CONFIG_MIPS_MT_FPAFF
|
||||
else {
|
||||
/*
|
||||
* MIPS MT processors may have fewer FPU contexts
|
||||
* than CPU threads. If we've emulated more than
|
||||
* some threshold number of instructions, force
|
||||
* migration to a "CPU" that has FP support.
|
||||
*/
|
||||
if(mt_fpemul_threshold > 0
|
||||
&& ((current->thread.emulated_fp++
|
||||
> mt_fpemul_threshold))) {
|
||||
/*
|
||||
* If there's no FPU present, or if the
|
||||
* application has already restricted
|
||||
* the allowed set to exclude any CPUs
|
||||
* with FPUs, we'll skip the procedure.
|
||||
*/
|
||||
if (cpus_intersects(current->cpus_allowed,
|
||||
mt_fpu_cpumask)) {
|
||||
cpumask_t tmask;
|
||||
|
||||
cpus_and(tmask,
|
||||
current->thread.user_cpus_allowed,
|
||||
mt_fpu_cpumask);
|
||||
set_cpus_allowed(current, tmask);
|
||||
current->thread.mflags |= MF_FPUBOUND;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_MIPS_MT_FPAFF */
|
||||
}
|
||||
|
||||
return;
|
||||
|
Reference in New Issue
Block a user