Christophe Leroy
dfe537b0c9
net: Force inlining of checksum functions in net/checksum.h
...
commit 5486f5bf790b5c664913076c3194b8f916a5c7ad upstream.
All functions defined as static inline in net/checksum.h are
meant to be inlined for performance reason.
But since commit ac7c3e4ff4 ("compiler: enable
CONFIG_OPTIMIZE_INLINING forcibly") the compiler is allowed to
uninline functions when it wants.
Fair enough in the general case, but for tiny performance critical
checksum helpers that's counter-productive.
The problem mainly arises when selecting CONFIG_CC_OPTIMISE_FOR_SIZE,
Those helpers being 'static inline' in header files you suddenly find
them duplicated many times in the resulting vmlinux.
Here is a typical exemple when building powerpc pmac32_defconfig
with CONFIG_CC_OPTIMISE_FOR_SIZE. csum_sub() appears 4 times:
c04a23cc <csum_sub>:
c04a23cc: 7c 84 20 f8 not r4,r4
c04a23d0: 7c 63 20 14 addc r3,r3,r4
c04a23d4: 7c 63 01 94 addze r3,r3
c04a23d8: 4e 80 00 20 blr
...
c04a2ce8: 4b ff f6 e5 bl c04a23cc <csum_sub>
...
c04a2d2c: 4b ff f6 a1 bl c04a23cc <csum_sub>
...
c04a2d54: 4b ff f6 79 bl c04a23cc <csum_sub>
...
c04a754c <csum_sub>:
c04a754c: 7c 84 20 f8 not r4,r4
c04a7550: 7c 63 20 14 addc r3,r3,r4
c04a7554: 7c 63 01 94 addze r3,r3
c04a7558: 4e 80 00 20 blr
...
c04ac930: 4b ff ac 1d bl c04a754c <csum_sub>
...
c04ad264: 4b ff a2 e9 bl c04a754c <csum_sub>
...
c04e3b08 <csum_sub>:
c04e3b08: 7c 84 20 f8 not r4,r4
c04e3b0c: 7c 63 20 14 addc r3,r3,r4
c04e3b10: 7c 63 01 94 addze r3,r3
c04e3b14: 4e 80 00 20 blr
...
c04e5788: 4b ff e3 81 bl c04e3b08 <csum_sub>
...
c04e65c8: 4b ff d5 41 bl c04e3b08 <csum_sub>
...
c0512d34 <csum_sub>:
c0512d34: 7c 84 20 f8 not r4,r4
c0512d38: 7c 63 20 14 addc r3,r3,r4
c0512d3c: 7c 63 01 94 addze r3,r3
c0512d40: 4e 80 00 20 blr
...
c0512dfc: 4b ff ff 39 bl c0512d34 <csum_sub>
...
c05138bc: 4b ff f4 79 bl c0512d34 <csum_sub>
...
Restore the expected behaviour by using __always_inline for all
functions defined in net/checksum.h
vmlinux size is even reduced by 256 bytes with this patch:
text data bss dec hex filename
6980022 2515362 194384 9689768 93daa8 vmlinux.before
6979862 2515266 194384 9689512 93d9a8 vmlinux.now
Fixes: ac7c3e4ff4 ("compiler: enable CONFIG_OPTIMIZE_INLINING forcibly")
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-03-02 11:41:08 +01:00
arch
x86/fpu: Correct pkru/xstate inconsistency
2022-03-02 11:41:03 +01:00
block
block/wbt: fix negative inflight counter when remove scsi device
2022-02-23 11:59:59 +01:00
certs
certs: Trigger creation of RSA module signing key if it's not an RSA key
2021-09-15 09:47:29 +02:00
crypto
crypto: pcrypt - Delay write to padata->info
2021-11-17 09:48:40 +01:00
Documentation
bpf: Add kconfig knob for disabling unpriv bpf by default
2022-02-16 12:52:49 +01:00
drivers
net: ll_temac: check the return value of devm_kmalloc()
2022-03-02 11:41:08 +01:00
fs
NFS: Do not report writeback errors in nfs_getattr()
2022-02-23 11:59:59 +01:00
include
net: Force inlining of checksum functions in net/checksum.h
2022-03-02 11:41:08 +01:00
init
bpf: Add kconfig knob for disabling unpriv bpf by default
2022-02-16 12:52:49 +01:00
ipc
shm: extend forced shm destroy to support objects from several IPC nses
2021-12-01 09:23:35 +01:00
kernel
cgroup/cpuset: Fix a race between cpuset_attach() and cpu hotplug
2022-03-02 11:41:00 +01:00
lib
lib/iov_iter: initialize "flags" in new pipe_buffer
2022-02-23 11:59:59 +01:00
LICENSES
mm
mm/kmemleak: avoid scanning potential huge holes
2022-02-08 18:24:28 +01:00
net
openvswitch: Fix setting ipv6 fields causing hw csum failure
2022-03-02 11:41:07 +01:00
samples
samples/kretprobes: Fix return value if register_kretprobe() failed
2021-11-17 09:48:39 +01:00
scripts
kconfig: fix failing to generate auto.conf
2022-02-23 12:00:01 +01:00
security
ima: Do not print policy rule with inactive LSM labels
2022-02-16 12:52:47 +01:00
sound
ASoC: ops: Fix stereo change notifications in snd_soc_put_volsw_range()
2022-02-23 11:59:58 +01:00
tools
perf data: Fix double free in perf_session__delete()
2022-03-02 11:41:05 +01:00
usr
virt
KVM: do not shrink halt_poll_ns below grow_start
2021-10-09 14:39:50 +02:00
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS
Makefile
Linux 5.4.181
2022-02-23 12:00:01 +01:00
README