On Tue, Sep 03, 2024 at 02:49:48PM +0800, kernel test robot wrote: > > > Hello, > > kernel test robot noticed "BUG:using__this_cpu_read()in_preemptible" on: > > commit: 558049054fe90985d650a50b6a757943a9faf646 ("srcu: Add > srcu_read_lock_lite() and srcu_read_unlock_lite()") > https://github.com/paulmckrcu/linux dev.2024.08.30b > > in testcase: boot > > compiler: gcc-12 > test machine: qemu-system-x86_64 -enable-kvm -cpu SandyBridge -smp 2 -m 16G > > (please refer to attached dmesg/kmsg for entire log/backtrace) > > > +------------------------------------------+------------+------------+ > | | ddf16dbef6 | 558049054f | > +------------------------------------------+------------+------------+ > | BUG:using__this_cpu_read()in_preemptible | 0 | 12 | > +------------------------------------------+------------+------------+ > > > If you fix the issue in a separate patch/commit (i.e. not just a new version > of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <l...@intel.com> > | Closes: https://lore.kernel.org/oe-lkp/202409031433.5ce7c1e3-...@intel.com
Good catch, thank you for testing! Does the incremental patch at the end of this email fix this for you? Thanx, Paul > [ 10.417780][ T1] BUG: using __this_cpu_read() in preemptible [00000000] > code: swapper/0/1 > [ 10.419771][ T1] caller is synchronize_srcu (kernel/rcu/srcutree.c:1242 > kernel/rcu/srcutree.c:1553) > [ 10.421326][ T1] CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Tainted: G > T 6.11.0-rc1-00131-g558049054fe9 #1 > 4f684c68116af3bbce89b0137924bdf81528bc94 > [ 10.421734][ T1] Tainted: [T]=RANDSTRUCT > [ 10.421734][ T1] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), > BIOS 1.16.2-debian-1.16.2-1 04/01/2014 > [ 10.421734][ T1] Call Trace: > [ 10.421734][ T1] <TASK> > [ 10.421734][ T1] dump_stack_lvl (lib/dump_stack.c:122) > [ 10.421734][ T1] check_preemption_disabled > (arch/x86/include/asm/preempt.h:84 lib/smp_processor_id.c:53) > [ 10.421734][ T1] synchronize_srcu (kernel/rcu/srcutree.c:1242 > kernel/rcu/srcutree.c:1553) > [ 10.421734][ T1] kmem_cache_shrink (mm/slab_common.c:612) > [ 10.421734][ T1] acpi_os_purge_cache (drivers/acpi/osl.c:1575) > [ 10.421734][ T1] acpi_purge_cached_objects > (drivers/acpi/acpica/utxface.c:238) > [ 10.421734][ T1] acpi_initialize_objects > (drivers/acpi/acpica/utxfinit.c:250) > [ 10.421734][ T1] acpi_bus_init (drivers/acpi/bus.c:1365) > [ 10.421734][ T1] ? acpi_sleep_proc_init (drivers/acpi/bus.c:1334) > [ 10.421734][ T1] ? kobject_add (lib/kobject.c:374 lib/kobject.c:426) > [ 10.421734][ T1] ? kset_create_and_add (lib/kobject.c:412) > [ 10.421734][ T1] ? rcu_is_watching (include/linux/context_tracking.h:126 > kernel/rcu/tree.c:737) > [ 10.421734][ T1] acpi_init (drivers/acpi/bus.c:1450) > [ 10.421734][ T1] ? acpi_bus_init (drivers/acpi/bus.c:1435) > [ 10.421734][ T1] ? rng_is_initialized (drivers/char/random.c:934) > [ 10.421734][ T1] ? acpi_bus_init (drivers/acpi/bus.c:1435) > [ 10.421734][ T1] do_one_initcall (init/main.c:1267) > [ 10.421734][ T1] ? trace_event_raw_event_initcall_level (init/main.c:1258) > [ 10.421734][ T1] ? parameq (kernel/params.c:168) > [ 10.421734][ T1] ? __kmalloc_noprof (include/trace/events/kmem.h:54 > mm/slub.c:4159 mm/slub.c:4170) > [ 10.421734][ T1] do_initcalls (init/main.c:1328 init/main.c:1345) > [ 10.421734][ T1] ? rdinit_setup (init/main.c:1313) > [ 10.421734][ T1] kernel_init_freeable (init/main.c:1582) > [ 10.421734][ T1] ? rest_init (init/main.c:1465) > [ 10.421734][ T1] kernel_init (init/main.c:1469) > [ 10.421734][ T1] ? _raw_spin_unlock_irq (arch/x86/include/asm/preempt.h:103 > include/linux/spinlock_api_smp.h:160 kernel/locking/spinlock.c:202) > [ 10.421734][ T1] ret_from_fork (arch/x86/kernel/process.c:153) > [ 10.421734][ T1] ? rest_init (init/main.c:1465) > [ 10.421734][ T1] ret_from_fork_asm (arch/x86/entry/entry_64.S:257) > [ 10.421734][ T1] </TASK> > [ 10.423389][ T1] BUG: using __this_cpu_read() in preemptible [00000000] > code: swapper/0/1 > [ 10.424780][ T1] caller is synchronize_srcu (kernel/rcu/srcutree.c:1242 > kernel/rcu/srcutree.c:1553) > [ 10.426769][ T1] CPU: 1 UID: 0 PID: 1 Comm: swapper/0 Tainted: G > T 6.11.0-rc1-00131-g558049054fe9 #1 > 4f684c68116af3bbce89b0137924bdf81528bc94 > [ 10.434768][ T1] Tainted: [T]=RANDSTRUCT > [ 10.434768][ T1] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), > BIOS 1.16.2-debian-1.16.2-1 04/01/2014 > [ 10.438767][ T1] Call Trace: > [ 10.438767][ T1] <TASK> > [ 10.440770][ T1] dump_stack_lvl (lib/dump_stack.c:122) > [ 10.440770][ T1] check_preemption_disabled > (arch/x86/include/asm/preempt.h:84 lib/smp_processor_id.c:53) > [ 10.442769][ T1] synchronize_srcu (kernel/rcu/srcutree.c:1242 > kernel/rcu/srcutree.c:1553) > [ 10.444768][ T1] kmem_cache_shrink (mm/slab_common.c:612) > [ 10.444768][ T1] acpi_os_purge_cache (drivers/acpi/osl.c:1575) > [ 10.446766][ T1] acpi_purge_cached_objects > (drivers/acpi/acpica/utxface.c:239) > [ 10.448764][ T1] acpi_initialize_objects > (drivers/acpi/acpica/utxfinit.c:250) > [ 10.448764][ T1] acpi_bus_init (drivers/acpi/bus.c:1365) > [ 10.450765][ T1] ? acpi_sleep_proc_init (drivers/acpi/bus.c:1334) > [ 10.452766][ T1] ? kobject_add (lib/kobject.c:374 lib/kobject.c:426) > [ 10.452766][ T1] ? kset_create_and_add (lib/kobject.c:412) > [ 10.454764][ T1] ? rcu_is_watching (include/linux/context_tracking.h:126 > kernel/rcu/tree.c:737) > [ 10.456780][ T1] acpi_init (drivers/acpi/bus.c:1450) > [ 10.456780][ T1] ? acpi_bus_init (drivers/acpi/bus.c:1435) > [ 10.458770][ T1] ? rng_is_initialized (drivers/char/random.c:934) > [ 10.460769][ T1] ? acpi_bus_init (drivers/acpi/bus.c:1435) > [ 10.460769][ T1] do_one_initcall (init/main.c:1267) > [ 10.462764][ T1] ? trace_event_raw_event_initcall_level (init/main.c:1258) > [ 10.464766][ T1] ? parameq (kernel/params.c:168) > [ 10.464766][ T1] ? __kmalloc_noprof (include/trace/events/kmem.h:54 > mm/slub.c:4159 mm/slub.c:4170) > [ 10.466765][ T1] do_initcalls (init/main.c:1328 init/main.c:1345) > [ 10.468763][ T1] ? rdinit_setup (init/main.c:1313) > [ 10.468763][ T1] kernel_init_freeable (init/main.c:1582) > [ 10.470762][ T1] ? rest_init (init/main.c:1465) > [ 10.472766][ T1] kernel_init (init/main.c:1469) > [ 10.472766][ T1] ? _raw_spin_unlock_irq (arch/x86/include/asm/preempt.h:103 > include/linux/spinlock_api_smp.h:160 kernel/locking/spinlock.c:202) > [ 10.474764][ T1] ret_from_fork (arch/x86/kernel/process.c:153) > [ 10.476765][ T1] ? rest_init (init/main.c:1465) > [ 10.476765][ T1] ret_from_fork_asm (arch/x86/entry/entry_64.S:257) > [ 10.478882][ T1] </TASK> > [ 10.481604][ T1] BUG: using __this_cpu_read() in preemptible [00000000] > code: swapper/0/1 > [ 10.482582][ T1] caller is synchronize_srcu (kernel/rcu/srcutree.c:1242 > kernel/rcu/srcutree.c:1553) > [ 10.483326][ T1] CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Tainted: G > T 6.11.0-rc1-00131-g558049054fe9 #1 > 4f684c68116af3bbce89b0137924bdf81528bc94 > [ 10.483734][ T1] Tainted: [T]=RANDSTRUCT > [ 10.483734][ T1] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), > BIOS 1.16.2-debian-1.16.2-1 04/01/2014 > [ 10.483734][ T1] Call Trace: > [ 10.483734][ T1] <TASK> > [ 10.483734][ T1] dump_stack_lvl (lib/dump_stack.c:122) > [ 10.483734][ T1] check_preemption_disabled > (arch/x86/include/asm/preempt.h:84 lib/smp_processor_id.c:53) > [ 10.483734][ T1] synchronize_srcu (kernel/rcu/srcutree.c:1242 > kernel/rcu/srcutree.c:1553) > [ 10.483734][ T1] kmem_cache_shrink (mm/slab_common.c:612) > [ 10.483734][ T1] acpi_os_purge_cache (drivers/acpi/osl.c:1575) > [ 10.483734][ T1] acpi_purge_cached_objects > (drivers/acpi/acpica/utxface.c:240) > [ 10.483734][ T1] acpi_initialize_objects > (drivers/acpi/acpica/utxfinit.c:250) > [ 10.483734][ T1] acpi_bus_init (drivers/acpi/bus.c:1365) > [ 10.483734][ T1] ? acpi_sleep_proc_init (drivers/acpi/bus.c:1334) > [ 10.483734][ T1] ? kobject_add (lib/kobject.c:374 lib/kobject.c:426) > [ 10.483734][ T1] ? kset_create_and_add (lib/kobject.c:412) > [ 10.483734][ T1] ? rcu_is_watching (include/linux/context_tracking.h:126 > kernel/rcu/tree.c:737) > [ 10.483734][ T1] acpi_init (drivers/acpi/bus.c:1450) > [ 10.483734][ T1] ? acpi_bus_init (drivers/acpi/bus.c:1435) > [ 10.483734][ T1] ? rng_is_initialized (drivers/char/random.c:934) > [ 10.483734][ T1] ? acpi_bus_init (drivers/acpi/bus.c:1435) > [ 10.483734][ T1] do_one_initcall (init/main.c:1267) > [ 10.483734][ T1] ? trace_event_raw_event_initcall_level (init/main.c:1258) > [ 10.483734][ T1] ? parameq (kernel/params.c:168) > [ 10.483734][ T1] ? __kmalloc_noprof (include/trace/events/kmem.h:54 > mm/slub.c:4159 mm/slub.c:4170) > [ 10.483734][ T1] do_initcalls (init/main.c:1328 init/main.c:1345) > [ 10.483734][ T1] ? rdinit_setup (init/main.c:1313) > [ 10.483734][ T1] kernel_init_freeable (init/main.c:1582) > [ 10.483734][ T1] ? rest_init (init/main.c:1465) > [ 10.483734][ T1] kernel_init (init/main.c:1469) > [ 10.483734][ T1] ? _raw_spin_unlock_irq (arch/x86/include/asm/preempt.h:103 > include/linux/spinlock_api_smp.h:160 kernel/locking/spinlock.c:202) > [ 10.483734][ T1] ret_from_fork (arch/x86/kernel/process.c:153) > [ 10.483734][ T1] ? rest_init (init/main.c:1465) > [ 10.483734][ T1] ret_from_fork_asm (arch/x86/entry/entry_64.S:257) > [ 10.483734][ T1] </TASK> > [ 10.484500][ T1] BUG: using __this_cpu_read() in preemptible [00000000] > code: swapper/0/1 > [ 10.485594][ T1] caller is synchronize_srcu (kernel/rcu/srcutree.c:1242 > kernel/rcu/srcutree.c:1553) > [ 10.486311][ T1] CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Tainted: G > T 6.11.0-rc1-00131-g558049054fe9 #1 > 4f684c68116af3bbce89b0137924bdf81528bc94 > [ 10.486734][ T1] Tainted: [T]=RANDSTRUCT > [ 10.486734][ T1] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), > BIOS 1.16.2-debian-1.16.2-1 04/01/2014 > [ 10.486734][ T1] Call Trace: > [ 10.486734][ T1] <TASK> > [ 10.486734][ T1] dump_stack_lvl (lib/dump_stack.c:122) > [ 10.486734][ T1] check_preemption_disabled > (arch/x86/include/asm/preempt.h:84 lib/smp_processor_id.c:53) > [ 10.486734][ T1] synchronize_srcu (kernel/rcu/srcutree.c:1242 > kernel/rcu/srcutree.c:1553) > [ 10.486734][ T1] kmem_cache_shrink (mm/slab_common.c:612) > [ 10.486734][ T1] acpi_os_purge_cache (drivers/acpi/osl.c:1575) > [ 10.486734][ T1] acpi_purge_cached_objects > (drivers/acpi/acpica/utxface.c:243) > [ 10.486734][ T1] acpi_initialize_objects > (drivers/acpi/acpica/utxfinit.c:250) > [ 10.486734][ T1] acpi_bus_init (drivers/acpi/bus.c:1365) > [ 10.486734][ T1] ? acpi_sleep_proc_init (drivers/acpi/bus.c:1334) > [ 10.486734][ T1] ? kobject_add (lib/kobject.c:374 lib/kobject.c:426) > [ 10.486734][ T1] ? kset_create_and_add (lib/kobject.c:412) > [ 10.486734][ T1] ? rcu_is_watching (include/linux/context_tracking.h:126 > kernel/rcu/tree.c:737) > [ 10.486734][ T1] acpi_init (drivers/acpi/bus.c:1450) > [ 10.486734][ T1] ? acpi_bus_init (drivers/acpi/bus.c:1435) > [ 10.486734][ T1] ? rng_is_initialized (drivers/char/random.c:934) > [ 10.486734][ T1] ? acpi_bus_init (drivers/acpi/bus.c:1435) > [ 10.486734][ T1] do_one_initcall (init/main.c:1267) > [ 10.486734][ T1] ? trace_event_raw_event_initcall_level (init/main.c:1258) > [ 10.486734][ T1] ? parameq (kernel/params.c:168) > [ 10.486734][ T1] ? __kmalloc_noprof (include/trace/events/kmem.h:54 > mm/slub.c:4159 mm/slub.c:4170) > [ 10.486734][ T1] do_initcalls (init/main.c:1328 init/main.c:1345) > [ 10.486734][ T1] ? rdinit_setup (init/main.c:1313) > [ 10.486734][ T1] kernel_init_freeable (init/main.c:1582) > [ 10.486734][ T1] ? rest_init (init/main.c:1465) > [ 10.486734][ T1] kernel_init (init/main.c:1469) > [ 10.486734][ T1] ? _raw_spin_unlock_irq (arch/x86/include/asm/preempt.h:103 > include/linux/spinlock_api_smp.h:160 kernel/locking/spinlock.c:202) > [ 10.486734][ T1] ret_from_fork (arch/x86/kernel/process.c:153) > [ 10.486734][ T1] ? rest_init (init/main.c:1465) > [ 10.486734][ T1] ret_from_fork_asm (arch/x86/entry/entry_64.S:257) > [ 10.486734][ T1] </TASK> > > > > The kernel config and materials to reproduce are available at: > https://download.01.org/0day-ci/archive/20240903/202409031433.5ce7c1e3-...@intel.com commit 01c732e108f6ea51e1660ad6bd59fff36e653ddb Author: Paul E. McKenney <paul...@kernel.org> Date: Tue Sep 3 03:25:27 2024 -0700 squash! srcu: Add srcu_read_lock_lite() and srcu_read_unlock_lite() [ paulmck: Apply kernel test robot feedback. ] Signed-off-by: Paul E. McKenney <paul...@kernel.org> diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c index 3133646f0b258..637d366a4dc7b 100644 --- a/kernel/rcu/srcutree.c +++ b/kernel/rcu/srcutree.c @@ -1239,7 +1239,7 @@ static bool srcu_should_expedite(struct srcu_struct *ssp) check_init_srcu_struct(ssp); /* If _lite() readers, don't do unsolicited expediting. */ - if (__this_cpu_read(ssp->sda->srcu_reader_flavor) & SRCU_READ_FLAVOR_LITE) + if (this_cpu_read(ssp->sda->srcu_reader_flavor) & SRCU_READ_FLAVOR_LITE) return false; /* If the local srcu_data structure has callbacks, not idle. */ sdp = raw_cpu_ptr(ssp->sda);