Messages in this thread | | | Subject | Re: [PATCH -v2 6/8] jump_label: Add a new static_key interface | From | yalin wang <> | Date | Tue, 4 Aug 2015 14:50:32 +0800 |
| |
> On Jul 28, 2015, at 21:21, Peter Zijlstra <peterz@infradead.org> wrote: > > There are various problems and short-comings with the current > static_key interface: > > - static_key_{true,false}() read like a branch depending on the key > value, instead of the actual likely/unlikely branch depending on > init value. > > - static_key_{true,false}() are, as stated above, tied to the > static_key init values STATIC_KEY_INIT_{TRUE,FALSE}. > > - we're limited to the 2 (out of 4) possible options that compile to > a default NOP because that's what our arch_static_branch() assembly > emits. > > So provide a new static_key interface: > > DEFINE_STATIC_KEY_TRUE(name); > DEFINE_STATIC_KEY_FALSE(name); > > Which define a key of different types with an initial true/false > value. > > Then allow: > > static_branch_likely() > static_branch_unlikely() > > to take a key of either type and emit the right instruction for the > case. > > This means adding a second arch_static_branch_jump() assembly helper > which emits a JMP per default. > > In order to determine the right instruction for the right state, > encode the branch type in the LSB of jump_entry::key. > > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> > --- > is this means static_key_{true,false}() are deprecated ? do you need mark static_key_{true,false}() as deprecated? like this: static __always_inline __deprecated bool static_key_false(struct static_key *key) ? Thanks
| |