Re: [PATCH v5 08/18] rcu: Add per-CB tracing for queuing, flush and invocation.

From: Paul E. McKenney
Date: Sat Sep 03 2022 - 08:51:58 EST


On Sat, Sep 03, 2022 at 12:48:28AM +0800, kernel test robot wrote:
> Hi "Joel,
>
> Thank you for the patch! Yet something to improve:
>
> [auto build test ERROR on paulmck-rcu/dev]
> [also build test ERROR on pcmoore-selinux/next drm-intel/for-linux-next linus/master v6.0-rc3]
> [cannot apply to vbabka-slab/for-next rostedt-trace/for-next tip/timers/core next-20220901]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Joel-Fernandes-Google/Implement-call_rcu_lazy-and-miscellaneous-fixes/20220902-062156
> base: https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev
> config: mips-allyesconfig (https://download.01.org/0day-ci/archive/20220903/202209030052.20CJhjTX-lkp@xxxxxxxxx/config)
> compiler: mips-linux-gcc (GCC) 12.1.0
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # https://github.com/intel-lab-lkp/linux/commit/c0f09b1d42d06649680f74a78ca363e7f1c158b2
> git remote add linux-review https://github.com/intel-lab-lkp/linux
> git fetch --no-tags linux-review Joel-Fernandes-Google/Implement-call_rcu_lazy-and-miscellaneous-fixes/20220902-062156
> git checkout c0f09b1d42d06649680f74a78ca363e7f1c158b2
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash
>
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@xxxxxxxxx>
>
> All errors (new ones prefixed by >>):
>
> In file included from <command-line>:
> In function 'dst_hold',
> inlined from 'dst_clone' at include/net/dst.h:251:3,
> inlined from '__skb_dst_copy' at include/net/dst.h:284:3,
> inlined from 'ovs_vport_output' at net/openvswitch/actions.c:787:2:
> >> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_490' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct dst_entry, __refcnt) & 63
> 354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
> include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
> 335 | prefix ## suffix(); \
> | ^~~~~~
> include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
> 354 | _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/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> | ^~~~~~~~~~~~~~~~
> include/net/dst.h:230:9: note: in expansion of macro 'BUILD_BUG_ON'
> 230 | BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
> | ^~~~~~~~~~~~

This looks like fallout from the rcu_head structure changing size,
given that __refcnt comes after rcu_head on 32-bit systems.

It looks like the per-CB tracing code needs to be kept on the side for
the time being rather than being sent to -next (let alone mainline).

Any reason I cannot just move this one to the end of the stack, after
"fork: Move thread_stack_free_rcu() to call_rcu_lazy()"?

Thanx, Paul

> In function 'dst_hold',
> inlined from 'execute_set_action' at net/openvswitch/actions.c:1093:3,
> inlined from 'do_execute_actions' at net/openvswitch/actions.c:1377:10:
> >> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_490' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct dst_entry, __refcnt) & 63
> 354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
> include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
> 335 | prefix ## suffix(); \
> | ^~~~~~
> include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
> 354 | _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/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> | ^~~~~~~~~~~~~~~~
> include/net/dst.h:230:9: note: in expansion of macro 'BUILD_BUG_ON'
> 230 | BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
> | ^~~~~~~~~~~~
> --
> In file included from <command-line>:
> In function 'dst_hold',
> inlined from 'dst_hold_and_use' at include/net/dst.h:244:2,
> inlined from 'dn_insert_route.constprop.isra' at net/decnet/dn_route.c:334:4:
> >> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_490' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct dst_entry, __refcnt) & 63
> 354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
> include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
> 335 | prefix ## suffix(); \
> | ^~~~~~
> include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
> 354 | _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/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> | ^~~~~~~~~~~~~~~~
> include/net/dst.h:230:9: note: in expansion of macro 'BUILD_BUG_ON'
> 230 | BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
> | ^~~~~~~~~~~~
> In function 'dst_hold',
> inlined from 'dst_hold_and_use' at include/net/dst.h:244:2,
> inlined from 'dn_insert_route.constprop.isra' at net/decnet/dn_route.c:347:2:
> >> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_490' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct dst_entry, __refcnt) & 63
> 354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
> include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
> 335 | prefix ## suffix(); \
> | ^~~~~~
> include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
> 354 | _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/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> | ^~~~~~~~~~~~~~~~
> include/net/dst.h:230:9: note: in expansion of macro 'BUILD_BUG_ON'
> 230 | BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
> | ^~~~~~~~~~~~
> In function 'dst_hold',
> inlined from 'dst_hold_and_use' at include/net/dst.h:244:2,
> inlined from 'dn_route_input' at net/decnet/dn_route.c:1535:4:
> >> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_490' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct dst_entry, __refcnt) & 63
> 354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
> include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
> 335 | prefix ## suffix(); \
> | ^~~~~~
> include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
> 354 | _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/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> | ^~~~~~~~~~~~~~~~
> include/net/dst.h:230:9: note: in expansion of macro 'BUILD_BUG_ON'
> 230 | BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
> | ^~~~~~~~~~~~
> In function 'dst_hold',
> inlined from 'dst_hold_and_use' at include/net/dst.h:244:2,
> inlined from '__dn_route_output_key.isra' at net/decnet/dn_route.c:1257:5:
> >> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_490' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct dst_entry, __refcnt) & 63
> 354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
> include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
> 335 | prefix ## suffix(); \
> | ^~~~~~
> include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
> 354 | _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/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> | ^~~~~~~~~~~~~~~~
> include/net/dst.h:230:9: note: in expansion of macro 'BUILD_BUG_ON'
> 230 | BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
> | ^~~~~~~~~~~~
> In function 'dst_hold',
> inlined from 'dst_clone' at include/net/dst.h:251:3,
> inlined from 'dn_cache_dump' at net/decnet/dn_route.c:1752:4:
> >> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_490' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct dst_entry, __refcnt) & 63
> 354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
> include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
> 335 | prefix ## suffix(); \
> | ^~~~~~
> include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
> 354 | _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/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> | ^~~~~~~~~~~~~~~~
> include/net/dst.h:230:9: note: in expansion of macro 'BUILD_BUG_ON'
> 230 | BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
> | ^~~~~~~~~~~~
> --
> In file included from <command-line>:
> In function 'dst_hold',
> inlined from 'dst_clone' at include/net/dst.h:251:3,
> inlined from 'ip6_copy_metadata' at net/ipv6/ip6_output.c:654:2:
> >> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_490' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct dst_entry, __refcnt) & 63
> 354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
> include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
> 335 | prefix ## suffix(); \
> | ^~~~~~
> include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
> 354 | _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/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> | ^~~~~~~~~~~~~~~~
> include/net/dst.h:230:9: note: in expansion of macro 'BUILD_BUG_ON'
> 230 | BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
> | ^~~~~~~~~~~~
> In function 'dst_hold',
> inlined from 'ip6_append_data' at net/ipv6/ip6_output.c:1838:3:
> >> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_490' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct dst_entry, __refcnt) & 63
> 354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
> include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
> 335 | prefix ## suffix(); \
> | ^~~~~~
> include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
> 354 | _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/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> | ^~~~~~~~~~~~~~~~
> include/net/dst.h:230:9: note: in expansion of macro 'BUILD_BUG_ON'
> 230 | BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
> | ^~~~~~~~~~~~
> In function 'dst_hold',
> inlined from 'dst_clone' at include/net/dst.h:251:3,
> inlined from 'ip6_sk_dst_lookup_flow' at net/ipv6/ip6_output.c:1262:3:
> >> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_490' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct dst_entry, __refcnt) & 63
> 354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
> include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
> 335 | prefix ## suffix(); \
> | ^~~~~~
> include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
> 354 | _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/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> | ^~~~~~~~~~~~~~~~
> include/net/dst.h:230:9: note: in expansion of macro 'BUILD_BUG_ON'
> 230 | BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
> | ^~~~~~~~~~~~
> --
> In file included from <command-line>:
> In function 'dst_hold',
> inlined from 'dst_clone' at include/net/dst.h:251:3,
> inlined from '__skb_dst_copy' at include/net/dst.h:284:3,
> inlined from 'skb_dst_copy' at include/net/dst.h:289:2,
> inlined from 'ip6_list_rcv_finish.constprop' at net/ipv6/ip6_input.c:128:4:
> >> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_490' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct dst_entry, __refcnt) & 63
> 354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
> include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
> 335 | prefix ## suffix(); \
> | ^~~~~~
> include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
> 354 | _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/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> | ^~~~~~~~~~~~~~~~
> include/net/dst.h:230:9: note: in expansion of macro 'BUILD_BUG_ON'
> 230 | BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
> | ^~~~~~~~~~~~
>
>
> vim +/__compiletime_assert_490 +354 include/linux/compiler_types.h
>
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 340
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 341 #define _compiletime_assert(condition, msg, prefix, suffix) \
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 342 __compiletime_assert(condition, msg, prefix, suffix)
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 343
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 344 /**
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 345 * compiletime_assert - break build and emit msg if condition is false
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 346 * @condition: a compile-time constant condition to check
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 347 * @msg: a message to emit if condition is false
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 348 *
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 349 * In tradition of POSIX assert, this macro will break the build if the
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 350 * supplied condition is *false*, emitting the supplied error message if the
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 351 * compiler has support to do so.
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 352 */
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 353 #define compiletime_assert(condition, msg) \
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 @354 _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 355
>
> --
> 0-DAY CI Kernel Test Service
> https://01.org/lkp