accel/tcg: allow to invalidate a write TLB entry immediately
commitf52bfb12143e29d7c8bd827bdb751aee47a9694e
authorDavid Hildenbrand <david@redhat.com>
Mon, 16 Oct 2017 20:23:57 +0000 (16 22:23 +0200)
committerCornelia Huck <cohuck@redhat.com>
Fri, 20 Oct 2017 11:32:10 +0000 (20 13:32 +0200)
tree2176cb2e9e24ed4a44f5579664fcb84a3724c56e
parentd0a5cc5bf4cf8e4d7d14597dd57be526c3e9d76f
accel/tcg: allow to invalidate a write TLB entry immediately

Background: s390x implements Low-Address Protection (LAP). If LAP is
enabled, writing to effective addresses (before any translation)
0-511 and 4096-4607 triggers a protection exception.

So we have subpage protection on the first two pages of every address
space (where the lowcore - the CPU private data resides).

By immediately invalidating the write entry but allowing the caller to
continue, we force every write access onto these first two pages into
the slow path. we will get a tlb fault with the specific accessed
addresses and can then evaluate if protection applies or not.

We have to make sure to ignore the invalid bit if tlb_fill() succeeds.

Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20171016202358.3633-2-david@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
accel/tcg/cputlb.c
accel/tcg/softmmu_template.h
include/exec/cpu-all.h