From: Aurelien Jarno Date: Fri, 12 Jun 2015 22:45:50 +0000 (+0200) Subject: target-s390x: function to adjust the length wrt page boundary X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=d7ce6b7a0ba4328a286d09d96395a8fc2fd6943c;p=people%2Fliuw%2Flibxenctrl-split%2Fqemu-xen.git 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 --- diff --git a/target-s390x/mem_helper.c b/target-s390x/mem_helper.c index b4e5d4401..b8d3a5fe2 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)