diff options
author | David Hildenbrand <david@redhat.com> | 2017-11-30 17:27:35 +0100 |
---|---|---|
committer | Cornelia Huck <cohuck@redhat.com> | 2017-12-14 17:56:54 +0100 |
commit | 98ee9bedc734e18287902f39e3a3a8adb399386a (patch) | |
tree | 7e1c49972b582b15bdb2f2c4b75869d136275104 /target/s390x/cpu.h | |
parent | 968db419de26d3011670ca7eeab57424f93cd888 (diff) | |
download | qemu-98ee9bedc734e18287902f39e3a3a8adb399386a.zip qemu-98ee9bedc734e18287902f39e3a3a8adb399386a.tar.gz qemu-98ee9bedc734e18287902f39e3a3a8adb399386a.tar.bz2 |
s390x: handle exceptions during s390_cpu_virt_mem_rw() correctly (TCG)
s390_cpu_virt_mem_rw() must always return, so callers can react on
an exception (e.g. see ioinst_handle_stcrw()).
However, for TCG we always have to exit the cpu loop (and restore the
cpu state before that) if we injected a program interrupt. So let's
introduce and use s390_cpu_virt_mem_handle_exc() in code that is not
purely KVM.
Directly pass the retaddr we already have available in these functions.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20171130162744.25442-8-david@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Diffstat (limited to 'target/s390x/cpu.h')
-rw-r--r-- | target/s390x/cpu.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h index 96abb29..ae61d18 100644 --- a/target/s390x/cpu.h +++ b/target/s390x/cpu.h @@ -736,6 +736,7 @@ int s390_cpu_virt_mem_rw(S390CPU *cpu, vaddr laddr, uint8_t ar, void *hostbuf, s390_cpu_virt_mem_rw(cpu, laddr, ar, dest, len, true) #define s390_cpu_virt_mem_check_write(cpu, laddr, ar, len) \ s390_cpu_virt_mem_rw(cpu, laddr, ar, NULL, len, true) +void s390_cpu_virt_mem_handle_exc(S390CPU *cpu, uintptr_t ra); /* sigp.c */ |