Subject: Off by two error in au1000/common/setup.c?

From: Ulrich Eckhardt <[email-masked]>
Date: Tue, 22 Mar 2005 15:31:46 +0100

Hi!

Could someone take a look at these lines from fixup_bigphys_addr():

 // in au1000.h
 #define Au1500_PCI_MEM_START      0x440000000ULL
 #define Au1500_PCI_MEM_END        0x44FFFFFFFULL

 // in setup.c
 start = (u32)Au1500_PCI_MEM_START;
 end = (u32)Au1500_PCI_MEM_END;
 /* check for pci memory window */
 if ((phys_addr >= start) && ((phys_addr + size) < end)) {
  return (phys_addr - start) + Au1500_PCI_MEM_START;
 }

For the (unlikely?) case that I want to use a size of 0x0 1000 0000, 
'phys_addr+size == end+1'. IOW I need 'phys_addr+size-1' to get the last 
address and use '<= end' to compare with the last valid address in the range.

Right?

Uli

---

From: Pete Popov <[email-masked]>
Date: Tue, 22 Mar 2005 09:46:10 -0800

>address and use '<= end' to compare with the last valid address in the range.
But the a size of 0x0 1000 0001 would pass the test since phys_addr + 
1000 0001 - 1 <= end.

How about if I just make MEM_END 0x450000000 and the check " <= end" ?

Pete

---

From: Ulrich Eckhardt <[email-masked]>
Date: Wed, 23 Mar 2005 08:36:29 +0100

> But the a size of 0x0 1000 0001 would pass the test since phys_addr +

Really?
0x4 4000 0000 + 0x0 1000 0001 - 1 = 0x4 5000 0000 > 0x4 ffff ffff
;)

> How about if I just make MEM_END 0x450000000 and the check " <= end" ?

I'm not sure, it's a question of consistency: that solution would be the 
one-past-the-end address, which I'm fine with (being used to C++'s STL-style 
iterators..). The only problem I see arises if that one-past-the-end actually 
wraps around.
Other than that, what is used generally, first and last valid address or first 
valid address and first not valid address? Or first valid address and size?

Uli

---

From: Pete Popov <[email-masked]>
Date: Tue, 22 Mar 2005 23:43:48 -0800

> 0x4 4000 0000 + 0x0 1000 0001 - 1 = 0x4 5000 0000 > 0x4 ffff ffff

Yeh, I was already thinking about end==0x4 5000 0000 ...

> valid address and first not valid address? Or first valid address and size?

I'll check it out tomorrow.

Pete