qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Cornelia Huck <cohuck@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-s390x@nongnu.org, qemu-devel@nongnu.org,
	David Hildenbrand <david@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>
Subject: [Qemu-devel] [PULL 28/33] s390x/tcg: Provide probe_write_access helper
Date: Mon, 11 Mar 2019 10:03:17 +0100	[thread overview]
Message-ID: <20190311090322.21603-29-cohuck@redhat.com> (raw)
In-Reply-To: <20190311090322.21603-1-cohuck@redhat.com>

From: David Hildenbrand <david@redhat.com>

Instead of checking e.g. the first access on every touched page, we should
check the actual access, otherwise we might get false positives when Low
Address Protection (LAP) is active. As probe_write() can only deal with
accesses to one page, we have to loop.

Use i64 for the length, although not needed - easier to reuse
TCG temps we already have in the translation functions where this will
be used. Also allow it to be used from other helpers.

Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20190307121539.12842-28-david@redhat.com>
[CH: add missing page_check_range()]
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
 target/s390x/helper.h     |  1 +
 target/s390x/internal.h   |  2 ++
 target/s390x/mem_helper.c | 26 ++++++++++++++++++++++++++
 3 files changed, 29 insertions(+)

diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 577edb384fe6..e2710f4fb33b 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -123,6 +123,7 @@ DEF_HELPER_4(cu42, i32, env, i32, i32, i32)
 DEF_HELPER_5(msa, i32, env, i32, i32, i32, i32)
 DEF_HELPER_FLAGS_1(stpt, TCG_CALL_NO_RWG, i64, env)
 DEF_HELPER_FLAGS_1(stck, TCG_CALL_NO_RWG_SE, i64, env)
+DEF_HELPER_FLAGS_3(probe_write_access, TCG_CALL_NO_WG, void, env, i64, i64)
 
 /* === Vector Support Instructions === */
 DEF_HELPER_FLAGS_4(vll, TCG_CALL_NO_WG, void, env, ptr, i64, i64)
diff --git a/target/s390x/internal.h b/target/s390x/internal.h
index 07b69b8ea000..3b4855c17502 100644
--- a/target/s390x/internal.h
+++ b/target/s390x/internal.h
@@ -349,6 +349,8 @@ void ioinst_handle_sal(S390CPU *cpu, uint64_t reg1, uintptr_t ra);
 
 /* mem_helper.c */
 target_ulong mmu_real2abs(CPUS390XState *env, target_ulong raddr);
+void probe_write_access(CPUS390XState *env, uint64_t addr, uint64_t len,
+                        uintptr_t ra);
 
 
 /* mmu_helper.c */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index a506d9ef99f7..3f76a8abfd37 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -2623,3 +2623,29 @@ uint32_t HELPER(cu42)(CPUS390XState *env, uint32_t r1, uint32_t r2, uint32_t m3)
     return convert_unicode(env, r1, r2, m3, GETPC(),
                            decode_utf32, encode_utf16);
 }
