diff options
author | David Hildenbrand <david@redhat.com> | 2017-09-28 22:37:02 +0200 |
---|---|---|
committer | Cornelia Huck <cohuck@redhat.com> | 2017-10-20 13:32:10 +0200 |
commit | b1ab5f6068c059b1357209c1dbeaac772184977d (patch) | |
tree | e919bb321ea7e50b91ace07b7030d1fd58dac20e /target/s390x/sigp.c | |
parent | a6880d213b371cec59f780ed16a99f0b1e0df88d (diff) |
s390x/tcg: implement STOP and RESET interrupts for TCG
Implement them like KVM implements/handles them. Both can only be
triggered via SIGP instructions. RESET has (almost) the lowest priority if
the CPU is running, and the highest if the CPU is STOPPED. This is handled
in SIGP code already. On delivery, we only have to care about the
"CPU running" scenario.
STOP is defined to be delivered after all other interrupts have been
delivered. Therefore it has the actual lowest priority.
As both can wake up a CPU if sleeping, indicate them correctly to
external code (e.g. cpu_has_work()).
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20170928203708.9376-25-david@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Diffstat (limited to 'target/s390x/sigp.c')
-rw-r--r-- | target/s390x/sigp.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/target/s390x/sigp.c b/target/s390x/sigp.c index ce8fda9d01..d70f5cb0ba 100644 --- a/target/s390x/sigp.c +++ b/target/s390x/sigp.c @@ -14,6 +14,7 @@ #include "internal.h" #include "sysemu/hw_accel.h" #include "exec/address-spaces.h" +#include "exec/exec-all.h" #include "sysemu/sysemu.h" #include "trace.h" @@ -498,6 +499,7 @@ void do_stop_interrupt(CPUS390XState *env) s390_store_status(cpu, S390_STORE_STATUS_DEF_ADDR, true); } env->sigp_order = 0; + env->pending_int &= ~INTERRUPT_STOP; } void s390_init_sigp(void) |