]> xenbits.xensource.com Git - qemu-upstream-4.3-testing.git/commitdiff
s390x: make ipte 31-bit aware
authorAlexander Graf <agraf@suse.de>
Thu, 14 Jul 2011 09:45:07 +0000 (11:45 +0200)
committerAlexander Graf <agraf@suse.de>
Mon, 14 Nov 2011 16:47:26 +0000 (17:47 +0100)
When running 31-bit code we can potentially map the same virtual
address twice - once as 0x0yyyyyyy and once as 0x8yyyyyyy, because
the upper bit gets ignored.

This also should be reflected in the tlb invalidation path, so we
really invalidate also the transparently created tlb entries.

Signed-off-by: Alexander Graf <agraf@suse.de>
target-s390x/op_helper.c

index e5941187aefeb4f12a6de21f4c541256a8a6bd1c..2f46bdd0ff1afc4ea471cb6583962ddb1467d4d6 100644 (file)
@@ -2950,6 +2950,13 @@ void HELPER(ipte)(uint64_t pte_addr, uint64_t vaddr)
     /* XXX we exploit the fact that Linux passes the exact virtual
            address here - it's not obliged to! */
     tlb_flush_page(env, page);
+
+    /* XXX 31-bit hack */
+    if (page & 0x80000000) {
+        tlb_flush_page(env, page & ~0x80000000);
+    } else {
+        tlb_flush_page(env, page | 0x80000000);
+    }
 }
 
 /* flush local tlb */