lkml.org 
[lkml]   [2009]   [Dec]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: Question of resource_size() implementation
From
Date

On 30/12/2009, at 11:16 AM, Felipe Balbi wrote:

> On Tue, 2009-12-29 at 16:12 -0800, Joe Perches wrote:
>> On Wed, 2009-12-30 at 01:43 +0200, Felipe Balbi wrote:
>>> I'm wondering whether the +1 in resource_size() is actually necessary.
>>> resource_size() is defined as:
>> []
>>> static inline resource_size_t resource_size(const struct resource *res)
>>> {
>>> return res->end - res->start + 1;
>>> }
>>> Are we off-by-one
>>> here ? Or is this all expected ?
>>
>> Imagine you have 1 byte sized resources.
>>
>> AREA1 = 0x40000000
>> AREA2 = 0x40000001
>>
>> area1.start = 0x40000000
>> area1.end = 0x40000000
>>
>> area2.start = 0x40000001
>> area2.end = 0x40000001
>
> (adding lkml back to the loop)
>
> in that you wouldn't use any of the SZ_* macros and simply hardcode
> start and end, right ? then you would define:
>
> area1.start = 0x40000000
> area1.end = 0x40000001

No-o, you'd hardcode

area1.start=0x40000000
area1.end=0x40000000

As Joe wrote. Then the resource_size would return 1 and ioremap would map the 1 byte starting at 0x400000000, i.e. just 0x400000000. This is correct.

In your original example you had

.start = MEM_AREA1_BASE,
.end = MEM_AREA1_BASE + SZ_4K - 1

So resource_size would return SZ_4K and ioremap would map the SZ_4K bytes starting at MEM_AREA1_BASE, i.e. MEM_AREA1_BASE to MEM_AREA1_BASE - 1 /inclusive/. This is also correct.

--Ben.



\
 
 \ /
  Last update: 2009-12-30 02:07    [W:0.542 / U:0.140 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site