On 20/09/16 10:42, Peter Zijlstra wrote: > 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.
Fair enough, I'll stick to that for the KVM code. Thanks for the quick feedback. M. -- Jazz is not dead. It just smells funny...