On Mon, Sep 19, 2016 at 06:21:27PM +0100, Marc Zyngier wrote:
> It is desirable to allow static keys to be integrated in structures,
> as it can lead do slightly more readable code. But the current API
> only provides DEFINE_STATIC_KEY_TRUE/FALSE, which is not exactly
> nice and leads to the following idiom:
> 
>       static struct {
>               int                     foo;
>               struct static_key_false key;
>       } bar = {
>               .key    = STATIC_KEY_FALSE_INIT,
>       };
> 
>       [...]
> 
>       if (static_branch_unlikely(&bar.key))
>               foo = -1;
> 
> which doesn't follow the recommended API, and uses the internals
> of the static key implementation.
> 
> This patch introduces DECLARE_STATIC_KEY_TRUE/FALSE, as well as
> INIT_STATIC_KEY_TRUE/FALSE, which abstract such construct and
> allow the internals to evolve without having to fix everything else:
> 
>       static struct {
>               int                      foo;
>               DECLARE_STATIC_KEY_FALSE(key);
>       } bar = {
>               INIT_STATIC_KEY_FALSE(.key),
>       };

Hurm..

I think I like the first better, it looks more like actual C. Either way
around you need to now manually match up the type and initializer.

Reply via email to