arch/xtensa: Fix outgoing stack flush for dummy threads
On CPU startup, When we reach the cache flush code in arch_switch(), the outgoing thread is a dummy. The behavior of the existing code was to leave the existing value in the SR unchanged (probably NULL at startup). Then the context switch would walk from that address up to the top of the outgoing stack, flushing everything in between. That's wrong, because the outgoing stack is a real pointer (generally the interrupt stack of the current CPU), and we're flushing everything in memory underneath it. This also reverts commit 29abc8ad ("xtensa: fix booting secondary cores on the dummy thread"), which appears to have been an early attempt to address this issue. It worked (modulo all the extra and potentially incorrect flushing) on cavs v1.5/1.8 because of the way the entry code worked there. But on 2.5 we now hit the first context switch in a case where those extra lines are in address space already marked unwritable by the CPU, so the flush explodes. Signed-off-by:Andy Ross <andrew.j.ross@intel.com>
Loading
Please sign in to comment