[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 13/18] target/s390x: Rely on unwinding in s390_cpu_tlb_fill
From: |
Richard Henderson |
Subject: |
[PATCH v5 13/18] target/s390x: Rely on unwinding in s390_cpu_tlb_fill |
Date: |
Tue, 1 Oct 2019 10:16:09 -0700 |
We currently set ilen to AUTO, then overwrite that during
unwinding, then overwrite that for the code access case.
This can be simplified to setting ilen to our arbitrary
value for the (undefined) code access case, then rely on
unwinding to overwrite that with the correct value for
the data access case.
Reviewed-by: David Hildenbrand <address@hidden>
Signed-off-by: Richard Henderson <address@hidden>
---
target/s390x/excp_helper.c | 23 +++++++----------------
1 file changed, 7 insertions(+), 16 deletions(-)
diff --git a/target/s390x/excp_helper.c b/target/s390x/excp_helper.c
index 98a1ee8317..8ce992e639 100644
--- a/target/s390x/excp_helper.c
+++ b/target/s390x/excp_helper.c
@@ -96,7 +96,7 @@ bool s390_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
{
S390CPU *cpu = S390_CPU(cs);
- trigger_pgm_exception(&cpu->env, PGM_ADDRESSING, ILEN_AUTO);
+ trigger_pgm_exception(&cpu->env, PGM_ADDRESSING, ILEN_UNWIND);
/* On real machines this value is dropped into LowMem. Since this
is userland, simply put this someplace that cpu_loop can find it. */
cpu->env.__excp_addr = address;
@@ -179,24 +179,15 @@ bool s390_cpu_tlb_fill(CPUState *cs, vaddr address, int
size,
stq_phys(env_cpu(env)->as,
env->psa + offsetof(LowCore, trans_exc_code), tec);
}
- trigger_pgm_exception(env, excp, ILEN_AUTO);
- cpu_restore_state(cs, retaddr, true);
/*
- * The ILC value for code accesses is undefined. The important
- * thing here is to *not* leave env->int_pgm_ilen set to ILEN_AUTO,
- * which would cause do_program_interrupt to attempt to read from
- * env->psw.addr again. C.f. the condition in trigger_page_fault,
- * but is not universally applied.
- *
- * ??? If we remove ILEN_AUTO, by moving the computation of ILEN
- * into cpu_restore_state, then we may remove this entirely.
+ * For data accesses, ILEN will be filled in from the unwind info,
+ * within cpu_loop_exit_restore. For code accesses, retaddr == 0,
+ * and so unwinding will not occur. However, ILEN is also undefined
+ * for that case -- we choose to set ILEN = 2.
*/
- if (access_type == MMU_INST_FETCH) {
- env->int_pgm_ilen = 2;
- }
-
- cpu_loop_exit(cs);
+ trigger_pgm_exception(env, excp, 2);
+ cpu_loop_exit_restore(cs, retaddr);
}
static void do_program_interrupt(CPUS390XState *env)
--
2.17.1
- [PATCH v5 05/18] target/s390x: Push trigger_pgm_exception lower in s390_cpu_tlb_fill, (continued)
- [PATCH v5 05/18] target/s390x: Push trigger_pgm_exception lower in s390_cpu_tlb_fill, Richard Henderson, 2019/10/01
- [PATCH v5 06/18] target/s390x: Handle tec in s390_cpu_tlb_fill, Richard Henderson, 2019/10/01
- [PATCH v5 03/18] target/s390x: Remove ilen parameter from s390_program_interrupt, Richard Henderson, 2019/10/01
- [PATCH v5 04/18] target/s390x: Use tcg_s390_program_interrupt in TCG helpers, Richard Henderson, 2019/10/01
- [PATCH v5 08/18] target/s390x: Remove exc argument to mmu_translate_asce, Richard Henderson, 2019/10/01
- [PATCH v5 07/18] target/s390x: Return exception from mmu_translate_real, Richard Henderson, 2019/10/01
- [PATCH v5 09/18] target/s390x: Return exception from mmu_translate, Richard Henderson, 2019/10/01
- [PATCH v5 11/18] target/s390x: Remove fail variable from s390_cpu_tlb_fill, Richard Henderson, 2019/10/01
- [PATCH v5 10/18] target/s390x: Return exception from translate_pages, Richard Henderson, 2019/10/01
- [PATCH v5 12/18] target/s390x: Simplify helper_lra, Richard Henderson, 2019/10/01
- [PATCH v5 13/18] target/s390x: Rely on unwinding in s390_cpu_tlb_fill,
Richard Henderson <=
- [PATCH v5 14/18] target/s390x: Rely on unwinding in s390_cpu_virt_mem_rw, Richard Henderson, 2019/10/01
- [PATCH v5 17/18] target/s390x: Remove ilen argument from trigger_pgm_exception, Richard Henderson, 2019/10/01
- [PATCH v5 18/18] target/s390x: Remove ILEN_UNWIND, Richard Henderson, 2019/10/01
- [PATCH v5 15/18] target/s390x: Remove ILEN_AUTO, Richard Henderson, 2019/10/01
- [PATCH v5 16/18] target/s390x: Remove ilen argument from trigger_access_exception, Richard Henderson, 2019/10/01
- Re: [PATCH v5 00/18] target/s390: Use tcg unwinding for ilen, David Hildenbrand, 2019/10/09