address_space_read/write() is meant for accessing random amount of memory blobs. When the access size is known, use the address_space_ld/st() API which can directly swap endianness.
Reviewed-by: Thomas Huth <[email protected]> Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- target/s390x/mmu_helper.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/target/s390x/mmu_helper.c b/target/s390x/mmu_helper.c index 026502a3e40..30f09ec3de4 100644 --- a/target/s390x/mmu_helper.c +++ b/target/s390x/mmu_helper.c @@ -108,6 +108,7 @@ static inline bool read_table_entry(CPUS390XState *env, hwaddr gaddr, uint64_t *entry) { CPUState *cs = env_cpu(env); + MemTxResult ret; /* * According to the PoP, these table addresses are "unpredictably real @@ -116,13 +117,9 @@ static inline bool read_table_entry(CPUS390XState *env, hwaddr gaddr, * * We treat them as absolute addresses and don't wrap them. */ - if (unlikely(address_space_read(cs->as, gaddr, MEMTXATTRS_UNSPECIFIED, - entry, sizeof(*entry)) != - MEMTX_OK)) { - return false; - } - *entry = be64_to_cpu(*entry); - return true; + *entry = address_space_ldq_be(cs->as, gaddr, MEMTXATTRS_UNSPECIFIED, &ret); + + return ret == MEMTX_OK; } static int mmu_translate_asce(CPUS390XState *env, target_ulong vaddr, -- 2.52.0
