[U-Boot] [PATCH v4 09/15] dm: Cast away the const-ness of the global_data pointer

Simon Glass sjg at chromium.org
Thu Jun 12 05:29:37 CEST 2014


Hi Marek,

On 11 June 2014 23:26, Simon Glass <sjg at chromium.org> wrote:
> Hi Marek,
>
>
> On 8 June 2014 01:00, Marek Vasut <marex at denx.de> wrote:
>> On Friday, June 06, 2014 at 09:13:26 PM, Simon Glass wrote:
>>> In a very few cases we need to adjust the driver model root device, such as
>>> when setting it up at initialisation. Add a macro to make this easier.
>>>
>>> Signed-off-by: Simon Glass <sjg at chromium.org>
>>> ---
>>
>> [...]
>>
>>> -     ret = device_bind_by_name(NULL, &root_info, &gd->dm_root);
>>> +     ret = device_bind_by_name(NULL, &root_info, &DM_ROOT());
>>
>> [...]
>>
>>> +/* Cast away any volatile pointer */
>>> +#define DM_ROOT()            (((gd_t *)gd)->dm_root)
>>> +#define DM_UCLASS_ROOT()             (((gd_t *)gd)->uclass_root)
>>
>> Can you implement this "DM_ROOT()" macro as a function instead ? I believe
>> that'd be much nicer , would have typechecking etc., usual stuff.
>
> I had a look at this. I don't see how I can do it, but you might have ideas.
>
> In this function call I need to pass a pointer without its const bit.
> I made it const since nothing should change the dm root except driver
> model itself.
>
>>> +     ret = device_bind_by_name(NULL, &root_info, &DM_ROOT());
>
> In the above line, I don't think I can make it a function. Similarly
> one good think about the function is that I can grep for it easily.
>
> So I'm thinking of using something like this:
>
> /* Cast away any volatile pointer */
> #define DM_ROOT_NON_CONST (((gd_t *)gd)->dm_root)
> #define DM_UCLASS_ROOT_NON_CONST (((gd_t *)gd)->uclass_root)
>
> It is no-longer a function, but I can easily find it. Plus it is
> explicit as to what it is for, with the NON_CONST suffix.

Also I forgot to mention that type-checking is pretty pointless since
it is a hard-coded variable. If someone changed it lots of other code
would break. Also this is an internal dm header file so cannot be
accessed outside driver model core.

Regards,
Simon


More information about the U-Boot mailing list