• Max Filippov's avatar
    xtensa: support coprocessors on SMP · 11e969bc
    Max Filippov authored
    Current coprocessor support on xtensa only works correctly on
    uniprocessor configurations. Make it work on SMP too and keep it lazy.
    
    Make coprocessor_owner array per-CPU and move it to struct exc_table for
    easy access from the fast_coprocessor exception handler. Allow task to
    have live coprocessors only on single CPU, record this CPU number in the
    struct thread_info::cp_owner_cpu. Change struct thread_info::cpenable
    meaning to be 'coprocessors live on cp_owner_cpu'.
    Introduce C-level coprocessor exception handler that flushes and
    releases live coprocessors of the task taking 'coprocessor disabled'
    exception and call it from the fast_coprocessor handler when the task
    has live coprocessors on other CPU.
    Make coprocessor_flush_all and coprocessor_release_all work correctly
    when called from any CPU by sending IPI to the cp_owner_cpu. Add
    function coprocessor_flush_release_all to do flush followed by release
    atomically. Add function local_coprocessors_flush_release_all to flush
    and release all coprocessors on the local CPU and use it to flush
    coprocessor contexts from the CPU that goes offline.
    Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
    11e969bc
thread_info.h 3.92 KB