From fb378616b9aeab9032fa3c2341724529002fcea9 Mon Sep 17 00:00:00 2001 Message-Id: From: Blue Swirl Date: Sat, 28 Jan 2012 18:02:08 +0000 Subject: [PATCH] exec-obsolete: fix length handling Fix suspend/resume broken by off-by-one error in 59abb06198ee9471e29c970f294eae80c0b39be1. Adjust the loop so that it handles correctly the case start = (ram_addr_t)-TARGET_PAGE_SIZE, length = TARGET_PAGE_SIZE. Reported-by: Stefan Berger Signed-off-by: Blue Swirl --- exec-obsolete.h | 10 ++++------ 1 files changed, 4 insertions(+), 6 deletions(-) diff --git a/exec-obsolete.h b/exec-obsolete.h index 03cf35e..1bba970 100644 --- a/exec-obsolete.h +++ b/exec-obsolete.h @@ -81,11 +81,10 @@ static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, int dirty_flags) { uint8_t *p; - ram_addr_t addr, end; + ram_addr_t cur; - end = start + length; p = ram_list.phys_dirty + (start >> TARGET_PAGE_BITS); - for (addr = start; addr <= end; addr += TARGET_PAGE_SIZE) { + for (cur = 0; cur < length; cur += TARGET_PAGE_SIZE) { *p++ |= dirty_flags; } } @@ -96,12 +95,11 @@ static inline void cpu_physical_memory_mask_dirty_range(ram_addr_t start, { int mask; uint8_t *p; - ram_addr_t addr, end; + ram_addr_t cur; - end = start + length; mask = ~dirty_flags; p = ram_list.phys_dirty + (start >> TARGET_PAGE_BITS); - for (addr = start; addr <= end; addr += TARGET_PAGE_SIZE) { + for (cur = 0; cur < length; cur += TARGET_PAGE_SIZE) { *p++ &= mask; } } -- 1.7.2.5