On 04/09/2018 01:36 PM, David Hildenbrand wrote: > On 09.04.2018 13:35, Christian Borntraeger wrote: >> >> >> On 04/09/2018 01:30 PM, David Hildenbrand wrote: >>> Let's simplify it a bit. On some weird circumstances we would have tried >>> to recompute watchpoints when running under KVM. >>> >>> Signed-off-by: David Hildenbrand <da...@redhat.com> >>> --- >>> target/s390x/helper.c | 10 ++++++---- >>> 1 file changed, 6 insertions(+), 4 deletions(-) >>> >>> diff --git a/target/s390x/helper.c b/target/s390x/helper.c >>> index 615fa24ab9..e8548f340a 100644 >>> --- a/target/s390x/helper.c >>> +++ b/target/s390x/helper.c >>> @@ -103,16 +103,18 @@ void load_psw(CPUS390XState *env, uint64_t mask, >>> uint64_t addr) >>> >>> env->psw.addr = addr; >>> env->psw.mask = mask; >>> - if (tcg_enabled()) { >>> - env->cc_op = (mask >> 44) & 3; >>> + >>> + /* KVM will handle all WAITs and trigger a WAIT exit on disabled_wait >>> */ >>> + if (!tcg_enabled()) { >>> + return; >>> } >>> + env->cc_op = (mask >> 44) & 3; >> >> Do we have any call path were KVM could call load_psw? > > do_restart_interrupt() > > SIGP while the target CPU is stopped.
makes sense. Can you add that to the patch description? that makes it easier to understand what can really go wrong without this patch. > >> >>> >>> if ((old_mask ^ mask) & PSW_MASK_PER) { >>> s390_cpu_recompute_watchpoints(CPU(s390_env_get_cpu(env))); >>> } >>> >>> - /* KVM will handle all WAITs and trigger a WAIT exit on disabled_wait >>> */ >>> - if (tcg_enabled() && (mask & PSW_MASK_WAIT)) { >>> + if (mask & PSW_MASK_WAIT) { >>> s390_handle_wait(s390_env_get_cpu(env)); >>> } >>> } >>> >> > >