diff mbox

[RFC,4/5] target-s390x: function to adjust the length wrt page boundary

Message ID 1433244411-9693-5-git-send-email-aurelien@aurel32.net
State New
Headers show

Commit Message

Aurelien Jarno June 2, 2015, 11:26 a.m. UTC
This patch adds a function to adjust the length of a transfer so that
it doesn't cross a page boundary.

Cc: Alexander Graf <agraf@suse.de>
Cc: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
---
 target-s390x/mem_helper.c | 11 +++++++++++
 1 file changed, 11 insertions(+)
diff mbox

Patch

diff --git a/target-s390x/mem_helper.c b/target-s390x/mem_helper.c
index 9fe9ed7..f34f2e1 100644
--- a/target-s390x/mem_helper.c
+++ b/target-s390x/mem_helper.c
@@ -55,6 +55,17 @@  void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
 #endif
 
 #ifndef CONFIG_USER_ONLY
+
+/* 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)
+{
+    if ((addr & TARGET_PAGE_MASK) != ((addr + len - 1) & TARGET_PAGE_MASK)) {
+        return -addr & ~TARGET_PAGE_MASK;
+    } else {
+        return len;
+    }
+}
+
 static void mvc_fast_memset(CPUS390XState *env, uint32_t l, uint64_t dest,
                             uint8_t byte)
 {