On 01/28/2012 08:13 PM, Blue Swirl wrote: > 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.
Is the ram_addr_t even legal? ram addresses start from 0 and end up around ~(ram_addr_t)0 >> 1, max. > Reported-by: Stefan Berger <stef...@linux.vnet.ibm.com> > Signed-off-by: Blue Swirl <blauwir...@gmail.com> > --- > 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; > } > } -- error compiling committee.c: too many arguments to function