The patch titled Subject: mm-slub-change-run-time-assertion-in-kmalloc_index-to-compile-time-fix-3 has been added to the -mm tree. Its filename is mm-slub-change-run-time-assertion-in-kmalloc_index-to-compile-time-fix-3.patch This patch should soon appear at https://ozlabs.org/~akpm/mmots/broken-out/mm-slub-change-run-time-assertion-in-kmalloc_index-to-compile-time-fix-3.patch and later at https://ozlabs.org/~akpm/mmotm/broken-out/mm-slub-change-run-time-assertion-in-kmalloc_index-to-compile-time-fix-3.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Vlastimil Babka <vbabka@xxxxxxx> Subject: mm-slub-change-run-time-assertion-in-kmalloc_index-to-compile-time-fix-3 Kernel test robot reports a false-positive compile-time assert while compiling kernel/bpf/local_storage.c In file included from <command-line>: In function 'kmalloc_index', inlined from 'kmalloc_node' at include/linux/slab.h:572:20, inlined from 'bpf_map_kmalloc_node.isra.0.part.0' at include/linux/bpf.h:1319:9: >> >> include/linux/compiler_types.h:328:38: error: call to '__compiletime_assert_183' declared with attribute error: unexpected size in kmalloc_index() 328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^ include/linux/compiler_types.h:309:4: note: in definition of macro '__compiletime_assert' 309 | prefix ## suffix(); \ | ^~~~~~ include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert' 328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert' 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) | ^~~~~~~~~~~~~~~~~~ include/linux/slab.h:389:2: note: in expansion of macro 'BUILD_BUG_ON_MSG' 389 | BUILD_BUG_ON_MSG(1, "unexpected size in kmalloc_index()"); | ^~~~~~~~~~~~~~~~ This only happens with CONFIG_PROFILE_ALL_BRANCHES enabled. Informal conversation with gcc developers suggest that this config pushes the optimizer to a corner case where in kmalloc_node() the 'size' is considered a builtin-constant and thus kmalloc_index() is chosen, but later in kmalloc_index() the notion of compile-time constant is lost and thus the compiletime assert becomes reachable. While there's plan to submit a proper gcc bug report with reduced testcase, for now add CONFIG_PROFILE_ALL_BRANCHES to the list of situations where we keep using the runtime BUG_ON() instead of compile-time assert. This is a 3rd fix for mmotm patch mm-slub-change-run-time-assertion-in-kmalloc_index-to-compile-time.patch [1] https://lore.kernel.org/linux-mm/202106051442.G1VJubTz-lkp@xxxxxxxxx/ Link: https://lkml.kernel.org/r/bea97388-01df-8eac-091b-a3c89b4a4a09@xxxxxxx Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> Reported-by: kernel test robot <lkp@xxxxxxxxx> Cc: Hyeonggon Yoo <42.hyeyoo@xxxxxxxxx> Cc: Christoph Lameter <cl@xxxxxxxxx> Cc: Pekka Enberg <penberg@xxxxxxxxxx> Cc: David Rientjes <rientjes@xxxxxxxxxx> Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> Cc: Marco Elver <elver@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/slab.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- a/include/linux/slab.h~mm-slub-change-run-time-assertion-in-kmalloc_index-to-compile-time-fix-3 +++ a/include/linux/slab.h @@ -389,7 +389,8 @@ static __always_inline unsigned int __km if (size <= 16 * 1024 * 1024) return 24; if (size <= 32 * 1024 * 1024) return 25; - if ((IS_ENABLED(CONFIG_CC_IS_GCC) || CONFIG_CLANG_VERSION >= 110000) && size_is_constant) + if ((IS_ENABLED(CONFIG_CC_IS_GCC) || CONFIG_CLANG_VERSION >= 110000) + && !IS_ENABLED(CONFIG_PROFILE_ALL_BRANCHES) && size_is_constant) BUILD_BUG_ON_MSG(1, "unexpected size in kmalloc_index()"); else BUG(); _ Patches currently in -mm which might be from vbabka@xxxxxxx are kunit-make-test-lock-irq-safe.patch mm-slub-change-run-time-assertion-in-kmalloc_index-to-compile-time-fix-3.patch mm-memcg-slab-create-a-new-set-of-kmalloc-cg-n-caches-fix.patch mm-slub-use-stackdepot-to-save-stack-trace-in-objects-fix-2.patch