[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 41/70] target/s390x: remove some Linux assumptions
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PULL v2 41/70] target/s390x: remove some Linux assumptions from IPTE |
Date: |
Tue, 6 Jun 2017 17:30:50 -0700 |
From: Aurelien Jarno <address@hidden>
Signed-off-by: Aurelien Jarno <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Richard Henderson <address@hidden>
---
target/s390x/cpu.h | 2 ++
target/s390x/mem_helper.c | 17 ++++++++++-------
target/s390x/mmu_helper.c | 2 --
3 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index fdb2f50..a4d31df 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -1035,6 +1035,8 @@ struct sysib_322 {
#define _SEGMENT_ENTRY_RO 0x200 /* page protection bit
*/
#define _SEGMENT_ENTRY_INV 0x20 /* invalid segment table entry
*/
+#define VADDR_PX 0xff000 /* page index bits
*/
+
#define _PAGE_RO 0x200 /* HW read-only bit */
#define _PAGE_INVALID 0x400 /* HW invalid bit */
#define _PAGE_RES0 0x800 /* bit must be zero */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index e35571e..0ebd65d 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1073,19 +1073,22 @@ uint32_t HELPER(mvcp)(CPUS390XState *env, uint64_t l,
uint64_t a1, uint64_t a2)
}
/* invalidate pte */
-void HELPER(ipte)(CPUS390XState *env, uint64_t pte_addr, uint64_t vaddr)
+void HELPER(ipte)(CPUS390XState *env, uint64_t pto, uint64_t vaddr)
{
CPUState *cs = CPU(s390_env_get_cpu(env));
uint64_t page = vaddr & TARGET_PAGE_MASK;
- uint64_t pte = 0;
+ uint64_t pte_addr, pte;
/* XXX broadcast to other CPUs */
- /* XXX Linux is nice enough to give us the exact pte address.
- According to spec we'd have to find it out ourselves */
- /* XXX Linux is fine with overwriting the pte, the spec requires
- us to only set the invalid bit */
- stq_phys(cs->as, pte_addr, pte | _PAGE_INVALID);
+ /* Compute the page table entry address */
+ pte_addr = (pto & _SEGMENT_ENTRY_ORIGIN);
+ pte_addr += (vaddr & _VADDR_PX) >> 9;
+
+ /* Mark the page table entry as invalid */
+ pte = ldq_phys(cs->as, pte_addr);
+ pte |= _PAGE_INVALID;
+ stq_phys(cs->as, pte_addr, pte);
/* XXX we exploit the fact that Linux passes the exact virtual
address here - it's not obliged to! */
diff --git a/target/s390x/mmu_helper.c b/target/s390x/mmu_helper.c
index 31eb9ef..501e390 100644
--- a/target/s390x/mmu_helper.c
+++ b/target/s390x/mmu_helper.c
@@ -143,8 +143,6 @@ static int mmu_translate_pte(CPUS390XState *env,
target_ulong vaddr,
return 0;
}
-#define VADDR_PX 0xff000 /* Page index bits */
-
/* Decode segment table entry */
static int mmu_translate_segment(CPUS390XState *env, target_ulong vaddr,
uint64_t asc, uint64_t st_entry,
--
2.9.4
- [Qemu-devel] [PULL v2 32/70] target/s390x: Fix EXECUTE with R1==0, (continued)
- [Qemu-devel] [PULL v2 32/70] target/s390x: Fix EXECUTE with R1==0, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 29/70] target/s390x: Use unwind data for helper_lra, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 31/70] target/s390x: Fix some helper_ex problems, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 34/70] target/s390x: Implement CSPG, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 33/70] target/s390x: Use atomic operations for COMPARE SWAP PURGE, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 36/70] target/s390x: End the TB after EXECUTE, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 37/70] target/s390x: Implement EXECUTE via new TranslationBlock, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 35/70] target/s390x: Save current ilen during translation, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 38/70] target/s390x: Re-implement a few EXECUTE target insns directly, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 40/70] target/s390x: remove dead code in translate.c, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 41/70] target/s390x: remove some Linux assumptions from IPTE,
Richard Henderson <=
- [Qemu-devel] [PULL v2 39/70] target/s390x/cpu_models: Allow some additional feature bits for the "qemu" CPU, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 43/70] target/s390x: implement TEST AND SET, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 42/70] target/s390x: implement local-TLB-clearing in IPTE, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 44/70] target/s390x: implement TEST ADDRESSING MODE, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 45/70] target/s390x: implement PACK, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 46/70] target/s390x: implement COMPARE AND SIGNAL, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 48/70] target/s390x: implement MOVE NUMERICS, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 47/70] target/s390x: implement MOVE INVERSE, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 49/70] target/s390x: implement MOVE WITH OFFSET, Richard Henderson, 2017/06/06
- [Qemu-devel] [PULL v2 50/70] target/s390x: implement MOVE ZONES, Richard Henderson, 2017/06/06