My main issue here was just that it's really difficult to see how the
entry/exit logic is balanced, and I reckon we can solve that by splitting
guest_{enter,exit}_irqoff() into helper functions to handle the vtime
accounting separately from the context tracking, so that arch code can do
something like:
guest_timing_enter_irqoff();
guest_eqs_enter_irqoff();
< actually run vCPU here >
guest_eqs_exit_irqoff();
< handle pending IRQs here >
guest_timing_exit_irqoff();
... which I hope should work for RISC-V too.
I've had a go, and I've pushed out a WIP to:
https://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git/log/?h=arm64/kvm/rcu