[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [qemu-s390x] [PATCH for-4.1 6/6] target/s390x: Use tcg_s390_program_
From: |
David Hildenbrand |
Subject: |
Re: [qemu-s390x] [PATCH for-4.1 6/6] target/s390x: Use tcg_s390_program_interrupt in TCG helpers |
Date: |
Mon, 1 Apr 2019 14:17:58 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 |
On 01.04.19 12:29, Richard Henderson wrote:
> Replace all uses of s390_program_interrupt within files
> that are marked CONFIG_TCG. These are necessarily tcg-only.
>
> This lets each of these users benefit from the QEMU_NORETURN
> attribute on tcg_s390_program_interrupt.
>
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> target/s390x/cc_helper.c | 4 ++--
> target/s390x/crypto_helper.c | 7 +++----
> target/s390x/excp_helper.c | 2 +-
> target/s390x/fpu_helper.c | 6 +++---
> target/s390x/int_helper.c | 15 +++++++-------
> target/s390x/mem_helper.c | 38 ++++++++++++++++++------------------
> target/s390x/misc_helper.c | 18 ++++++++---------
> 7 files changed, 45 insertions(+), 45 deletions(-)
>
> diff --git a/target/s390x/cc_helper.c b/target/s390x/cc_helper.c
> index d35ff08f59..9199b4c9bc 100644
> --- a/target/s390x/cc_helper.c
> +++ b/target/s390x/cc_helper.c
> @@ -21,6 +21,7 @@
> #include "qemu/osdep.h"
> #include "cpu.h"
> #include "internal.h"
> +#include "tcg_s390x.h"
> #include "exec/exec-all.h"
> #include "exec/helper-proto.h"
> #include "qemu/host-utils.h"
> @@ -572,8 +573,7 @@ void HELPER(sacf)(CPUS390XState *env, uint64_t a1)
> break;
> default:
> HELPER_LOG("unknown sacf mode: %" PRIx64 "\n", a1);
> - s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> - break;
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> }
> }
> #endif
> diff --git a/target/s390x/crypto_helper.c b/target/s390x/crypto_helper.c
> index 1f83987e9d..ff3fbc3950 100644
> --- a/target/s390x/crypto_helper.c
> +++ b/target/s390x/crypto_helper.c
> @@ -13,6 +13,7 @@
> #include "qemu/osdep.h"
> #include "qemu/main-loop.h"
> #include "internal.h"
> +#include "tcg_s390x.h"
> #include "exec/helper-proto.h"
> #include "exec/exec-all.h"
> #include "exec/cpu_ldst.h"
> @@ -34,16 +35,14 @@ uint32_t HELPER(msa)(CPUS390XState *env, uint32_t r1,
> uint32_t r2, uint32_t r3,
> case S390_FEAT_TYPE_PCKMO:
> case S390_FEAT_TYPE_PCC:
> if (mod) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> - return 0;
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
> break;
> }
>
> s390_get_feat_block(type, subfunc);
> if (!test_be_bit(fc, subfunc)) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> - return 0;
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> switch (fc) {
> diff --git a/target/s390x/excp_helper.c b/target/s390x/excp_helper.c
> index f42af4de91..bc781c14c3 100644
> --- a/target/s390x/excp_helper.c
> +++ b/target/s390x/excp_helper.c
> @@ -573,7 +573,7 @@ void s390x_cpu_do_unaligned_access(CPUState *cs, vaddr
> addr,
> S390CPU *cpu = S390_CPU(cs);
> CPUS390XState *env = &cpu->env;
>
> - s390_program_interrupt(env, PGM_SPECIFICATION, retaddr);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, retaddr);
> }
>
> #endif /* CONFIG_USER_ONLY */
> diff --git a/target/s390x/fpu_helper.c b/target/s390x/fpu_helper.c
> index 4c107c9e37..4d3fe962cd 100644
> --- a/target/s390x/fpu_helper.c
> +++ b/target/s390x/fpu_helper.c
> @@ -827,7 +827,7 @@ void HELPER(sfpc)(CPUS390XState *env, uint64_t fpc)
> {
> if (fpc_to_rnd[fpc & 0x7] == -1 || fpc & 0x03030088u ||
> (!s390_has_feat(S390_FEAT_FLOATING_POINT_EXT) && fpc & 0x4)) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> }
>
> /* Install everything in the main FPC. */
> @@ -845,7 +845,7 @@ void HELPER(sfas)(CPUS390XState *env, uint64_t fpc)
>
> if (fpc_to_rnd[fpc & 0x7] == -1 || fpc & 0x03030088u ||
> (!s390_has_feat(S390_FEAT_FLOATING_POINT_EXT) && fpc & 0x4)) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> }
>
> /*
> @@ -882,7 +882,7 @@ void HELPER(sfas)(CPUS390XState *env, uint64_t fpc)
> void HELPER(srnm)(CPUS390XState *env, uint64_t rnd)
> {
> if (rnd > 0x7 || fpc_to_rnd[rnd & 0x7] == -1) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> }
>
> env->fpc = deposit32(env->fpc, 0, 3, rnd);
> diff --git a/target/s390x/int_helper.c b/target/s390x/int_helper.c
> index 7027f51b44..80150039b0 100644
> --- a/target/s390x/int_helper.c
> +++ b/target/s390x/int_helper.c
> @@ -21,6 +21,7 @@
> #include "qemu/osdep.h"
> #include "cpu.h"
> #include "internal.h"
> +#include "tcg_s390x.h"
> #include "exec/exec-all.h"
> #include "qemu/host-utils.h"
> #include "exec/helper-proto.h"
> @@ -39,7 +40,7 @@ int64_t HELPER(divs32)(CPUS390XState *env, int64_t a,
> int64_t b64)
> int64_t q;
>
> if (b == 0) {
> - s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> + tcg_s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> }
>
> ret = q = a / b;
> @@ -47,7 +48,7 @@ int64_t HELPER(divs32)(CPUS390XState *env, int64_t a,
> int64_t b64)
>
> /* Catch non-representable quotient. */
> if (ret != q) {
> - s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> + tcg_s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> }
>
> return ret;
> @@ -60,7 +61,7 @@ uint64_t HELPER(divu32)(CPUS390XState *env, uint64_t a,
> uint64_t b64)
> uint64_t q;
>
> if (b == 0) {
> - s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> + tcg_s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> }
>
> ret = q = a / b;
> @@ -68,7 +69,7 @@ uint64_t HELPER(divu32)(CPUS390XState *env, uint64_t a,
> uint64_t b64)
>
> /* Catch non-representable quotient. */
> if (ret != q) {
> - s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> + tcg_s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> }
>
> return ret;
> @@ -79,7 +80,7 @@ int64_t HELPER(divs64)(CPUS390XState *env, int64_t a,
> int64_t b)
> {
> /* Catch divide by zero, and non-representable quotient (MIN / -1). */
> if (b == 0 || (b == -1 && a == (1ll << 63))) {
> - s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> + tcg_s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> }
> env->retxl = a % b;
> return a / b;
> @@ -92,7 +93,7 @@ uint64_t HELPER(divu64)(CPUS390XState *env, uint64_t ah,
> uint64_t al,
> uint64_t ret;
> /* Signal divide by zero. */
> if (b == 0) {
> - s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> + tcg_s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> }
> if (ah == 0) {
> /* 64 -> 64/64 case */
> @@ -106,7 +107,7 @@ uint64_t HELPER(divu64)(CPUS390XState *env, uint64_t ah,
> uint64_t al,
> env->retxl = a % b;
> ret = q;
> if (ret != q) {
> - s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> + tcg_s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC());
> }
> #else
> S390CPU *cpu = s390_env_get_cpu(env);
> diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
> index 6c5754a2bf..d54907696d 100644
> --- a/target/s390x/mem_helper.c
> +++ b/target/s390x/mem_helper.c
> @@ -21,6 +21,7 @@
> #include "qemu/osdep.h"
> #include "cpu.h"
> #include "internal.h"
> +#include "tcg_s390x.h"
> #include "exec/helper-proto.h"
> #include "exec/exec-all.h"
> #include "exec/cpu_ldst.h"
> @@ -98,7 +99,7 @@ static inline void check_alignment(CPUS390XState *env,
> uint64_t v,
> int wordsize, uintptr_t ra)
> {
> if (v % wordsize) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
> }
>
> @@ -556,7 +557,7 @@ void HELPER(srst)(CPUS390XState *env, uint32_t r1,
> uint32_t r2)
>
> /* Bits 32-55 must contain all 0. */
> if (env->regs[0] & 0xffffff00u) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> str = get_address(env, r2);
> @@ -593,7 +594,7 @@ void HELPER(srstu)(CPUS390XState *env, uint32_t r1,
> uint32_t r2)
>
> /* Bits 32-47 of R0 must be zero. */
> if (env->regs[0] & 0xffff0000u) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> str = get_address(env, r2);
> @@ -708,7 +709,7 @@ void HELPER(lam)(CPUS390XState *env, uint32_t r1,
> uint64_t a2, uint32_t r3)
>
> if (a2 & 0x3) {
> /* we either came here by lam or lamy, which have different lengths
> */
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> for (i = r1;; i = (i + 1) % 16) {
> @@ -728,7 +729,7 @@ void HELPER(stam)(CPUS390XState *env, uint32_t r1,
> uint64_t a2, uint32_t r3)
> int i;
>
> if (a2 & 0x3) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> for (i = r1;; i = (i + 1) % 16) {
> @@ -1627,8 +1628,7 @@ static uint32_t do_csst(CPUS390XState *env, uint32_t
> r3, uint64_t a1,
> return cc;
>
> spec_exception:
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> - g_assert_not_reached();
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> uint32_t HELPER(csst)(CPUS390XState *env, uint32_t r3, uint64_t a1, uint64_t
> a2)
> @@ -1652,7 +1652,7 @@ void HELPER(lctlg)(CPUS390XState *env, uint32_t r1,
> uint64_t a2, uint32_t r3)
> uint32_t i;
>
> if (src & 0x7) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> for (i = r1;; i = (i + 1) % 16) {
> @@ -1686,7 +1686,7 @@ void HELPER(lctl)(CPUS390XState *env, uint32_t r1,
> uint64_t a2, uint32_t r3)
> uint32_t i;
>
> if (src & 0x3) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> for (i = r1;; i = (i + 1) % 16) {
> @@ -1717,7 +1717,7 @@ void HELPER(stctg)(CPUS390XState *env, uint32_t r1,
> uint64_t a2, uint32_t r3)
> uint32_t i;
>
> if (dest & 0x7) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> for (i = r1;; i = (i + 1) % 16) {
> @@ -1737,7 +1737,7 @@ void HELPER(stctl)(CPUS390XState *env, uint32_t r1,
> uint64_t a2, uint32_t r3)
> uint32_t i;
>
> if (dest & 0x3) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> for (i = r1;; i = (i + 1) % 16) {
> @@ -1941,7 +1941,7 @@ void HELPER(idte)(CPUS390XState *env, uint64_t r1,
> uint64_t r2, uint32_t m4)
> uint16_t entries, i, index = 0;
>
> if (r2 & 0xff000) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> if (!(r2 & 0x800)) {
> @@ -2089,7 +2089,7 @@ uint64_t HELPER(lra)(CPUS390XState *env, uint64_t addr)
>
> /* XXX incomplete - has more corner cases */
> if (!(env->psw.mask & PSW_MASK_64) && (addr >> 32)) {
> - s390_program_interrupt(env, PGM_SPECIAL_OP, GETPC());
> + tcg_s390_program_interrupt(env, PGM_SPECIAL_OP, GETPC());
> }
>
> old_exc = cs->exception_index;
> @@ -2258,7 +2258,7 @@ uint32_t HELPER(mvcos)(CPUS390XState *env, uint64_t
> dest, uint64_t src,
> __func__, dest, src, len);
>
> if (!(env->psw.mask & PSW_MASK_DAT)) {
> - s390_program_interrupt(env, PGM_SPECIAL_OP, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIAL_OP, ra);
> }
>
> /* OAC (operand access control) for the first operand -> dest */
> @@ -2289,14 +2289,14 @@ uint32_t HELPER(mvcos)(CPUS390XState *env, uint64_t
> dest, uint64_t src,
> }
>
> if (dest_a && dest_as == AS_HOME && (env->psw.mask & PSW_MASK_PSTATE)) {
> - s390_program_interrupt(env, PGM_SPECIAL_OP, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIAL_OP, ra);
> }
> if (!(env->cregs[0] & CR0_SECONDARY) &&
> (dest_as == AS_SECONDARY || src_as == AS_SECONDARY)) {
> - s390_program_interrupt(env, PGM_SPECIAL_OP, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIAL_OP, ra);
> }
> if (!psw_key_valid(env, dest_key) || !psw_key_valid(env, src_key)) {
> - s390_program_interrupt(env, PGM_PRIVILEGED, ra);
> + tcg_s390_program_interrupt(env, PGM_PRIVILEGED, ra);
> }
>
> len = wrap_length(env, len);
> @@ -2310,7 +2310,7 @@ uint32_t HELPER(mvcos)(CPUS390XState *env, uint64_t
> dest, uint64_t src,
> (env->psw.mask & PSW_MASK_PSTATE)) {
> qemu_log_mask(LOG_UNIMP, "%s: AR-mode and PSTATE support missing\n",
> __func__);
> - s390_program_interrupt(env, PGM_ADDRESSING, ra);
> + tcg_s390_program_interrupt(env, PGM_ADDRESSING, ra);
> }
>
> /* FIXME: a) LAP
> @@ -2643,7 +2643,7 @@ void probe_write_access(CPUS390XState *env, uint64_t
> addr, uint64_t len,
> #ifdef CONFIG_USER_ONLY
> if (!h2g_valid(addr) || !h2g_valid(addr + len - 1) ||
> page_check_range(addr, len, PAGE_WRITE) < 0) {
> - s390_program_interrupt(env, PGM_ADDRESSING, ra);
> + tcg_s390_program_interrupt(env, PGM_ADDRESSING, ra);
> }
> #else
> /* test the actual access, not just any access to the page due to LAP */
> diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c
> index fd2ed885a5..7ea0202341 100644
> --- a/target/s390x/misc_helper.c
> +++ b/target/s390x/misc_helper.c
> @@ -106,7 +106,7 @@ uint32_t HELPER(servc)(CPUS390XState *env, uint64_t r1,
> uint64_t r2)
> int r = sclp_service_call(env, r1, r2);
> qemu_mutex_unlock_iothread();
> if (r < 0) {
> - s390_program_interrupt(env, -r, GETPC());
> + tcg_s390_program_interrupt(env, -r, GETPC());
> }
> return r;
> }
> @@ -143,7 +143,7 @@ void HELPER(diag)(CPUS390XState *env, uint32_t r1,
> uint32_t r3, uint32_t num)
> }
>
> if (r) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> }
> }
>
> @@ -222,7 +222,7 @@ void HELPER(sckpf)(CPUS390XState *env, uint64_t r0)
> uint32_t val = r0;
>
> if (val & 0xffff0000) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
> }
> env->todpr = val;
> }
> @@ -266,7 +266,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
> uint64_t r0, uint64_t r1)
> }
>
> if ((r0 & STSI_R0_RESERVED_MASK) || (r1 & STSI_R1_RESERVED_MASK)) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> if ((r0 & STSI_R0_FC_MASK) == STSI_R0_FC_CURRENT) {
> @@ -276,7 +276,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
> uint64_t r0, uint64_t r1)
> }
>
> if (a0 & ~TARGET_PAGE_MASK) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> /* count the cpus and split them into configured and reserved ones */
> @@ -509,7 +509,7 @@ uint32_t HELPER(tpi)(CPUS390XState *env, uint64_t addr)
> LowCore *lowcore;
>
> if (addr & 0x3) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> qemu_mutex_lock_iothread();
> @@ -574,7 +574,7 @@ void HELPER(chsc)(CPUS390XState *env, uint64_t inst)
> void HELPER(per_check_exception)(CPUS390XState *env)
> {
> if (env->per_perc_atmid) {
> - s390_program_interrupt(env, PGM_PER, GETPC());
> + tcg_s390_program_interrupt(env, PGM_PER, GETPC());
> }
> }
>
> @@ -664,7 +664,7 @@ uint32_t HELPER(stfle)(CPUS390XState *env, uint64_t addr)
> int i;
>
> if (addr & 0x7) {
> - s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + tcg_s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> }
>
> prepare_stfl();
> @@ -730,7 +730,7 @@ void HELPER(sic)(CPUS390XState *env, uint64_t r1,
> uint64_t r3)
> qemu_mutex_unlock_iothread();
> /* css_do_sic() may actually return a PGM_xxx value to inject */
> if (r) {
> - s390_program_interrupt(env, -r, GETPC());
> + tcg_s390_program_interrupt(env, -r, GETPC());
> }
> }
>
>
Acked-by: David Hildenbrand <address@hidden>
--
Thanks,
David / dhildenb
- [qemu-s390x] [PATCH for-4.1 0/6] target/s390x: Clean up tcg exceptions, Richard Henderson, 2019/04/01
- [qemu-s390x] [PATCH for-4.1 1/6] target/s390x: Truncate 32-bit psw_addr before creating TB, Richard Henderson, 2019/04/01
- [qemu-s390x] [PATCH for-4.1 2/6] target/s390x: Add ilen to unwind data, Richard Henderson, 2019/04/01
- [qemu-s390x] [PATCH for-4.1 3/6] target/s390x: Use ilen from unwind in tlb_fill, Richard Henderson, 2019/04/01
- [qemu-s390x] [PATCH for-4.1 4/6] target/s390x: Remove ilen parameter from tcg_s390_program_interrupt, Richard Henderson, 2019/04/01
- [qemu-s390x] [PATCH for-4.1 6/6] target/s390x: Use tcg_s390_program_interrupt in TCG helpers, Richard Henderson, 2019/04/01
- Re: [qemu-s390x] [PATCH for-4.1 6/6] target/s390x: Use tcg_s390_program_interrupt in TCG helpers,
David Hildenbrand <=
- [qemu-s390x] [PATCH for-4.1 5/6] target/s390x: Remove ilen parameter from s390_program_interrupt, Richard Henderson, 2019/04/01
- Re: [qemu-s390x] [Qemu-devel] [PATCH for-4.1 0/6] target/s390x: Clean up tcg exceptions, no-reply, 2019/04/01