s390x/tcg: convert real to absolute address for RRBE, SSKE and ISKE

For RRBE, SSKE, and ISKE, we're dealing with real addresses, so we have to
convert to an absolute address first.

In the future, when adding EDAT1 support, we'll have to pay attention to
SSKE handling, as we'll be dealing with absolute addresses when the
multiple-block control is one.

Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20210903155514.44772-4-david@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
David Hildenbrand 2021-09-03 17:55:04 +02:00 committed by Thomas Huth
parent fe00c705fe
commit 06d8a10a70
1 changed files with 3 additions and 0 deletions

View File

@ -2177,6 +2177,7 @@ uint64_t HELPER(iske)(CPUS390XState *env, uint64_t r2)
uint64_t addr = wrap_address(env, r2);
uint8_t key;
addr = mmu_real2abs(env, addr);
if (addr > ms->ram_size) {
return 0;
}
@ -2201,6 +2202,7 @@ void HELPER(sske)(CPUS390XState *env, uint64_t r1, uint64_t r2)
uint64_t addr = wrap_address(env, r2);
uint8_t key;
addr = mmu_real2abs(env, addr);
if (addr > ms->ram_size) {
return;
}
@ -2228,6 +2230,7 @@ uint32_t HELPER(rrbe)(CPUS390XState *env, uint64_t r2)
static S390SKeysClass *skeyclass;
uint8_t re, key;
addr = mmu_real2abs(env, addr);
if (addr > ms->ram_size) {
return 0;
}