[MIPS] SMTC: Fix holes in SMTC and FPU affinity support.
Signed-off-by: Kevin D. Kissell <kevink@paralogos.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
498a863fdf
commit
9cc123631b
|
@ -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)
|
||||||
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,
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue