From: Thomas Huth <th...@linux.vnet.ibm.com> Bit 52 in a page table entry has always to be zero, or a translation specification exception is to be recognized.
Signed-off-by: Thomas Huth <th...@linux.vnet.ibm.com> Signed-off-by: Jens Freimann <jf...@linux.vnet.ibm.com> Reviewed-by: David Hildenbrand <d...@linux.vnet.ibm.com> Reviewed-by: Cornelia Huck <cornelia.h...@de.ibm.com> --- target-s390x/cpu.h | 1 + target-s390x/mmu_helper.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h index 08cdb15..c24ca5f 100644 --- a/target-s390x/cpu.h +++ b/target-s390x/cpu.h @@ -853,6 +853,7 @@ struct sysib_322 { #define _PAGE_RO 0x200 /* HW read-only bit */ #define _PAGE_INVALID 0x400 /* HW invalid bit */ +#define _PAGE_RES0 0x800 /* bit must be zero */ #define SK_C (0x1 << 1) #define SK_R (0x1 << 2) diff --git a/target-s390x/mmu_helper.c b/target-s390x/mmu_helper.c index 7dc9900..c183958 100644 --- a/target-s390x/mmu_helper.c +++ b/target-s390x/mmu_helper.c @@ -112,7 +112,10 @@ static int mmu_translate_pte(CPUS390XState *env, target_ulong vaddr, trigger_page_fault(env, vaddr, PGM_PAGE_TRANS, asc, rw, exc); return -1; } - + if (pt_entry & _PAGE_RES0) { + trigger_page_fault(env, vaddr, PGM_TRANS_SPEC, asc, rw, exc); + return -1; + } if (pt_entry & _PAGE_RO) { *flags &= ~PAGE_WRITE; } -- 2.1.4