[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 09/31] s390x/mmu: Implement ESOP-2 and access-exception-fetch/stor
From: |
David Hildenbrand |
Subject: |
[PULL 09/31] s390x/mmu: Implement ESOP-2 and access-exception-fetch/store-indication facility |
Date: |
Thu, 10 Oct 2019 13:33:34 +0200 |
We already implement ESOP-1. For ESOP-2, we only have to indicate all
protection exceptions properly. Due to EDAT-1, we already indicate DAT
exceptions properly. We don't trigger KCP/ALCP/IEP exceptions yet.
So all we have to do is set the TEID (TEC) to the right values
(bit 56, 60, 61) in case of LAP.
We don't have any side-effects (e.g., no guarded-storage facility),
therefore, bit 64 of the TEID (TEC) is always 0.
We always have to indicate whether it is a fetch or a store for all access
exceptions. This is only missing for LAP exceptions.
Acked-by: Thomas Huth <address@hidden>
Signed-off-by: David Hildenbrand <address@hidden>
---
target/s390x/mmu_helper.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/target/s390x/mmu_helper.c b/target/s390x/mmu_helper.c
index e27e21328b..06502bd25d 100644
--- a/target/s390x/mmu_helper.c
+++ b/target/s390x/mmu_helper.c
@@ -380,7 +380,9 @@ int mmu_translate(CPUS390XState *env, target_ulong vaddr,
int rw, uint64_t asc,
*flags |= PAGE_WRITE_INV;
if (is_low_address(vaddr) && rw == MMU_DATA_STORE) {
if (exc) {
- trigger_access_exception(env, PGM_PROTECTION, ILEN_AUTO, 0);
+ /* LAP sets bit 56 */
+ tec |= 0x80;
+ trigger_access_exception(env, PGM_PROTECTION, ilen, tec);
}
return -EACCES;
}
@@ -536,6 +538,9 @@ void s390_cpu_virt_mem_handle_exc(S390CPU *cpu, uintptr_t
ra)
int mmu_translate_real(CPUS390XState *env, target_ulong raddr, int rw,
target_ulong *addr, int *flags)
{
+ /* Code accesses have an undefined ilc, let's use 2 bytes. */
+ uint64_t tec = (raddr & TARGET_PAGE_MASK) |
+ (rw == MMU_DATA_STORE ? FS_WRITE : FS_READ);
const bool lowprot_enabled = env->cregs[0] & CR0_LOWPROT;
*flags = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
@@ -543,7 +548,9 @@ int mmu_translate_real(CPUS390XState *env, target_ulong
raddr, int rw,
/* see comment in mmu_translate() how this works */
*flags |= PAGE_WRITE_INV;
if (is_low_address(raddr) && rw == MMU_DATA_STORE) {
- trigger_access_exception(env, PGM_PROTECTION, ILEN_AUTO, 0);
+ /* LAP sets bit 56 */
+ tec |= 0x80;
+ trigger_access_exception(env, PGM_PROTECTION, ILEN_AUTO, tec);
return -EACCES;
}
}
--
2.21.0
- [PULL 01/31] s390x/mmu: Drop debug logging from MMU code, (continued)
- [PULL 01/31] s390x/mmu: Drop debug logging from MMU code, David Hildenbrand, 2019/10/10
- [PULL 02/31] s390x/mmu: Move DAT protection handling out of mmu_translate_asce(), David Hildenbrand, 2019/10/10
- [PULL 03/31] s390x/mmu: Inject DAT exceptions from a single place, David Hildenbrand, 2019/10/10
- [PULL 05/31] s390x/mmu: Use TARGET_PAGE_MASK in mmu_translate_pte(), David Hildenbrand, 2019/10/10
- [PULL 04/31] s390x/mmu: Inject PGM_ADDRESSING on bogus table addresses, David Hildenbrand, 2019/10/10
- [PULL 08/31] s390x/mmu: Add EDAT2 translation support, David Hildenbrand, 2019/10/10
- [PULL 06/31] s390x/mmu: DAT table definition overhaul, David Hildenbrand, 2019/10/10
- [PULL 10/31] s390x/mmu: Implement Instruction-Execution-Protection Facility, David Hildenbrand, 2019/10/10
- [PULL 07/31] s390x/mmu: Convert to non-recursive page table walk, David Hildenbrand, 2019/10/10
- [PULL 11/31] s390x/cpumodel: Prepare for changes of QEMU model, David Hildenbrand, 2019/10/10
- [PULL 09/31] s390x/mmu: Implement ESOP-2 and access-exception-fetch/store-indication facility,
David Hildenbrand <=
- [PULL 12/31] s390x/cpumodel: Add new TCG features to QEMU cpu model, David Hildenbrand, 2019/10/10
- [PULL 13/31] target/s390x: Add ilen to unwind data, David Hildenbrand, 2019/10/10
- [PULL 14/31] target/s390x: Remove ilen parameter from tcg_s390_program_interrupt, David Hildenbrand, 2019/10/10
- [PULL 15/31] target/s390x: Remove ilen parameter from s390_program_interrupt, David Hildenbrand, 2019/10/10
- [PULL 16/31] target/s390x: Use tcg_s390_program_interrupt in TCG helpers, David Hildenbrand, 2019/10/10
- [PULL 17/31] target/s390x: Push trigger_pgm_exception lower in s390_cpu_tlb_fill, David Hildenbrand, 2019/10/10
- [PULL 18/31] target/s390x: Handle tec in s390_cpu_tlb_fill, David Hildenbrand, 2019/10/10
- [PULL 19/31] target/s390x: Return exception from mmu_translate_real, David Hildenbrand, 2019/10/10