+
+void probe_write_access(CPUS390XState *env, uint64_t addr, uint64_t len,
+                        uintptr_t ra)
+{
+#ifdef CONFIG_USER_ONLY
+    if (!h2g_valid(addr) || !h2g_valid(addr + len - 1) ||
+        page_check_range(addr, len, PAGE_WRITE) < 0) {
+        s390_program_interrupt(env, PGM_ADDRESSING, ILEN_AUTO, ra);
+    }
+#else
+    /* test the actual access, not just any access to the page due to LAP */
+    while (len) {
+        const uint64_t pagelen = -(addr | -TARGET_PAGE_MASK);
+        const uint64_t curlen = MIN(pagelen, len);
+
+        probe_write(env, addr, curlen, cpu_mmu_index(env, false), ra);
+        addr = wrap_address(env, addr + curlen);
+        len -= curlen;
+    }
+#endif
+}
+
+void HELPER(probe_write_access)(CPUS390XState *env, uint64_t addr, uint64_t len)
+{
+    probe_write_access(env, addr, len, GETPC());
+}
-- 
2.17.2

  parent reply	other threads:[~2019-03-11  9:06 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-11  9:02 [Qemu-devel] [PULL 00/33] final s390x patches for 4.0 soft freeze Cornelia Huck
2019-03-11  9:02 ` [Qemu-devel] [PULL 01/33] target/s390x: Remove non-architected entries from struct LowCore Cornelia Huck
2019-03-11  9:02 ` [Qemu-devel] [PULL 02/33] s390x/tcg: Define vector instruction formats Cornelia Huck
2019-03-11  9:02 ` [Qemu-devel] [PULL 03/33] s390x/tcg: Check vector register instructions at central point Cornelia Huck
2019-03-11  9:02 ` [Qemu-devel] [PULL 04/33] s390x/tcg: Utilities for vector instruction helpers Cornelia Huck
2019-03-11  9:02 ` [Qemu-devel] [PULL 05/33] s390x/tcg: Implement VECTOR GATHER ELEMENT Cornelia Huck
2019-03-11  9:02 ` [Qemu-devel] [PULL 06/33] s390x/tcg: Implement VECTOR GENERATE BYTE MASK Cornelia Huck
2019-03-11  9:02 ` [Qemu-devel] [PULL 07/33] s390x/tcg: Implement VECTOR GENERATE MASK Cornelia Huck
2019-03-11  9:02 ` [Qemu-devel] [PULL 08/33] s390x/tcg: Implement VECTOR LOAD Cornelia Huck
2019-03-11  9:02 ` [Qemu-devel] [PULL 09/33] s390x/tcg: Implement VECTOR LOAD AND REPLICATE Cornelia Huck
2019-03-11  9:02 ` [Qemu-devel] [PULL 10/33] s390x/tcg: Implement VECTOR LOAD ELEMENT Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 11/33] s390x/tcg: Implement VECTOR LOAD ELEMENT IMMEDIATE Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 12/33] s390x/tcg: Implement VECTOR LOAD GR FROM VR ELEMENT Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 13/33] s390x/tcg: Implement VECTOR LOAD LOGICAL ELEMENT AND ZERO Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 14/33] s390x/tcg: Implement VECTOR LOAD MULTIPLE Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 15/33] s390x/tcg: Implement VECTOR LOAD TO BLOCK BOUNDARY Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 16/33] s390x/tcg: Implement VECTOR LOAD VR ELEMENT FROM GR Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 17/33] s390x/tcg: Implement VECTOR LOAD VR FROM GRS DISJOINT Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 18/33] s390x/tcg: Implement VECTOR LOAD WITH LENGTH Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 19/33] s390x/tcg: Implement VECTOR MERGE (HIGH|LOW) Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 20/33] s390x/tcg: Implement VECTOR PACK * Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 21/33] s390x/tcg: Implement VECTOR PERMUTE Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 22/33] s390x/tcg: Implement VECTOR PERMUTE DOUBLEWORD IMMEDIATE Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 23/33] s390x/tcg: Implement VECTOR REPLICATE Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 24/33] s390x/tcg: Implement VECTOR REPLICATE IMMEDIATE Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 25/33] s390x/tcg: Implement VECTOR SCATTER ELEMENT Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 26/33] s390x/tcg: Implement VECTOR SELECT Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 27/33] s390x/tcg: Implement VECTOR SIGN EXTEND TO DOUBLEWORD Cornelia Huck
2019-03-11  9:03 ` Cornelia Huck [this message]
2019-03-11  9:03 ` [Qemu-devel] [PULL 29/33] s390x/tcg: Implement VECTOR STORE Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 30/33] s390x/tcg: Implement VECTOR STORE ELEMENT Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 31/33] s390x/tcg: Implement VECTOR STORE MULTIPLE Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 32/33] s390x/tcg: Implement VECTOR STORE WITH LENGTH Cornelia Huck
2019-03-11  9:03 ` [Qemu-devel] [PULL 33/33] s390x/tcg: Implement VECTOR UNPACK * Cornelia Huck
2019-03-11  9:37 ` [Qemu-devel] [PULL 00/33] final s390x patches for 4.0 soft freeze no-reply
2019-03-11 17:16 ` Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190311090322.21603-29-cohuck@redhat.com \
    --to=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).