Commit 97b95aae authored by David Hildenbrand's avatar David Hildenbrand Committed by Richard Henderson
Browse files

target/s390x: Improve heuristic for ipte



If only the page index is set, most likely we don't have a valid
virtual address. Let's do a full tlb flush for that case.

Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
Message-Id: <20170622094151.28633-3-david@redhat.com>
Signed-off-by: default avatarRichard Henderson <rth@twiddle.net>
parent faf1c63d
Loading
Loading
Loading
Loading
+16 −9
Original line number Diff line number Diff line
@@ -1630,16 +1630,23 @@ void HELPER(ipte)(CPUS390XState *env, uint64_t pto, uint64_t vaddr,
    /* XXX we exploit the fact that Linux passes the exact virtual
       address here - it's not obliged to! */
    if (m4 & 1) {
        if (vaddr & ~VADDR_PX) {
            tlb_flush_page(cs, page);
    } else {
        tlb_flush_page_all_cpus_synced(cs, page);
    }

            /* XXX 31-bit hack */
    if (m4 & 1) {
            tlb_flush_page(cs, page ^ 0x80000000);
        } else {
            /* looks like we don't have a valid virtual address */
            tlb_flush(cs);
        }
    } else {
        if (vaddr & ~VADDR_PX) {
            tlb_flush_page_all_cpus_synced(cs, page);
            /* XXX 31-bit hack */
            tlb_flush_page_all_cpus_synced(cs, page ^ 0x80000000);
        } else {
            /* looks like we don't have a valid virtual address */
            tlb_flush_all_cpus_synced(cs);
        }
    }
}