Commit b8e7b2fe authored by David Hildenbrand's avatar David Hildenbrand
Browse files

s390x/tcg: MVCLU: Fault-safe handling



The last remaining bit is padding with two bytes.

Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
parent b7809f36
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -925,15 +925,17 @@ static inline uint32_t do_mvcl(CPUS390XState *env,
        access_memset(env, &desta, pad, ra);
        *dest = wrap_address(env, *dest + len);
    } else {
        desta = access_prepare(env, *dest, len, MMU_DATA_STORE, mmu_idx, ra);

        /* The remaining length selects the padding byte. */
        for (i = 0; i < len; (*destlen)--, i++) {
            if (*destlen & 1) {
                cpu_stb_data_ra(env, *dest, pad, ra);
                access_set_byte(env, &desta, i, pad, ra);
            } else {
                cpu_stb_data_ra(env, *dest, pad >> 8, ra);
                access_set_byte(env, &desta, i, pad >> 8, ra);
            }
            *dest = wrap_address(env, *dest + 1);
        }
        *dest = wrap_address(env, *dest + len);
    }

    return *destlen ? 3 : cc;