All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cornelia Huck <cohuck@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-s390x@nongnu.org,
	Richard Henderson <richard.henderson@linaro.org>,
	qemu-devel@nongnu.org, David Hildenbrand <david@redhat.com>
Subject: [Qemu-devel] [PULL 27/34] s390x/tcg: MVST: Fault-safe handling
Date: Thu, 19 Sep 2019 14:41:08 +0200	[thread overview]
Message-ID: <20190919124115.11510-28-cohuck@redhat.com> (raw)
In-Reply-To: <20190919124115.11510-1-cohuck@redhat.com>

From: David Hildenbrand <david@redhat.com>

Access at most single pages and document why. Using the access helpers
might over-indicate watchpoints within the same page, I guess we can
live with that.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
 target/s390x/mem_helper.c | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index c836b69fcc12..671e917dc1f8 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -860,23 +860,33 @@ uint32_t HELPER(mvpg)(CPUS390XState *env, uint64_t r0, uint64_t r1, uint64_t r2)
 /* string copy */
 uint32_t HELPER(mvst)(CPUS390XState *env, uint32_t r1, uint32_t r2)
 {
+    const int mmu_idx = cpu_mmu_index(env, false);
     const uint64_t d = get_address(env, r1);
     const uint64_t s = get_address(env, r2);
     const uint8_t c = env->regs[0];
+    const int len = MIN(-(d | TARGET_PAGE_MASK), -(s | TARGET_PAGE_MASK));
+    S390Access srca, desta;
     uintptr_t ra = GETPC();
-    uint32_t len;
+    int i;
 
     if (env->regs[0] & 0xffffff00ull) {
         s390_program_interrupt(env, PGM_SPECIFICATION, ILEN_AUTO, ra);
     }
 
-    /* Lest we fail to service interrupts in a timely manner, limit the
-       amount of work we're willing to do.  For now, let's cap at 8k.  */
-    for (len = 0; len < 0x2000; ++len) {
-        uint8_t v = cpu_ldub_data_ra(env, s + len, ra);
-        cpu_stb_data_ra(env, d + len, v, ra);
+    /*
+     * Our access should not exceed single pages, as we must not report access
+     * exceptions exceeding the actually copied range (which we don't know at
+     * this point). We might over-indicate watchpoints within the pages
+     * (if we ever care, we have to limit processing to a single byte).
+     */
+    srca = access_prepare(env, s, len, MMU_DATA_LOAD, mmu_idx, ra);
+    desta = access_prepare(env, d, len, MMU_DATA_STORE, mmu_idx, ra);
+    for (i = 0; i < len; i++) {
+        const uint8_t v = access_get_byte(env, &srca, i, ra);
+
+        access_set_byte(env, &desta, i, v, ra);
         if (v == c) {
-            set_address_zero(env, r1, d + len);
+            set_address_zero(env, r1, d + i);
             return 1;
         }
     }
-- 
2.20.1



  parent reply	other threads:[~2019-09-19 13:03 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-19 12:40 [Qemu-devel] [PULL 00/34] s390x update Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 01/34] s390x/tcg: Reset exception_index to -1 instead of 0 Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 02/34] s390x/tcg: MVCL: Zero out unused bits of address Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 03/34] s390x/tcg: MVCL: Detect destructive overlaps Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 04/34] s390x/tcg: MVCL: Process max 4k bytes at a time Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 05/34] s390x/tcg: MVC: Increment the length once Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 06/34] s390x/tcg: MVC: Use is_destructive_overlap() Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 07/34] s390x/tcg: MVPG: Check for specification exceptions Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 08/34] s390x/tcg: MVPG: Properly wrap the addresses Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 09/34] s390x/tcg: MVCLU/MVCLE: Process max 4k bytes at a time Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 10/34] s390x/tcg: MVCS/MVCP: Check for special operation exceptions Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 11/34] s390x/tcg: MVCOS: Lengths are 32 bit in 24/31-bit mode Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 12/34] s390x/tcg: MVCS/MVCP: Properly wrap the length Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 13/34] s390x/tcg: MVST: Check for specification exceptions Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 14/34] s390x/tcg: MVST: Fix storing back the addresses to registers Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 15/34] s390x/tcg: Always use MMU_USER_IDX for CONFIG_USER_ONLY Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 16/34] s390x/tcg: Fault-safe memset Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 17/34] s390x/tcg: Fault-safe memmove Cornelia Huck
2019-09-19 12:40 ` [Qemu-devel] [PULL 18/34] s390x/tcg: MVCS/MVCP: Use access_memmove() Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 19/34] s390x/tcg: MVC: Fault-safe handling on destructive overlaps Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 20/34] s390x/tcg: MVCLU: Fault-safe handling Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 21/34] s390x/tcg: OC: " Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 22/34] s390x/tcg: XC: " Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 23/34] s390x/tcg: NC: " Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 24/34] s390x/tcg: MVCIN: " Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 25/34] s390x/tcg: MVN: " Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 26/34] s390x/tcg: MVZ: " Cornelia Huck
2019-09-19 12:41 ` Cornelia Huck [this message]
2019-09-19 12:41 ` [Qemu-devel] [PULL 28/34] s390x/tcg: MVO: " Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 29/34] tests/tcg: target/s390x: Test MVO Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 30/34] pc-bios/s390-ccw: Do not pre-initialize empty array Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 31/34] pc-bios/s390-ccw/net: fix a possible memory leak in get_uuid() Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 32/34] pc-bios/s390-ccw: Rebuild the s390-netboot.img firmware image Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 33/34] s390x/kvm: Officially require at least kernel 3.15 Cornelia Huck
2019-09-19 12:41 ` [Qemu-devel] [PULL 34/34] s390x/cpumodel: Add the z15 name to the description of gen15a Cornelia Huck
2019-09-20 10:45 ` [PULL 00/34] s390x update Peter Maydell
2019-09-20 11:00   ` Cornelia Huck
2019-09-20 11:51     ` David Hildenbrand
2019-09-20 11:59       ` David Hildenbrand
2019-09-20 13:32         ` Cornelia Huck
2019-09-20 13:41           ` Peter Maydell
2019-09-20 15:34             ` David Hildenbrand

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=20190919124115.11510-28-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 \
    --cc=richard.henderson@linaro.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.