linux/net/core
Hannes Frederic Sowa 3d4405226d net: avoid dependency of net_get_random_once on nop patching
net_get_random_once depends on the static keys infrastructure to patch up
the branch to the slow path during boot. This was realized by abusing the
static keys api and defining a new initializer to not enable the call
site while still indicating that the branch point should get patched
up. This was needed to have the fast path considered likely by gcc.

The static key initialization during boot up normally walks through all
the registered keys and either patches in ideal nops or enables the jump
site but omitted that step on x86 if ideal nops where already placed at
static_key branch points. Thus net_get_random_once branches not always
became active.

This patch switches net_get_random_once to the ordinary static_key
api and thus places the kernel fast path in the - by gcc considered -
unlikely path.  Microbenchmarks on Intel and AMD x86-64 showed that
the unlikely path actually beats the likely path in terms of cycle cost
and that different nop patterns did not make much difference, thus this
switch should not be noticeable.

Fixes: a48e42920f ("net: introduce new macro net_get_random_once")
Reported-by: Tuomas Räsänen <tuomasjjrasanen@tjjr.fi>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-05-14 00:37:34 -04:00
..
datagram.c
dev.c Revert "net: core: introduce netif_skb_dev_features" 2014-05-07 15:49:07 -04:00
dev_addr_lists.c
dev_ioctl.c
drop_monitor.c
dst.c ipv4: add a sock pointer to dst->output() path. 2014-04-15 13:47:15 -04:00
ethtool.c net: add busy_poll device feature 2014-04-03 14:31:34 -04:00
fib_rules.c
filter.c net: filter: initialize A and X registers 2014-04-23 15:34:41 -04:00
flow.c CPU hotplug notifiers registration fixes for 3.15-rc1 2014-04-07 14:55:46 -07:00
flow_dissector.c net: Rename skb->rxhash to skb->hash 2014-03-26 15:58:20 -04:00
gen_estimator.c
gen_stats.c
iovec.c
link_watch.c
Makefile net: ptp: move PTP classifier in its own file 2014-04-01 16:43:18 -04:00
neighbour.c neigh: set nud_state to NUD_INCOMPLETE when probing router reachability 2014-05-13 12:43:05 -04:00
net-procfs.c
net-sysfs.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-04-02 20:53:45 -07:00
net-sysfs.h
net-traces.c
net_namespace.c
netclassid_cgroup.c
netevent.c
netpoll.c netpoll: Use skb_irq_freeable to make zap_completion_queue safe. 2014-04-01 17:53:36 -04:00
netprio_cgroup.c cgroup: drop const from @buffer of cftype->write_string() 2014-03-19 10:23:54 -04:00
pktgen.c pktgen: be friendly to LLTX devices 2014-04-12 01:59:38 -04:00
ptp_classifier.c net: ptp: move PTP classifier in its own file 2014-04-01 16:43:18 -04:00
request_sock.c
rtnetlink.c rtnetlink: Only supply IFLA_VF_PORTS information when RTEXT_FILTER_VF is set 2014-04-24 13:52:54 -04:00
scm.c
secure_seq.c
skbuff.c net: Fix use after free by removing length arg from sk_data_ready callbacks. 2014-04-11 16:15:36 -04:00
sock.c net: Add variants of capable for use on on sockets 2014-04-24 13:44:53 -04:00
sock_diag.c net: Move the permission check in sock_diag_put_filterinfo to packet_diag_dump 2014-04-24 13:44:53 -04:00
stream.c
sysctl_net_core.c
timestamping.c net: ptp: move PTP classifier in its own file 2014-04-01 16:43:18 -04:00
user_dma.c
utils.c net: avoid dependency of net_get_random_once on nop patching 2014-05-14 00:37:34 -04:00