On 10/9/19 7:00 AM, David Hildenbrand wrote: > MVCL is interruptible and we should check for interrupts and process > them after writing back the variables to the registers. Let's check > for any exit requests and exit to the main loop. Introduce a new helper > function for that: cpu_loop_exit_requested(). > > When booting Fedora 30, I can see a handful of these exits and it seems > to work reliable. Also, Richard explained why this works correctly even > when MVCL is called via EXECUTE: > > (1) TB with EXECUTE runs, at address Ae > - env->psw_addr stored with Ae. > - helper_ex() runs, memory address Am computed > from D2a(X2a,B2a) or from psw.addr+RI2. > - env->ex_value stored with memory value modified by R1a > > (2) TB of executee runs, > - env->ex_value stored with 0. > - helper_mvcl() runs, using and updating R1b, R1b+1, R2b, R2b+1. > > (3a) helper_mvcl() completes, > - TB of executee continues, psw.addr += ilen. > - Next instruction is the one following EXECUTE. > > (3b) helper_mvcl() exits to main loop, > - cpu_loop_exit_restore() unwinds psw.addr = Ae. > - Next instruction is the EXECUTE itself... > - goto 1. > > As the PoP mentiones that an interruptible instruction called via EXECUTE > should avoid modifying storage/registers that are used by EXECUTE itself, > it is fine to retrigger EXECUTE. > > Cc: Alex Bennée <alex.ben...@linaro.org> > Cc: Peter Maydell <peter.mayd...@linaro.org> > Cc: Paolo Bonzini <pbonz...@redhat.com> > Suggested-by: Richard Henderson <richard.hender...@linaro.org> > Signed-off-by: David Hildenbrand <da...@redhat.com> > --- > > v3 -> v4: > - Switch to cpu_loop_exit_requested() and perform the actual exit in the > caller
Reviewed-by: Richard Henderson <richard.hender...@linaro.org> r~