From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH] memory: use signed arithmetic Date: Wed, 03 Aug 2011 01:06:40 +0300 Message-ID: <4E3874F0.3040106@redhat.com> References: <1312318249-7011-1-git-send-email-avi@redhat.com> <4E387353.9020806@twiddle.net> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: Jan Kiszka , qemu-devel@nongnu.org, kvm@vger.kernel.org To: Richard Henderson Return-path: In-Reply-To: <4E387353.9020806@twiddle.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+gceq-qemu-devel=gmane.org@nongnu.org Sender: qemu-devel-bounces+gceq-qemu-devel=gmane.org@nongnu.org List-Id: kvm.vger.kernel.org On 08/03/2011 12:59 AM, Richard Henderson wrote: > On 08/02/2011 01:50 PM, Avi Kivity wrote: > > struct AddrRange { > > - uint64_t start; > > - uint64_t size; > > + int64_t start; > > + int64_t size; > > I'm must say I'm not keen on this. My primary objection is that > a "range" can no longer properly represent the entire address space. > Or, indeed, anything in the second half of it. I don't think there's any cpu which has a real 64-bit physical address space? Don't they all truncate it? > It sounds like your problem would be better solved by re-arranging > things such that you perform X< Y comparisons rather than DELTA< 0. > More like, X + delta < Y + delta, I just get a headache what all those deltas mean everywhere. For reference, the root cause is static void render_memory_region(FlatView *view, MemoryRegion *mr, target_phys_addr_t base, AddrRange clip) { ... base += mr->addr; ... if (mr->alias) { base -= mr->alias->addr; base -= mr->alias_offset; // <--- HERE! render_memory_region(view, mr->alias, base, clip); return; } I could pass alias_offset everywhere and compensate for it. But stealing bit from the address space is easier than adjusting all the calculations. -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.