On 10.10.19 10:26, Alex Bennée wrote: > > David Hildenbrand <da...@redhat.com> writes: > >> 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> > > Reviewed-by: Alex Bennée <alex.ben...@linaro.org>
Thanks, Queued to https://github.com/davidhildenbrand/qemu.git s390-tcg-next -- Thanks, David / dhildenb