@MicroController You are correct, but out of interest: can you tell me why you would like to distinguish between solicited and unsolicited context switches?
Sure
Two reasons:
1. minor performance gain - since any function call could potentially clobber PIE registers anyway, a solicited context switch could do without saving+restoring the context.
2. currently, tasks are implicitly+permanently pinned to one core as soon as they use PIE or FPU 'coprocessors' for the first time, with no way to 'unpin' them ever again. A solicited context switch could be used to, also implicitly, relinquish a task's 'ownership' of the coprocs and restore its original, potentially 'unpinned', affinity, without having to migrate the coproc context to another core.
Of course, ideally, the coproc context would automatically migrate from core to core with an unpinned task, i.e. no implicit task pinning in the fist place, but that doesn't easily go together with the lazy context saving.
Then again, using the S3's PIE instructions, saving+restoring the full PIE or FPU context can be extremely fast, so, at least on the S3, the whole
lazy context saving really doesn't provide much of a benefit, if any, especially when considering the management overhead in the coproc exception handler. (IIRC, I managed to save or restore the full PIE context in 40-50 clock cycles, but could 'only' optimize the corresponding coproc exception handler code down to some 210 clock cycles. So lazy-saving + restoring saves ~100 clock cycles when it doesn't do anything, but 'costs' at least ~400 when it does (more like 600+ out of the box). - And now we're very officially off-topic

)