From d7ce6b7a0ba4328a286d09d96395a8fc2fd6943c Mon Sep 17 00:00:00 2001 From: Aurelien Jarno Date: Sat, 13 Jun 2015 00:45:50 +0200 Subject: target-s390x: function to adjust the length wrt page boundary This patch adds a function to adjust the length of a transfer so that it doesn't cross a page boundary in softmmu mode. It does nothing in user mode. Signed-off-by: Aurelien Jarno Signed-off-by: Alexander Graf --- target-s390x/mem_helper.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'target-s390x') diff --git a/target-s390x/mem_helper.c b/target-s390x/mem_helper.c index b4e5d44..b8d3a5f 100644 --- a/target-s390x/mem_helper.c +++ b/target-s390x/mem_helper.c @@ -54,6 +54,17 @@ void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx, #define HELPER_LOG(x...) #endif +/* Reduce the length so that addr + len doesn't cross a page boundary. */ +static inline uint64_t adj_len_to_page(uint64_t len, uint64_t addr) +{ +#ifndef CONFIG_USER_ONLY + if ((addr & ~TARGET_PAGE_MASK) + len - 1 >= TARGET_PAGE_SIZE) { + return -addr & ~TARGET_PAGE_MASK; + } +#endif + return len; +} + #ifndef CONFIG_USER_ONLY static void mvc_fast_memset(CPUS390XState *env, uint32_t l, uint64_t dest, uint8_t byte) -- cgit v1.1