On 12/5/18 5:44 PM, David Miller wrote: > From: David Ahern <dsah...@kernel.org> > Date: Wed, 5 Dec 2018 15:34:09 -0800 > >> @@ -270,37 +270,25 @@ static inline bool neigh_key_eq128(const struct >> neighbour *n, const void *pkey) >> (n32[2] ^ p32[2]) | (n32[3] ^ p32[3])) == 0; >> } >> >> -static inline struct neighbour *___neigh_lookup_noref( >> - struct neigh_table *tbl, >> - bool (*key_eq)(const struct neighbour *n, const void *pkey), >> - __u32 (*hash)(const void *pkey, >> - const struct net_device *dev, >> - __u32 *hash_rnd), >> - const void *pkey, >> - struct net_device *dev) >> +static inline struct neighbour *__neigh_lookup_noref(struct neigh_table >> *tbl, >> + const void *pkey, >> + struct net_device *dev) >> { > > Sorry, we can't do this. > > The whole point of how this is laid out is so that the entire hash traversal, > including the hash function, is expanded inline. > > This demux is extremely critical on the output side, it must be the > smallest number of cycles possible. It was the only way I could justify > not caching neigh entries in the routes any more when I wrote this code. > > Even before retpoline, putting an indirect call here is painful. With > retpoline it is deadly. > > Please avoid removing the full inline expansion of the neigh lookup in the > ipv6 > and ipv4 data paths. >
ok. patches 5-7 are not dependent on 1-4. Should I re-send outside of this set?