[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 13/29] s390x/mmu: Add support for read-only regions
From: |
Christian Borntraeger |
Subject: |
[Qemu-devel] [PULL 13/29] s390x/mmu: Add support for read-only regions |
Date: |
Wed, 18 Feb 2015 21:22:07 +0100 |
From: Thomas Huth <address@hidden>
If the "DAT-protection" bit is set in the region table entry and EDAT is
enabled, only read accesses are allowed in the corresponding memory area.
Signed-off-by: Thomas Huth <address@hidden>
Signed-off-by: Jens Freimann <address@hidden>
Reviewed-by: David Hildenbrand <address@hidden>
Reviewed-by: Cornelia Huck <address@hidden>
Signed-off-by: Christian Borntraeger <address@hidden>
---
target-s390x/cpu.h | 1 +
target-s390x/mmu_helper.c | 7 ++++---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
index c0016b6..08cdb15 100644
--- a/target-s390x/cpu.h
+++ b/target-s390x/cpu.h
@@ -837,6 +837,7 @@ struct sysib_322 {
#define _ASCE_TABLE_LENGTH 0x03 /* region table length
*/
#define _REGION_ENTRY_ORIGIN ~0xfffULL /* region/segment table origin
*/
+#define _REGION_ENTRY_RO 0x200 /* region/segment protection bit
*/
#define _REGION_ENTRY_TF 0xc0 /* region/segment table offset
*/
#define _REGION_ENTRY_INV 0x20 /* invalid region table entry
*/
#define _REGION_ENTRY_TYPE_MASK 0x0c /* region/segment table type mask
*/
diff --git a/target-s390x/mmu_helper.c b/target-s390x/mmu_helper.c
index 0c53ae9..702e8b8 100644
--- a/target-s390x/mmu_helper.c
+++ b/target-s390x/mmu_helper.c
@@ -188,9 +188,6 @@ static int mmu_translate_region(CPUS390XState *env,
target_ulong vaddr,
return -1;
}
- /* XXX region protection flags */
- /* *flags &= ~PAGE_WRITE */
-
if (level == _ASCE_TYPE_SEGMENT) {
return mmu_translate_segment(env, vaddr, asc, new_entry, raddr, flags,
rw, exc);
@@ -205,6 +202,10 @@ static int mmu_translate_region(CPUS390XState *env,
target_ulong vaddr,
return -1;
}
+ if ((env->cregs[0] & CR0_EDAT) && (new_entry & _REGION_ENTRY_RO)) {
+ *flags &= ~PAGE_WRITE;
+ }
+
/* yet another region */
return mmu_translate_region(env, vaddr, asc, new_entry, level - 4,
raddr, flags, rw, exc);
--
1.9.3
- [Qemu-devel] [PULL 00/29] s390x guest reipl and page table handling, Christian Borntraeger, 2015/02/18
- [Qemu-devel] [PULL 12/29] s390x/mmu: Fix the exception codes for illegal table entries, Christian Borntraeger, 2015/02/18
- [Qemu-devel] [PULL 13/29] s390x/mmu: Add support for read-only regions,
Christian Borntraeger <=
- [Qemu-devel] [PULL 16/29] s390x/mmu: Clean up mmu_translate_asc(), Christian Borntraeger, 2015/02/18
- [Qemu-devel] [PULL 21/29] s390x/ioinst: Rework memory access in SSCH instruction, Christian Borntraeger, 2015/02/18
- [Qemu-devel] [PULL 18/29] s390x/mmu: Add function for accessing guest memory, Christian Borntraeger, 2015/02/18
- [Qemu-devel] [PULL 02/29] s390x/ipl: support diagnose 308 subcodes 5 and 6, Christian Borntraeger, 2015/02/18
- [Qemu-devel] [PULL 19/29] s390x/css: Make schib parameter of css_do_msch const, Christian Borntraeger, 2015/02/18
- [Qemu-devel] [PULL 09/29] s390x/mmu: Skip exceptions properly when translating addresses for debug, Christian Borntraeger, 2015/02/18
- [Qemu-devel] [PULL 08/29] s390x/mmu: Check table length and offset fields, Christian Borntraeger, 2015/02/18
- [Qemu-devel] [PULL 14/29] s390x/mmu: Renaming related to the ASCE confusion, Christian Borntraeger, 2015/02/18
- [Qemu-devel] [PULL 04/29] s390x/ipl: make s390x ipl device aware of migration, Christian Borntraeger, 2015/02/18
- [Qemu-devel] [PULL 25/29] s390x/ioinst: Rework memory access in STCRW instruction, Christian Borntraeger, 2015/02/18