qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] exec-obsolete: fix length handling


From: Blue Swirl
Subject: Re: [Qemu-devel] [PATCH] exec-obsolete: fix length handling
Date: Sun, 29 Jan 2012 11:37:52 +0000

On Sun, Jan 29, 2012 at 10:22, Avi Kivity <address@hidden> wrote:
> 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.

Is that defined somewhere? I think only the size of host virtual
address space should limit the range, for example on a 32 bit host,
near to 3GB should be possible as limited by host OS.

Anyway, this version is closer to your original code and should be
equal or better otherwise to current broken code.

>> Reported-by: Stefan Berger <address@hidden>
>> Signed-off-by: Blue Swirl <address@hidden>
>> ---
>>  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
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]