diff options
| author | Vlastimil Babka <[email protected]> | 2018-12-28 00:33:17 -0800 |
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2018-12-28 12:11:46 -0800 |
| commit | 4e45f712d82c6b7a37e02faf388173ad12ab464d (patch) | |
| tree | c8c2e5f9d906d62845564b0e186d111ea2071c84 /tools/perf/scripts/python/bin | |
| parent | 88349a2837fbaef83862a011e1f53c4551d3e199 (diff) | |
include/linux/slab.h: fix sparse warning in kmalloc_type()
Multiple people have reported the following sparse warning:
./include/linux/slab.h:332:43: warning: dubious: x & !y
The minimal fix would be to change the logical & to boolean &&, which
emits the same code, but Andrew has suggested that the branch-avoiding
tricks are maybe not worthwile. David Laight provided a nice comparison
of disassembly of multiple variants, which shows that the current version
produces a 4 deep dependency chain, and fixing the sparse warning by
changing logical and to multiplication emits an IMUL, making it even more
expensive.
The code as rewritten by this patch yielded the best disassembly, with a
single predictable branch for the most common case, and a ternary operator
for the rest, which gcc seems to compile without a branch or cmov by
itself.
The result should be more readable, without a sparse warning and probably
also faster for the common case.
Link: http://lkml.kernel.org/r/[email protected]
Fixes: 1291523f2c1d ("mm, slab/slub: introduce kmalloc-reclaimable caches")
Reviewed-by: Andrew Morton <[email protected]>
Signed-off-by: Vlastimil Babka <[email protected]>
Reported-by: Bart Van Assche <[email protected]>
Reported-by: Darryl T. Agostinelli <[email protected]>
Reported-by: Masahiro Yamada <[email protected]>
Suggested-by: Andrew Morton <[email protected]>
Suggested-by: David Laight <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'tools/perf/scripts/python/bin')
0 files changed, 0 insertions, 0 deletions