Explicitly, xepc, xpistatus remain unchanged.
Keeping xpistatus unchanged disables chaining interrupts of different preemption levels:
- xpistatus.pithreshold holds previous context's threshold
- During tail chaining, new interrupt may have different (lower) preemption level
- If pithreshold remains unchanged, it reflects wrong (previous handler's) threshold
- When new handler returns via xret, wrong threshold is restored
This restricts tail chaining to same-preemption-level interrupts only, which is not documented.
Keeping xpistatus unchanged disables chaining interrupts of different preemption levels:
This restricts tail chaining to same-preemption-level interrupts only, which is not documented.