xtensa: don't clear cpenable unconditionally on release

Clearing cpenable special register for a task without changing
coprocessor owner for the coprocessors that were enabled will result in
coprocessor context flush and immediate reload at the next attempt to
access this coprocessor if it happens before the context switch.
Avoid it by only clearing cpenable special register if
coprocessor_release_all is called for the current task.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
Max Filippov 2018-11-26 16:30:51 -08:00
parent 5dacbbef3d
commit be38e4f2cc

View file

@ -87,7 +87,8 @@ void coprocessor_release_all(struct thread_info *ti)
}
ti->cpenable = cpenable;
xtensa_set_sr(0, cpenable);
if (ti == current_thread_info())
xtensa_set_sr(0, cpenable);
preempt_enable();
}