[U-Boot] RFC: getramsize() prototype and volatile qualifier

Albert ARIBAUD albert.u.boot at aribaud.net
Thu Apr 21 19:50:50 CEST 2011


Le 21/04/2011 19:02, Mike Frysinger a écrit :
> On Thu, Apr 21, 2011 at 3:09 AM, Albert ARIBAUD wrote:
>> Call it a detail, but I see that get_ram_size() calls sometime qualify
>> their argument as volatile and sometimes not, and this makes checkpatch
>> complain that volatiles are Bad(tm), which I would like to get fixed.
>>
>> The prototype for get_ram_size() in is
>>
>>         long    get_ram_size  (volatile long *, long);
>>
>> While I understand that the way get_ram_size() works, it needs to
>> perform volatile *accesses* to addresses computed from its arguments, I
>> don't see why it requires one of the arguments themselves to be volatile.
>>
>> Am I missing something here, particularly about some toolchain requiring
>> the argument to be volatile? I see no reason it should, but better safe
>> than sorry.
>
> the argument isnt volatile, the memory it points to is.  since
> get_ram_size() itself doesnt dereference the argument (only goes
> through a local "addr"), the volatile marking in the prototype could
> be dropped, but personally i dont see the point.  the prototype doesnt
> require callers to add volatile markings to their own code, and i
> could see someone using "base" in the future after the volatile being
> dropped and people not noticing right away.  the current code is safe
> and causes no problems by itself, so i see no value in changing it.
>
> this sounds like useless "gotta be checkpatch clean" work by people
> blindly following its output.
> -mike

Just because checkpatch complains about something does not mean that 
particular complaint is without merit. :)

Yes, the code works as it is; but it'll work just as well if volatile is 
removed from the prototype and calls, and that'll make the code simpler 
and more homogeneous overall, plus it'll give checkpatch one less cause 
for complaint. We gain something there, if not a functional plus, an 
overal quality plus.

As for people fiddling with get_ram_size() *body* and removing the 
volatile 'addr' and use the non-volatile 'base' directly, why would 
they? They will plainly see that 'addr' is volatile and 'base' is not 
(all the more because removing the volatile' attribute from 'base' will 
require casting it to 'base+int' where it belongs), and the very role of 
the function makes it clear to them that the volatile attribute is 
required for 'addr', so they'll keep 'addr'.

Plus, get_ram_size() is pretty stable -- actually, it has changed only 
once in 2006 since its creation in 2004.

Amicalement,
-- 
Albert.


More information about the U-Boot mailing list