* [linux-next:master] [rcu] c9b55f9da0: WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]
@ 2025-02-17 6:30 kernel test robot
2025-02-19 16:51 ` Paul E. McKenney
0 siblings, 1 reply; 16+ messages in thread
From: kernel test robot @ 2025-02-17 6:30 UTC (permalink / raw)
To: Ankur Arora
Cc: oe-lkp, lkp, Boqun Feng, Paul E. McKenney, Peter Zijlstra,
Frederic Weisbecker, rcu, oliver.sang
hi, Ankur Arora and all,
this is not a regression report as our bot normally does. this report is just
FYI that we observe a WARNING with this config, in case it could supply any
useful information and/or somebody wants to have a look.
by this change, the config has below diff with parent:
==================== PARENT FIRST_BAD KCONFIGS f001b7165def8f7af6ce95d08f0e1bbc2442654d ====================
--- /pkg/linux/i386-randconfig-r121-20250212/gcc-12/f001b7165def8f7af6ce95d08f0e1bbc2442654d/.config 2025-02-13 07:56:33.420457682 +0800
+++ /pkg/linux/i386-randconfig-r121-20250212/gcc-12/c9b55f9da0d2c72c8c8d8cd5df84af5251b74283/.config 2025-02-13 08:43:08.186415593 +0800
@@ -147,7 +147,6 @@ CONFIG_BSD_PROCESS_ACCT=y
# RCU Subsystem
#
CONFIG_TREE_RCU=y
-CONFIG_PREEMPT_RCU=y
CONFIG_RCU_EXPERT=y
CONFIG_TREE_SRCU=y
CONFIG_TASKS_RCU_GENERIC=y
@@ -162,7 +161,6 @@ CONFIG_RCU_STALL_COMMON=y
CONFIG_RCU_NEED_SEGCBLIST=y
CONFIG_RCU_FANOUT=32
CONFIG_RCU_FANOUT_LEAF=16
-# CONFIG_RCU_BOOST is not set
# CONFIG_RCU_NOCB_CPU is not set
# CONFIG_TASKS_TRACE_RCU_READ_MB is not set
# CONFIG_RCU_DOUBLE_CHECK_CB_TIME is not set
below is full report.
Hello,
kernel test robot noticed "WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]" on:
commit: c9b55f9da0d2c72c8c8d8cd5df84af5251b74283 ("rcu: limit PREEMPT_RCU configurations")
https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git master
[test failed on linux-next/master c674aa7c289e51659e40dda0f954886ef7f80042]
in testcase: rcutorture
version:
with following parameters:
runtime: 300s
test: cpuhotplug
torture_type: rcu
config: i386-randconfig-r121-20250212
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)
+-----------------------------------------------------------------------------+------------+------------+
| | f001b7165d | c9b55f9da0 |
+-----------------------------------------------------------------------------+------------+------------+
| WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture] | 0 | 12 |
| EIP:rcutorture_one_extend_check | 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 <oliver.sang@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20250217/202502171415.8ec87c87-lkp@intel.com
[ 109.553253][ T781] rcu-torture: rcu_torture_reader task started
[ 109.553258][ T781] ------------[ cut here ]------------
[ 109.553259][ T781] rcutorture_one_extend_check during change: Current 0x4 To add 0x4 To remove 0x0 preempt_count() 0x1
[ 109.553292][ T781] WARNING: CPU: 1 PID: 781 at kernel/rcu/rcutorture.c:1905 rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
[ 109.553302][ T781] Modules linked in: rcutorture(+) torture
[ 109.553307][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
[ 109.553310][ T781] Tainted: [T]=RANDSTRUCT
[ 109.553311][ T781] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
[ 109.553312][ T781] EIP: rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
[ 109.553318][ T781] Code: 75 2d c6 05 fd 04 1c f1 01 64 a1 84 77 7c 97 25 ff ff ff 7f 50 ff 75 08 57 53 56 68 60 9f 1c f1 68 a4 74 1c f1 e8 8d d3 ca a3 <0f> 0b 83 c4 1c 8d 65 f4 5b 5e 5f 5d c3 55 31 d2 83 f8 1f 89 e5 53
[ 109.553320][ T781] EAX: 00000066 EBX: 00000004 ECX: 00000027 EDX: e89c1a00
[ 109.553322][ T781] ESI: f11c92d9 EDI: 00000004 EBP: 825d1d88 ESP: 825d1d54
[ 109.553323][ T781] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 EFLAGS: 00010282
[ 109.553327][ T781] CR0: 80050033 CR2: 77235000 CR3: 010c5000 CR4: 00040690
[ 109.553328][ T781] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
[ 109.553330][ T781] DR6: fffe0ff0 DR7: 00000400
[ 109.553331][ T781] Call Trace:
[ 109.553333][ T781] ? show_regs+0x4c/0x52
[ 109.553343][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
[ 109.553349][ T781] ? __warn+0x9e/0x15f
[ 109.553354][ T781] ? report_bug+0xe8/0x14a
[ 109.553357][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
[ 109.553364][ T781] ? exc_overflow+0x37/0x37
[ 109.553367][ T781] ? handle_bug+0x3a/0x55
[ 109.553369][ T781] ? exc_invalid_op+0x1a/0x56
[ 109.553372][ T781] ? handle_exception+0x148/0x148
[ 109.553376][ T781] ? osq_wait_next+0x18/0x41
[ 109.553379][ T781] ? exc_overflow+0x37/0x37
[ 109.553381][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
[ 109.553388][ T781] ? exc_overflow+0x37/0x37
[ 109.553390][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
[ 109.553399][ T781] rcutorture_one_extend+0x18c/0x3c1 [rcutorture]
[ 109.553410][ T781] rcu_torture_one_read+0x95/0x4d2 [rcutorture]
[ 109.553417][ T781] ? validate_chain+0x3d/0x24c
[ 109.553420][ T781] ? mark_lock+0x6a/0x14d
[ 109.553440][ T781] rcu_torture_reader+0xc4/0xdbd [rcutorture]
[ 109.553448][ T781] ? rcu_torture_one_read+0x4d2/0x4d2 [rcutorture]
[ 109.553457][ T781] kthread+0x169/0x16e
[ 109.553459][ T781] ? rcu_torture_read_exit_child+0x3a/0x3a [rcutorture]
[ 109.553466][ T781] ? kthread_is_per_cpu+0x17/0x17
[ 109.553468][ T781] ret_from_fork+0x19/0x2c
[ 109.553471][ T781] ? kthread_is_per_cpu+0x17/0x17
[ 109.553472][ T781] ret_from_fork_asm+0x12/0x20
[ 109.553475][ T781] entry_INT80_32+0x108/0x108
[ 109.553481][ T781] irq event stamp: 307
[ 109.553482][ T781] hardirqs last enabled at (313): [<94ebb6cb>] console_trylock_spinning+0x6b/0x10a
[ 109.553485][ T781] hardirqs last disabled at (318): [<94ebb691>] console_trylock_spinning+0x31/0x10a
[ 109.553486][ T781] softirqs last enabled at (0): [<94e613c4>] copy_process+0x945/0x1a7d
[ 109.553489][ T781] softirqs last disabled at (0): [<00000000>] 0x0
[ 109.553491][ T781] ---[ end trace 0000000000000000 ]---
[ 109.553494][ T781] ------------[ cut here ]------------
[ 109.553496][ T781] rcutorture_one_extend_check after change: Current 0x60 To add 0x60 To remove 0x4 preempt_count() 0x2
[ 109.553510][ T781] WARNING: CPU: 1 PID: 781 at kernel/rcu/rcutorture.c:1902 rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
[ 109.553517][ T781] Modules linked in: rcutorture(+) torture
[ 109.553520][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G W T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
[ 109.553523][ T781] Tainted: [W]=WARN, [T]=RANDSTRUCT
[ 109.553524][ T781] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
[ 109.553525][ T781] EIP: rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
[ 109.553530][ T781] Code: 3d fe 04 1c f1 00 75 27 25 ff ff ff 7f c6 05 fe 04 1c f1 01 50 ff 75 08 57 53 56 68 60 9f 1c f1 68 a4 74 1c f1 e8 da d3 ca a3 <0f> 0b 83 c4 1c a1 40 09 1c f1 8b 40 1c 85 c0 74 41 f6 c3 60 75 3c
[ 109.553532][ T781] EAX: 00000067 EBX: 00000060 ECX: 00000027 EDX: e89c1a00
[ 109.553533][ T781] ESI: f11c936d EDI: 00000060 EBP: 825d1d88 ESP: 825d1d54
[ 109.553535][ T781] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 EFLAGS: 00010282
[ 109.553537][ T781] CR0: 80050033 CR2: 77235000 CR3: 010c5000 CR4: 00040690
[ 109.553539][ T781] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
[ 109.553540][ T781] DR6: fffe0ff0 DR7: 00000400
[ 109.553541][ T781] Call Trace:
[ 109.553543][ T781] ? show_regs+0x4c/0x52
[ 109.553545][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
[ 109.553551][ T781] ? __warn+0x9e/0x15f
[ 109.553555][ T781] ? report_bug+0xe8/0x14a
[ 109.553558][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
[ 109.553565][ T781] ? exc_overflow+0x37/0x37
[ 109.553567][ T781] ? handle_bug+0x3a/0x55
[ 109.553569][ T781] ? exc_invalid_op+0x1a/0x56
[ 109.553572][ T781] ? handle_exception+0x148/0x148
[ 109.553575][ T781] ? osq_wait_next+0x18/0x41
[ 109.553578][ T781] ? exc_overflow+0x37/0x37
[ 109.553580][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
[ 109.553587][ T781] ? exc_overflow+0x37/0x37
[ 109.553589][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
[ 109.553599][ T781] rcutorture_one_extend+0x3b7/0x3c1 [rcutorture]
[ 109.553610][ T781] rcu_torture_one_read+0x21b/0x4d2 [rcutorture]
[ 109.553638][ T781] rcu_torture_reader+0xc4/0xdbd [rcutorture]
[ 109.553646][ T781] ? rcu_torture_one_read+0x4d2/0x4d2 [rcutorture]
[ 109.553655][ T781] kthread+0x169/0x16e
[ 109.553658][ T781] ? rcu_torture_read_exit_child+0x3a/0x3a [rcutorture]
[ 109.553664][ T781] ? kthread_is_per_cpu+0x17/0x17
[ 109.553667][ T781] ret_from_fork+0x19/0x2c
[ 109.553669][ T781] ? kthread_is_per_cpu+0x17/0x17
[ 109.553671][ T781] ret_from_fork_asm+0x12/0x20
[ 109.553673][ T781] entry_INT80_32+0x108/0x108
[ 109.553679][ T781] irq event stamp: 607
[ 109.553680][ T781] hardirqs last enabled at (613): [<94ebb6cb>] console_trylock_spinning+0x6b/0x10a
[ 109.553682][ T781] hardirqs last disabled at (618): [<94ebb691>] console_trylock_spinning+0x31/0x10a
[ 109.553684][ T781] softirqs last enabled at (0): [<94e613c4>] copy_process+0x945/0x1a7d
[ 109.553686][ T781] softirqs last disabled at (0): [<00000000>] 0x0
[ 109.553688][ T781] ---[ end trace 0000000000000000 ]---
[ 109.634034][ T769] rcu-torture: Creating torture_shuffle task
[ 109.635952][ T782] rcu-torture: rcu_torture_stats task started
[ 109.637994][ T769] rcu-torture: Creating torture_stutter task
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [linux-next:master] [rcu] c9b55f9da0: WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]
2025-02-17 6:30 [linux-next:master] [rcu] c9b55f9da0: WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture] kernel test robot
@ 2025-02-19 16:51 ` Paul E. McKenney
2025-02-21 5:56 ` Boqun Feng
2025-02-21 6:59 ` Oliver Sang
0 siblings, 2 replies; 16+ messages in thread
From: Paul E. McKenney @ 2025-02-19 16:51 UTC (permalink / raw)
To: kernel test robot
Cc: Ankur Arora, oe-lkp, lkp, Boqun Feng, Peter Zijlstra,
Frederic Weisbecker, rcu
On Mon, Feb 17, 2025 at 02:30:16PM +0800, kernel test robot wrote:
>
> hi, Ankur Arora and all,
>
> this is not a regression report as our bot normally does. this report is just
> FYI that we observe a WARNING with this config, in case it could supply any
> useful information and/or somebody wants to have a look.
>
> by this change, the config has below diff with parent:
>
> ==================== PARENT FIRST_BAD KCONFIGS f001b7165def8f7af6ce95d08f0e1bbc2442654d ====================
> --- /pkg/linux/i386-randconfig-r121-20250212/gcc-12/f001b7165def8f7af6ce95d08f0e1bbc2442654d/.config 2025-02-13 07:56:33.420457682 +0800
> +++ /pkg/linux/i386-randconfig-r121-20250212/gcc-12/c9b55f9da0d2c72c8c8d8cd5df84af5251b74283/.config 2025-02-13 08:43:08.186415593 +0800
> @@ -147,7 +147,6 @@ CONFIG_BSD_PROCESS_ACCT=y
> # RCU Subsystem
> #
> CONFIG_TREE_RCU=y
> -CONFIG_PREEMPT_RCU=y
> CONFIG_RCU_EXPERT=y
> CONFIG_TREE_SRCU=y
> CONFIG_TASKS_RCU_GENERIC=y
> @@ -162,7 +161,6 @@ CONFIG_RCU_STALL_COMMON=y
> CONFIG_RCU_NEED_SEGCBLIST=y
> CONFIG_RCU_FANOUT=32
> CONFIG_RCU_FANOUT_LEAF=16
> -# CONFIG_RCU_BOOST is not set
> # CONFIG_RCU_NOCB_CPU is not set
> # CONFIG_TASKS_TRACE_RCU_READ_MB is not set
> # CONFIG_RCU_DOUBLE_CHECK_CB_TIME is not set
>
>
> below is full report.
>
>
> Hello,
>
> kernel test robot noticed "WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]" on:
>
> commit: c9b55f9da0d2c72c8c8d8cd5df84af5251b74283 ("rcu: limit PREEMPT_RCU configurations")
> https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git master
>
> [test failed on linux-next/master c674aa7c289e51659e40dda0f954886ef7f80042]
>
> in testcase: rcutorture
> version:
> with following parameters:
>
> runtime: 300s
> test: cpuhotplug
> torture_type: rcu
>
>
>
> config: i386-randconfig-r121-20250212
> 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)
>
>
> +-----------------------------------------------------------------------------+------------+------------+
> | | f001b7165d | c9b55f9da0 |
> +-----------------------------------------------------------------------------+------------+------------+
> | WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture] | 0 | 12 |
> | EIP:rcutorture_one_extend_check | 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 <oliver.sang@intel.com>
> | Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
>
>
> The kernel config and materials to reproduce are available at:
> https://download.01.org/0day-ci/archive/20250217/202502171415.8ec87c87-lkp@intel.com
>
>
> [ 109.553253][ T781] rcu-torture: rcu_torture_reader task started
> [ 109.553258][ T781] ------------[ cut here ]------------
> [ 109.553259][ T781] rcutorture_one_extend_check during change: Current 0x4 To add 0x4 To remove 0x0 preempt_count() 0x1
> [ 109.553292][ T781] WARNING: CPU: 1 PID: 781 at kernel/rcu/rcutorture.c:1905 rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> [ 109.553302][ T781] Modules linked in: rcutorture(+) torture
> [ 109.553307][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
> [ 109.553310][ T781] Tainted: [T]=RANDSTRUCT
> [ 109.553311][ T781] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
> [ 109.553312][ T781] EIP: rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> [ 109.553318][ T781] Code: 75 2d c6 05 fd 04 1c f1 01 64 a1 84 77 7c 97 25 ff ff ff 7f 50 ff 75 08 57 53 56 68 60 9f 1c f1 68 a4 74 1c f1 e8 8d d3 ca a3 <0f> 0b 83 c4 1c 8d 65 f4 5b 5e 5f 5d c3 55 31 d2 83 f8 1f 89 e5 53
> [ 109.553320][ T781] EAX: 00000066 EBX: 00000004 ECX: 00000027 EDX: e89c1a00
> [ 109.553322][ T781] ESI: f11c92d9 EDI: 00000004 EBP: 825d1d88 ESP: 825d1d54
> [ 109.553323][ T781] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 EFLAGS: 00010282
> [ 109.553327][ T781] CR0: 80050033 CR2: 77235000 CR3: 010c5000 CR4: 00040690
> [ 109.553328][ T781] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> [ 109.553330][ T781] DR6: fffe0ff0 DR7: 00000400
> [ 109.553331][ T781] Call Trace:
> [ 109.553333][ T781] ? show_regs+0x4c/0x52
> [ 109.553343][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> [ 109.553349][ T781] ? __warn+0x9e/0x15f
> [ 109.553354][ T781] ? report_bug+0xe8/0x14a
> [ 109.553357][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> [ 109.553364][ T781] ? exc_overflow+0x37/0x37
> [ 109.553367][ T781] ? handle_bug+0x3a/0x55
> [ 109.553369][ T781] ? exc_invalid_op+0x1a/0x56
> [ 109.553372][ T781] ? handle_exception+0x148/0x148
> [ 109.553376][ T781] ? osq_wait_next+0x18/0x41
> [ 109.553379][ T781] ? exc_overflow+0x37/0x37
> [ 109.553381][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> [ 109.553388][ T781] ? exc_overflow+0x37/0x37
> [ 109.553390][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> [ 109.553399][ T781] rcutorture_one_extend+0x18c/0x3c1 [rcutorture]
> [ 109.553410][ T781] rcu_torture_one_read+0x95/0x4d2 [rcutorture]
> [ 109.553417][ T781] ? validate_chain+0x3d/0x24c
> [ 109.553420][ T781] ? mark_lock+0x6a/0x14d
> [ 109.553440][ T781] rcu_torture_reader+0xc4/0xdbd [rcutorture]
> [ 109.553448][ T781] ? rcu_torture_one_read+0x4d2/0x4d2 [rcutorture]
> [ 109.553457][ T781] kthread+0x169/0x16e
> [ 109.553459][ T781] ? rcu_torture_read_exit_child+0x3a/0x3a [rcutorture]
> [ 109.553466][ T781] ? kthread_is_per_cpu+0x17/0x17
> [ 109.553468][ T781] ret_from_fork+0x19/0x2c
> [ 109.553471][ T781] ? kthread_is_per_cpu+0x17/0x17
> [ 109.553472][ T781] ret_from_fork_asm+0x12/0x20
> [ 109.553475][ T781] entry_INT80_32+0x108/0x108
> [ 109.553481][ T781] irq event stamp: 307
> [ 109.553482][ T781] hardirqs last enabled at (313): [<94ebb6cb>] console_trylock_spinning+0x6b/0x10a
> [ 109.553485][ T781] hardirqs last disabled at (318): [<94ebb691>] console_trylock_spinning+0x31/0x10a
> [ 109.553486][ T781] softirqs last enabled at (0): [<94e613c4>] copy_process+0x945/0x1a7d
> [ 109.553489][ T781] softirqs last disabled at (0): [<00000000>] 0x0
> [ 109.553491][ T781] ---[ end trace 0000000000000000 ]---
> [ 109.553494][ T781] ------------[ cut here ]------------
> [ 109.553496][ T781] rcutorture_one_extend_check after change: Current 0x60 To add 0x60 To remove 0x4 preempt_count() 0x2
> [ 109.553510][ T781] WARNING: CPU: 1 PID: 781 at kernel/rcu/rcutorture.c:1902 rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> [ 109.553517][ T781] Modules linked in: rcutorture(+) torture
> [ 109.553520][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G W T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
> [ 109.553523][ T781] Tainted: [W]=WARN, [T]=RANDSTRUCT
> [ 109.553524][ T781] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
> [ 109.553525][ T781] EIP: rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> [ 109.553530][ T781] Code: 3d fe 04 1c f1 00 75 27 25 ff ff ff 7f c6 05 fe 04 1c f1 01 50 ff 75 08 57 53 56 68 60 9f 1c f1 68 a4 74 1c f1 e8 da d3 ca a3 <0f> 0b 83 c4 1c a1 40 09 1c f1 8b 40 1c 85 c0 74 41 f6 c3 60 75 3c
> [ 109.553532][ T781] EAX: 00000067 EBX: 00000060 ECX: 00000027 EDX: e89c1a00
> [ 109.553533][ T781] ESI: f11c936d EDI: 00000060 EBP: 825d1d88 ESP: 825d1d54
> [ 109.553535][ T781] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 EFLAGS: 00010282
> [ 109.553537][ T781] CR0: 80050033 CR2: 77235000 CR3: 010c5000 CR4: 00040690
> [ 109.553539][ T781] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> [ 109.553540][ T781] DR6: fffe0ff0 DR7: 00000400
> [ 109.553541][ T781] Call Trace:
> [ 109.553543][ T781] ? show_regs+0x4c/0x52
> [ 109.553545][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> [ 109.553551][ T781] ? __warn+0x9e/0x15f
> [ 109.553555][ T781] ? report_bug+0xe8/0x14a
> [ 109.553558][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> [ 109.553565][ T781] ? exc_overflow+0x37/0x37
> [ 109.553567][ T781] ? handle_bug+0x3a/0x55
> [ 109.553569][ T781] ? exc_invalid_op+0x1a/0x56
> [ 109.553572][ T781] ? handle_exception+0x148/0x148
> [ 109.553575][ T781] ? osq_wait_next+0x18/0x41
> [ 109.553578][ T781] ? exc_overflow+0x37/0x37
> [ 109.553580][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> [ 109.553587][ T781] ? exc_overflow+0x37/0x37
> [ 109.553589][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> [ 109.553599][ T781] rcutorture_one_extend+0x3b7/0x3c1 [rcutorture]
> [ 109.553610][ T781] rcu_torture_one_read+0x21b/0x4d2 [rcutorture]
> [ 109.553638][ T781] rcu_torture_reader+0xc4/0xdbd [rcutorture]
> [ 109.553646][ T781] ? rcu_torture_one_read+0x4d2/0x4d2 [rcutorture]
> [ 109.553655][ T781] kthread+0x169/0x16e
> [ 109.553658][ T781] ? rcu_torture_read_exit_child+0x3a/0x3a [rcutorture]
> [ 109.553664][ T781] ? kthread_is_per_cpu+0x17/0x17
> [ 109.553667][ T781] ret_from_fork+0x19/0x2c
> [ 109.553669][ T781] ? kthread_is_per_cpu+0x17/0x17
> [ 109.553671][ T781] ret_from_fork_asm+0x12/0x20
> [ 109.553673][ T781] entry_INT80_32+0x108/0x108
> [ 109.553679][ T781] irq event stamp: 607
> [ 109.553680][ T781] hardirqs last enabled at (613): [<94ebb6cb>] console_trylock_spinning+0x6b/0x10a
> [ 109.553682][ T781] hardirqs last disabled at (618): [<94ebb691>] console_trylock_spinning+0x31/0x10a
> [ 109.553684][ T781] softirqs last enabled at (0): [<94e613c4>] copy_process+0x945/0x1a7d
> [ 109.553686][ T781] softirqs last disabled at (0): [<00000000>] 0x0
> [ 109.553688][ T781] ---[ end trace 0000000000000000 ]---
> [ 109.634034][ T769] rcu-torture: Creating torture_shuffle task
> [ 109.635952][ T782] rcu-torture: rcu_torture_stats task started
> [ 109.637994][ T769] rcu-torture: Creating torture_stutter task
And rcutorture's WARN_ON() has a bug that is exposed by that change
in Kconfig option. Does the patch shown below help?
Either way, thank you for your testing efforts!
Thanx, Paul
------------------------------------------------------------------------
commit bb638fe1a683316397d5517cb7d1797d70d21c86
Author: Paul E. McKenney <paulmck@kernel.org>
Date: Wed Feb 19 08:41:11 2025 -0800
rcutorture: Update rcutorture_one_extend_check() for lazy preemption
The rcutorture_one_extend_check() function's last check assumes that
if cur_ops->readlock_nesting() returns greater than zero, either the
RCUTORTURE_RDR_RCU_1 or the RCUTORTURE_RDR_RCU_2 bit must be set, that
is, there must be at least one rcu_read_lock() in effect.
This works for preemptible RCU and for non-preemptible RCU running in
a non-preemptible kernel. But it fails for non-preemptible RCU running
in a preemptible kernel because then RCU's cur_ops->readlock_nesting()
function, which is rcu_torture_readlock_nesting(), will return
the PREEMPT_MASK mask bits from preempt_count(). The result will
be greater than zero if preemption is disabled, including by the
RCUTORTURE_RDR_PREEMPT and RCUTORTURE_RDR_SCHED bits.
This commit therefore adjusts this check to take into account the case
fo non-preemptible RCU running in a preemptible kernel.
Reported-by: kernel test robot <oliver.sang@intel.com>
Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Co-developed-by: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index 895a27545ae1e..0f446ff04eda1 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -1981,6 +1981,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
#define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
{
+ int mask;
+
if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
return;
@@ -2010,8 +2012,10 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
WARN_ONCE(cur_ops->extendables &&
!(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
(preempt_count() & PREEMPT_MASK), ROEC_ARGS);
- WARN_ONCE(cur_ops->readlock_nesting &&
- !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
+ mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
+ if (IS_ENABLED(CONFIG_PREEMPT_RCU))
+ mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
+ WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
cur_ops->readlock_nesting() > 0, ROEC_ARGS);
}
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [linux-next:master] [rcu] c9b55f9da0: WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]
2025-02-19 16:51 ` Paul E. McKenney
@ 2025-02-21 5:56 ` Boqun Feng
2025-02-21 6:59 ` Oliver Sang
1 sibling, 0 replies; 16+ messages in thread
From: Boqun Feng @ 2025-02-21 5:56 UTC (permalink / raw)
To: Paul E. McKenney
Cc: kernel test robot, Ankur Arora, oe-lkp, lkp, Peter Zijlstra,
Frederic Weisbecker, rcu
On Wed, Feb 19, 2025 at 08:51:45AM -0800, Paul E. McKenney wrote:
> On Mon, Feb 17, 2025 at 02:30:16PM +0800, kernel test robot wrote:
> >
> > hi, Ankur Arora and all,
> >
> > this is not a regression report as our bot normally does. this report is just
> > FYI that we observe a WARNING with this config, in case it could supply any
> > useful information and/or somebody wants to have a look.
> >
> > by this change, the config has below diff with parent:
> >
> > ==================== PARENT FIRST_BAD KCONFIGS f001b7165def8f7af6ce95d08f0e1bbc2442654d ====================
> > --- /pkg/linux/i386-randconfig-r121-20250212/gcc-12/f001b7165def8f7af6ce95d08f0e1bbc2442654d/.config 2025-02-13 07:56:33.420457682 +0800
> > +++ /pkg/linux/i386-randconfig-r121-20250212/gcc-12/c9b55f9da0d2c72c8c8d8cd5df84af5251b74283/.config 2025-02-13 08:43:08.186415593 +0800
> > @@ -147,7 +147,6 @@ CONFIG_BSD_PROCESS_ACCT=y
> > # RCU Subsystem
> > #
> > CONFIG_TREE_RCU=y
> > -CONFIG_PREEMPT_RCU=y
> > CONFIG_RCU_EXPERT=y
> > CONFIG_TREE_SRCU=y
> > CONFIG_TASKS_RCU_GENERIC=y
> > @@ -162,7 +161,6 @@ CONFIG_RCU_STALL_COMMON=y
> > CONFIG_RCU_NEED_SEGCBLIST=y
> > CONFIG_RCU_FANOUT=32
> > CONFIG_RCU_FANOUT_LEAF=16
> > -# CONFIG_RCU_BOOST is not set
> > # CONFIG_RCU_NOCB_CPU is not set
> > # CONFIG_TASKS_TRACE_RCU_READ_MB is not set
> > # CONFIG_RCU_DOUBLE_CHECK_CB_TIME is not set
> >
> >
> > below is full report.
> >
> >
> > Hello,
> >
> > kernel test robot noticed "WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]" on:
> >
> > commit: c9b55f9da0d2c72c8c8d8cd5df84af5251b74283 ("rcu: limit PREEMPT_RCU configurations")
> > https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git master
> >
> > [test failed on linux-next/master c674aa7c289e51659e40dda0f954886ef7f80042]
> >
> > in testcase: rcutorture
> > version:
> > with following parameters:
> >
> > runtime: 300s
> > test: cpuhotplug
> > torture_type: rcu
> >
> >
> >
> > config: i386-randconfig-r121-20250212
> > 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)
> >
> >
> > +-----------------------------------------------------------------------------+------------+------------+
> > | | f001b7165d | c9b55f9da0 |
> > +-----------------------------------------------------------------------------+------------+------------+
> > | WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture] | 0 | 12 |
> > | EIP:rcutorture_one_extend_check | 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 <oliver.sang@intel.com>
> > | Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
> >
> >
> > The kernel config and materials to reproduce are available at:
> > https://download.01.org/0day-ci/archive/20250217/202502171415.8ec87c87-lkp@intel.com
> >
> >
> > [ 109.553253][ T781] rcu-torture: rcu_torture_reader task started
> > [ 109.553258][ T781] ------------[ cut here ]------------
> > [ 109.553259][ T781] rcutorture_one_extend_check during change: Current 0x4 To add 0x4 To remove 0x0 preempt_count() 0x1
> > [ 109.553292][ T781] WARNING: CPU: 1 PID: 781 at kernel/rcu/rcutorture.c:1905 rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553302][ T781] Modules linked in: rcutorture(+) torture
> > [ 109.553307][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
> > [ 109.553310][ T781] Tainted: [T]=RANDSTRUCT
> > [ 109.553311][ T781] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
> > [ 109.553312][ T781] EIP: rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553318][ T781] Code: 75 2d c6 05 fd 04 1c f1 01 64 a1 84 77 7c 97 25 ff ff ff 7f 50 ff 75 08 57 53 56 68 60 9f 1c f1 68 a4 74 1c f1 e8 8d d3 ca a3 <0f> 0b 83 c4 1c 8d 65 f4 5b 5e 5f 5d c3 55 31 d2 83 f8 1f 89 e5 53
> > [ 109.553320][ T781] EAX: 00000066 EBX: 00000004 ECX: 00000027 EDX: e89c1a00
> > [ 109.553322][ T781] ESI: f11c92d9 EDI: 00000004 EBP: 825d1d88 ESP: 825d1d54
> > [ 109.553323][ T781] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 EFLAGS: 00010282
> > [ 109.553327][ T781] CR0: 80050033 CR2: 77235000 CR3: 010c5000 CR4: 00040690
> > [ 109.553328][ T781] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> > [ 109.553330][ T781] DR6: fffe0ff0 DR7: 00000400
> > [ 109.553331][ T781] Call Trace:
> > [ 109.553333][ T781] ? show_regs+0x4c/0x52
> > [ 109.553343][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553349][ T781] ? __warn+0x9e/0x15f
> > [ 109.553354][ T781] ? report_bug+0xe8/0x14a
> > [ 109.553357][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553364][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553367][ T781] ? handle_bug+0x3a/0x55
> > [ 109.553369][ T781] ? exc_invalid_op+0x1a/0x56
> > [ 109.553372][ T781] ? handle_exception+0x148/0x148
> > [ 109.553376][ T781] ? osq_wait_next+0x18/0x41
> > [ 109.553379][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553381][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553388][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553390][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553399][ T781] rcutorture_one_extend+0x18c/0x3c1 [rcutorture]
> > [ 109.553410][ T781] rcu_torture_one_read+0x95/0x4d2 [rcutorture]
> > [ 109.553417][ T781] ? validate_chain+0x3d/0x24c
> > [ 109.553420][ T781] ? mark_lock+0x6a/0x14d
> > [ 109.553440][ T781] rcu_torture_reader+0xc4/0xdbd [rcutorture]
> > [ 109.553448][ T781] ? rcu_torture_one_read+0x4d2/0x4d2 [rcutorture]
> > [ 109.553457][ T781] kthread+0x169/0x16e
> > [ 109.553459][ T781] ? rcu_torture_read_exit_child+0x3a/0x3a [rcutorture]
> > [ 109.553466][ T781] ? kthread_is_per_cpu+0x17/0x17
> > [ 109.553468][ T781] ret_from_fork+0x19/0x2c
> > [ 109.553471][ T781] ? kthread_is_per_cpu+0x17/0x17
> > [ 109.553472][ T781] ret_from_fork_asm+0x12/0x20
> > [ 109.553475][ T781] entry_INT80_32+0x108/0x108
> > [ 109.553481][ T781] irq event stamp: 307
> > [ 109.553482][ T781] hardirqs last enabled at (313): [<94ebb6cb>] console_trylock_spinning+0x6b/0x10a
> > [ 109.553485][ T781] hardirqs last disabled at (318): [<94ebb691>] console_trylock_spinning+0x31/0x10a
> > [ 109.553486][ T781] softirqs last enabled at (0): [<94e613c4>] copy_process+0x945/0x1a7d
> > [ 109.553489][ T781] softirqs last disabled at (0): [<00000000>] 0x0
> > [ 109.553491][ T781] ---[ end trace 0000000000000000 ]---
> > [ 109.553494][ T781] ------------[ cut here ]------------
> > [ 109.553496][ T781] rcutorture_one_extend_check after change: Current 0x60 To add 0x60 To remove 0x4 preempt_count() 0x2
> > [ 109.553510][ T781] WARNING: CPU: 1 PID: 781 at kernel/rcu/rcutorture.c:1902 rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553517][ T781] Modules linked in: rcutorture(+) torture
> > [ 109.553520][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G W T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
> > [ 109.553523][ T781] Tainted: [W]=WARN, [T]=RANDSTRUCT
> > [ 109.553524][ T781] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
> > [ 109.553525][ T781] EIP: rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553530][ T781] Code: 3d fe 04 1c f1 00 75 27 25 ff ff ff 7f c6 05 fe 04 1c f1 01 50 ff 75 08 57 53 56 68 60 9f 1c f1 68 a4 74 1c f1 e8 da d3 ca a3 <0f> 0b 83 c4 1c a1 40 09 1c f1 8b 40 1c 85 c0 74 41 f6 c3 60 75 3c
> > [ 109.553532][ T781] EAX: 00000067 EBX: 00000060 ECX: 00000027 EDX: e89c1a00
> > [ 109.553533][ T781] ESI: f11c936d EDI: 00000060 EBP: 825d1d88 ESP: 825d1d54
> > [ 109.553535][ T781] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 EFLAGS: 00010282
> > [ 109.553537][ T781] CR0: 80050033 CR2: 77235000 CR3: 010c5000 CR4: 00040690
> > [ 109.553539][ T781] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> > [ 109.553540][ T781] DR6: fffe0ff0 DR7: 00000400
> > [ 109.553541][ T781] Call Trace:
> > [ 109.553543][ T781] ? show_regs+0x4c/0x52
> > [ 109.553545][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553551][ T781] ? __warn+0x9e/0x15f
> > [ 109.553555][ T781] ? report_bug+0xe8/0x14a
> > [ 109.553558][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553565][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553567][ T781] ? handle_bug+0x3a/0x55
> > [ 109.553569][ T781] ? exc_invalid_op+0x1a/0x56
> > [ 109.553572][ T781] ? handle_exception+0x148/0x148
> > [ 109.553575][ T781] ? osq_wait_next+0x18/0x41
> > [ 109.553578][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553580][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553587][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553589][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553599][ T781] rcutorture_one_extend+0x3b7/0x3c1 [rcutorture]
> > [ 109.553610][ T781] rcu_torture_one_read+0x21b/0x4d2 [rcutorture]
> > [ 109.553638][ T781] rcu_torture_reader+0xc4/0xdbd [rcutorture]
> > [ 109.553646][ T781] ? rcu_torture_one_read+0x4d2/0x4d2 [rcutorture]
> > [ 109.553655][ T781] kthread+0x169/0x16e
> > [ 109.553658][ T781] ? rcu_torture_read_exit_child+0x3a/0x3a [rcutorture]
> > [ 109.553664][ T781] ? kthread_is_per_cpu+0x17/0x17
> > [ 109.553667][ T781] ret_from_fork+0x19/0x2c
> > [ 109.553669][ T781] ? kthread_is_per_cpu+0x17/0x17
> > [ 109.553671][ T781] ret_from_fork_asm+0x12/0x20
> > [ 109.553673][ T781] entry_INT80_32+0x108/0x108
> > [ 109.553679][ T781] irq event stamp: 607
> > [ 109.553680][ T781] hardirqs last enabled at (613): [<94ebb6cb>] console_trylock_spinning+0x6b/0x10a
> > [ 109.553682][ T781] hardirqs last disabled at (618): [<94ebb691>] console_trylock_spinning+0x31/0x10a
> > [ 109.553684][ T781] softirqs last enabled at (0): [<94e613c4>] copy_process+0x945/0x1a7d
> > [ 109.553686][ T781] softirqs last disabled at (0): [<00000000>] 0x0
> > [ 109.553688][ T781] ---[ end trace 0000000000000000 ]---
> > [ 109.634034][ T769] rcu-torture: Creating torture_shuffle task
> > [ 109.635952][ T782] rcu-torture: rcu_torture_stats task started
> > [ 109.637994][ T769] rcu-torture: Creating torture_stutter task
>
> And rcutorture's WARN_ON() has a bug that is exposed by that change
> in Kconfig option. Does the patch shown below help?
>
> Either way, thank you for your testing efforts!
>
Thanks! I put it in the topic branch (and update the next branch of rcu
repo) for the upcoming PR (right before commit "rcu: limit PREEMPT_RCU
configurations"), unfortunately I cannot reproduce the issue, maybe
kernel test robot can help confirm it?
Regards,
Boqun
> Thanx, Paul
>
> ------------------------------------------------------------------------
>
> commit bb638fe1a683316397d5517cb7d1797d70d21c86
> Author: Paul E. McKenney <paulmck@kernel.org>
> Date: Wed Feb 19 08:41:11 2025 -0800
>
> rcutorture: Update rcutorture_one_extend_check() for lazy preemption
>
> The rcutorture_one_extend_check() function's last check assumes that
> if cur_ops->readlock_nesting() returns greater than zero, either the
> RCUTORTURE_RDR_RCU_1 or the RCUTORTURE_RDR_RCU_2 bit must be set, that
> is, there must be at least one rcu_read_lock() in effect.
>
> This works for preemptible RCU and for non-preemptible RCU running in
> a non-preemptible kernel. But it fails for non-preemptible RCU running
> in a preemptible kernel because then RCU's cur_ops->readlock_nesting()
> function, which is rcu_torture_readlock_nesting(), will return
> the PREEMPT_MASK mask bits from preempt_count(). The result will
> be greater than zero if preemption is disabled, including by the
> RCUTORTURE_RDR_PREEMPT and RCUTORTURE_RDR_SCHED bits.
>
> This commit therefore adjusts this check to take into account the case
> fo non-preemptible RCU running in a preemptible kernel.
>
> Reported-by: kernel test robot <oliver.sang@intel.com>
> Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
> Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> Co-developed-by: Joel Fernandes <joelagnelf@nvidia.com>
> Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
>
> diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> index 895a27545ae1e..0f446ff04eda1 100644
> --- a/kernel/rcu/rcutorture.c
> +++ b/kernel/rcu/rcutorture.c
> @@ -1981,6 +1981,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
> #define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
> static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
> {
> + int mask;
> +
> if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
> return;
>
> @@ -2010,8 +2012,10 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> WARN_ONCE(cur_ops->extendables &&
> !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
> - WARN_ONCE(cur_ops->readlock_nesting &&
> - !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
> + mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> + if (IS_ENABLED(CONFIG_PREEMPT_RCU))
> + mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
> cur_ops->readlock_nesting() > 0, ROEC_ARGS);
> }
>
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [linux-next:master] [rcu] c9b55f9da0: WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]
2025-02-19 16:51 ` Paul E. McKenney
2025-02-21 5:56 ` Boqun Feng
@ 2025-02-21 6:59 ` Oliver Sang
2025-02-22 1:02 ` Paul E. McKenney
1 sibling, 1 reply; 16+ messages in thread
From: Oliver Sang @ 2025-02-21 6:59 UTC (permalink / raw)
To: Paul E. McKenney
Cc: Ankur Arora, oe-lkp, lkp, Boqun Feng, Peter Zijlstra,
Frederic Weisbecker, rcu
[-- Attachment #1: Type: text/plain, Size: 14209 bytes --]
hi, Paul,
On Wed, Feb 19, 2025 at 08:51:45AM -0800, Paul E. McKenney wrote:
> On Mon, Feb 17, 2025 at 02:30:16PM +0800, kernel test robot wrote:
> >
> > hi, Ankur Arora and all,
> >
> > this is not a regression report as our bot normally does. this report is just
> > FYI that we observe a WARNING with this config, in case it could supply any
> > useful information and/or somebody wants to have a look.
> >
> > by this change, the config has below diff with parent:
> >
> > ==================== PARENT FIRST_BAD KCONFIGS f001b7165def8f7af6ce95d08f0e1bbc2442654d ====================
> > --- /pkg/linux/i386-randconfig-r121-20250212/gcc-12/f001b7165def8f7af6ce95d08f0e1bbc2442654d/.config 2025-02-13 07:56:33.420457682 +0800
> > +++ /pkg/linux/i386-randconfig-r121-20250212/gcc-12/c9b55f9da0d2c72c8c8d8cd5df84af5251b74283/.config 2025-02-13 08:43:08.186415593 +0800
> > @@ -147,7 +147,6 @@ CONFIG_BSD_PROCESS_ACCT=y
> > # RCU Subsystem
> > #
> > CONFIG_TREE_RCU=y
> > -CONFIG_PREEMPT_RCU=y
> > CONFIG_RCU_EXPERT=y
> > CONFIG_TREE_SRCU=y
> > CONFIG_TASKS_RCU_GENERIC=y
> > @@ -162,7 +161,6 @@ CONFIG_RCU_STALL_COMMON=y
> > CONFIG_RCU_NEED_SEGCBLIST=y
> > CONFIG_RCU_FANOUT=32
> > CONFIG_RCU_FANOUT_LEAF=16
> > -# CONFIG_RCU_BOOST is not set
> > # CONFIG_RCU_NOCB_CPU is not set
> > # CONFIG_TASKS_TRACE_RCU_READ_MB is not set
> > # CONFIG_RCU_DOUBLE_CHECK_CB_TIME is not set
> >
> >
> > below is full report.
> >
> >
> > Hello,
> >
> > kernel test robot noticed "WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]" on:
> >
> > commit: c9b55f9da0d2c72c8c8d8cd5df84af5251b74283 ("rcu: limit PREEMPT_RCU configurations")
> > https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git master
> >
> > [test failed on linux-next/master c674aa7c289e51659e40dda0f954886ef7f80042]
> >
> > in testcase: rcutorture
> > version:
> > with following parameters:
> >
> > runtime: 300s
> > test: cpuhotplug
> > torture_type: rcu
> >
> >
> >
> > config: i386-randconfig-r121-20250212
> > 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)
> >
> >
> > +-----------------------------------------------------------------------------+------------+------------+
> > | | f001b7165d | c9b55f9da0 |
> > +-----------------------------------------------------------------------------+------------+------------+
> > | WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture] | 0 | 12 |
> > | EIP:rcutorture_one_extend_check | 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 <oliver.sang@intel.com>
> > | Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
> >
> >
> > The kernel config and materials to reproduce are available at:
> > https://download.01.org/0day-ci/archive/20250217/202502171415.8ec87c87-lkp@intel.com
> >
> >
> > [ 109.553253][ T781] rcu-torture: rcu_torture_reader task started
> > [ 109.553258][ T781] ------------[ cut here ]------------
> > [ 109.553259][ T781] rcutorture_one_extend_check during change: Current 0x4 To add 0x4 To remove 0x0 preempt_count() 0x1
> > [ 109.553292][ T781] WARNING: CPU: 1 PID: 781 at kernel/rcu/rcutorture.c:1905 rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553302][ T781] Modules linked in: rcutorture(+) torture
> > [ 109.553307][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
> > [ 109.553310][ T781] Tainted: [T]=RANDSTRUCT
> > [ 109.553311][ T781] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
> > [ 109.553312][ T781] EIP: rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553318][ T781] Code: 75 2d c6 05 fd 04 1c f1 01 64 a1 84 77 7c 97 25 ff ff ff 7f 50 ff 75 08 57 53 56 68 60 9f 1c f1 68 a4 74 1c f1 e8 8d d3 ca a3 <0f> 0b 83 c4 1c 8d 65 f4 5b 5e 5f 5d c3 55 31 d2 83 f8 1f 89 e5 53
> > [ 109.553320][ T781] EAX: 00000066 EBX: 00000004 ECX: 00000027 EDX: e89c1a00
> > [ 109.553322][ T781] ESI: f11c92d9 EDI: 00000004 EBP: 825d1d88 ESP: 825d1d54
> > [ 109.553323][ T781] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 EFLAGS: 00010282
> > [ 109.553327][ T781] CR0: 80050033 CR2: 77235000 CR3: 010c5000 CR4: 00040690
> > [ 109.553328][ T781] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> > [ 109.553330][ T781] DR6: fffe0ff0 DR7: 00000400
> > [ 109.553331][ T781] Call Trace:
> > [ 109.553333][ T781] ? show_regs+0x4c/0x52
> > [ 109.553343][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553349][ T781] ? __warn+0x9e/0x15f
> > [ 109.553354][ T781] ? report_bug+0xe8/0x14a
> > [ 109.553357][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553364][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553367][ T781] ? handle_bug+0x3a/0x55
> > [ 109.553369][ T781] ? exc_invalid_op+0x1a/0x56
> > [ 109.553372][ T781] ? handle_exception+0x148/0x148
> > [ 109.553376][ T781] ? osq_wait_next+0x18/0x41
> > [ 109.553379][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553381][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553388][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553390][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > [ 109.553399][ T781] rcutorture_one_extend+0x18c/0x3c1 [rcutorture]
> > [ 109.553410][ T781] rcu_torture_one_read+0x95/0x4d2 [rcutorture]
> > [ 109.553417][ T781] ? validate_chain+0x3d/0x24c
> > [ 109.553420][ T781] ? mark_lock+0x6a/0x14d
> > [ 109.553440][ T781] rcu_torture_reader+0xc4/0xdbd [rcutorture]
> > [ 109.553448][ T781] ? rcu_torture_one_read+0x4d2/0x4d2 [rcutorture]
> > [ 109.553457][ T781] kthread+0x169/0x16e
> > [ 109.553459][ T781] ? rcu_torture_read_exit_child+0x3a/0x3a [rcutorture]
> > [ 109.553466][ T781] ? kthread_is_per_cpu+0x17/0x17
> > [ 109.553468][ T781] ret_from_fork+0x19/0x2c
> > [ 109.553471][ T781] ? kthread_is_per_cpu+0x17/0x17
> > [ 109.553472][ T781] ret_from_fork_asm+0x12/0x20
> > [ 109.553475][ T781] entry_INT80_32+0x108/0x108
> > [ 109.553481][ T781] irq event stamp: 307
> > [ 109.553482][ T781] hardirqs last enabled at (313): [<94ebb6cb>] console_trylock_spinning+0x6b/0x10a
> > [ 109.553485][ T781] hardirqs last disabled at (318): [<94ebb691>] console_trylock_spinning+0x31/0x10a
> > [ 109.553486][ T781] softirqs last enabled at (0): [<94e613c4>] copy_process+0x945/0x1a7d
> > [ 109.553489][ T781] softirqs last disabled at (0): [<00000000>] 0x0
> > [ 109.553491][ T781] ---[ end trace 0000000000000000 ]---
> > [ 109.553494][ T781] ------------[ cut here ]------------
> > [ 109.553496][ T781] rcutorture_one_extend_check after change: Current 0x60 To add 0x60 To remove 0x4 preempt_count() 0x2
> > [ 109.553510][ T781] WARNING: CPU: 1 PID: 781 at kernel/rcu/rcutorture.c:1902 rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553517][ T781] Modules linked in: rcutorture(+) torture
> > [ 109.553520][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G W T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
> > [ 109.553523][ T781] Tainted: [W]=WARN, [T]=RANDSTRUCT
> > [ 109.553524][ T781] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
> > [ 109.553525][ T781] EIP: rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553530][ T781] Code: 3d fe 04 1c f1 00 75 27 25 ff ff ff 7f c6 05 fe 04 1c f1 01 50 ff 75 08 57 53 56 68 60 9f 1c f1 68 a4 74 1c f1 e8 da d3 ca a3 <0f> 0b 83 c4 1c a1 40 09 1c f1 8b 40 1c 85 c0 74 41 f6 c3 60 75 3c
> > [ 109.553532][ T781] EAX: 00000067 EBX: 00000060 ECX: 00000027 EDX: e89c1a00
> > [ 109.553533][ T781] ESI: f11c936d EDI: 00000060 EBP: 825d1d88 ESP: 825d1d54
> > [ 109.553535][ T781] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 EFLAGS: 00010282
> > [ 109.553537][ T781] CR0: 80050033 CR2: 77235000 CR3: 010c5000 CR4: 00040690
> > [ 109.553539][ T781] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> > [ 109.553540][ T781] DR6: fffe0ff0 DR7: 00000400
> > [ 109.553541][ T781] Call Trace:
> > [ 109.553543][ T781] ? show_regs+0x4c/0x52
> > [ 109.553545][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553551][ T781] ? __warn+0x9e/0x15f
> > [ 109.553555][ T781] ? report_bug+0xe8/0x14a
> > [ 109.553558][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553565][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553567][ T781] ? handle_bug+0x3a/0x55
> > [ 109.553569][ T781] ? exc_invalid_op+0x1a/0x56
> > [ 109.553572][ T781] ? handle_exception+0x148/0x148
> > [ 109.553575][ T781] ? osq_wait_next+0x18/0x41
> > [ 109.553578][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553580][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553587][ T781] ? exc_overflow+0x37/0x37
> > [ 109.553589][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > [ 109.553599][ T781] rcutorture_one_extend+0x3b7/0x3c1 [rcutorture]
> > [ 109.553610][ T781] rcu_torture_one_read+0x21b/0x4d2 [rcutorture]
> > [ 109.553638][ T781] rcu_torture_reader+0xc4/0xdbd [rcutorture]
> > [ 109.553646][ T781] ? rcu_torture_one_read+0x4d2/0x4d2 [rcutorture]
> > [ 109.553655][ T781] kthread+0x169/0x16e
> > [ 109.553658][ T781] ? rcu_torture_read_exit_child+0x3a/0x3a [rcutorture]
> > [ 109.553664][ T781] ? kthread_is_per_cpu+0x17/0x17
> > [ 109.553667][ T781] ret_from_fork+0x19/0x2c
> > [ 109.553669][ T781] ? kthread_is_per_cpu+0x17/0x17
> > [ 109.553671][ T781] ret_from_fork_asm+0x12/0x20
> > [ 109.553673][ T781] entry_INT80_32+0x108/0x108
> > [ 109.553679][ T781] irq event stamp: 607
> > [ 109.553680][ T781] hardirqs last enabled at (613): [<94ebb6cb>] console_trylock_spinning+0x6b/0x10a
> > [ 109.553682][ T781] hardirqs last disabled at (618): [<94ebb691>] console_trylock_spinning+0x31/0x10a
> > [ 109.553684][ T781] softirqs last enabled at (0): [<94e613c4>] copy_process+0x945/0x1a7d
> > [ 109.553686][ T781] softirqs last disabled at (0): [<00000000>] 0x0
> > [ 109.553688][ T781] ---[ end trace 0000000000000000 ]---
> > [ 109.634034][ T769] rcu-torture: Creating torture_shuffle task
> > [ 109.635952][ T782] rcu-torture: rcu_torture_stats task started
> > [ 109.637994][ T769] rcu-torture: Creating torture_stutter task
>
> And rcutorture's WARN_ON() has a bug that is exposed by that change
> in Kconfig option. Does the patch shown below help?
the patch does not fix the WARNING in our tests. attached one dmesg FYI.
>
> Either way, thank you for your testing efforts!
>
> Thanx, Paul
>
> ------------------------------------------------------------------------
>
> commit bb638fe1a683316397d5517cb7d1797d70d21c86
> Author: Paul E. McKenney <paulmck@kernel.org>
> Date: Wed Feb 19 08:41:11 2025 -0800
>
> rcutorture: Update rcutorture_one_extend_check() for lazy preemption
>
> The rcutorture_one_extend_check() function's last check assumes that
> if cur_ops->readlock_nesting() returns greater than zero, either the
> RCUTORTURE_RDR_RCU_1 or the RCUTORTURE_RDR_RCU_2 bit must be set, that
> is, there must be at least one rcu_read_lock() in effect.
>
> This works for preemptible RCU and for non-preemptible RCU running in
> a non-preemptible kernel. But it fails for non-preemptible RCU running
> in a preemptible kernel because then RCU's cur_ops->readlock_nesting()
> function, which is rcu_torture_readlock_nesting(), will return
> the PREEMPT_MASK mask bits from preempt_count(). The result will
> be greater than zero if preemption is disabled, including by the
> RCUTORTURE_RDR_PREEMPT and RCUTORTURE_RDR_SCHED bits.
>
> This commit therefore adjusts this check to take into account the case
> fo non-preemptible RCU running in a preemptible kernel.
>
> Reported-by: kernel test robot <oliver.sang@intel.com>
> Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
> Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> Co-developed-by: Joel Fernandes <joelagnelf@nvidia.com>
> Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
>
> diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> index 895a27545ae1e..0f446ff04eda1 100644
> --- a/kernel/rcu/rcutorture.c
> +++ b/kernel/rcu/rcutorture.c
> @@ -1981,6 +1981,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
> #define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
> static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
> {
> + int mask;
> +
> if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
> return;
>
> @@ -2010,8 +2012,10 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> WARN_ONCE(cur_ops->extendables &&
> !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
> - WARN_ONCE(cur_ops->readlock_nesting &&
> - !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
> + mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> + if (IS_ENABLED(CONFIG_PREEMPT_RCU))
> + mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
> cur_ops->readlock_nesting() > 0, ROEC_ARGS);
> }
>
>
[-- Attachment #2: dmesg.xz --]
[-- Type: application/x-xz, Size: 74464 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [linux-next:master] [rcu] c9b55f9da0: WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]
2025-02-21 6:59 ` Oliver Sang
@ 2025-02-22 1:02 ` Paul E. McKenney
2025-02-24 2:22 ` Oliver Sang
0 siblings, 1 reply; 16+ messages in thread
From: Paul E. McKenney @ 2025-02-22 1:02 UTC (permalink / raw)
To: Oliver Sang
Cc: Ankur Arora, oe-lkp, lkp, Boqun Feng, Peter Zijlstra,
Frederic Weisbecker, rcu
On Fri, Feb 21, 2025 at 02:59:41PM +0800, Oliver Sang wrote:
> hi, Paul,
>
> On Wed, Feb 19, 2025 at 08:51:45AM -0800, Paul E. McKenney wrote:
> > On Mon, Feb 17, 2025 at 02:30:16PM +0800, kernel test robot wrote:
> > >
> > > hi, Ankur Arora and all,
> > >
> > > this is not a regression report as our bot normally does. this report is just
> > > FYI that we observe a WARNING with this config, in case it could supply any
> > > useful information and/or somebody wants to have a look.
> > >
> > > by this change, the config has below diff with parent:
> > >
> > > ==================== PARENT FIRST_BAD KCONFIGS f001b7165def8f7af6ce95d08f0e1bbc2442654d ====================
> > > --- /pkg/linux/i386-randconfig-r121-20250212/gcc-12/f001b7165def8f7af6ce95d08f0e1bbc2442654d/.config 2025-02-13 07:56:33.420457682 +0800
> > > +++ /pkg/linux/i386-randconfig-r121-20250212/gcc-12/c9b55f9da0d2c72c8c8d8cd5df84af5251b74283/.config 2025-02-13 08:43:08.186415593 +0800
> > > @@ -147,7 +147,6 @@ CONFIG_BSD_PROCESS_ACCT=y
> > > # RCU Subsystem
> > > #
> > > CONFIG_TREE_RCU=y
> > > -CONFIG_PREEMPT_RCU=y
> > > CONFIG_RCU_EXPERT=y
> > > CONFIG_TREE_SRCU=y
> > > CONFIG_TASKS_RCU_GENERIC=y
> > > @@ -162,7 +161,6 @@ CONFIG_RCU_STALL_COMMON=y
> > > CONFIG_RCU_NEED_SEGCBLIST=y
> > > CONFIG_RCU_FANOUT=32
> > > CONFIG_RCU_FANOUT_LEAF=16
> > > -# CONFIG_RCU_BOOST is not set
> > > # CONFIG_RCU_NOCB_CPU is not set
> > > # CONFIG_TASKS_TRACE_RCU_READ_MB is not set
> > > # CONFIG_RCU_DOUBLE_CHECK_CB_TIME is not set
> > >
> > >
> > > below is full report.
> > >
> > >
> > > Hello,
> > >
> > > kernel test robot noticed "WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]" on:
> > >
> > > commit: c9b55f9da0d2c72c8c8d8cd5df84af5251b74283 ("rcu: limit PREEMPT_RCU configurations")
> > > https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git master
> > >
> > > [test failed on linux-next/master c674aa7c289e51659e40dda0f954886ef7f80042]
> > >
> > > in testcase: rcutorture
> > > version:
> > > with following parameters:
> > >
> > > runtime: 300s
> > > test: cpuhotplug
> > > torture_type: rcu
> > >
> > >
> > >
> > > config: i386-randconfig-r121-20250212
> > > 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)
> > >
> > >
> > > +-----------------------------------------------------------------------------+------------+------------+
> > > | | f001b7165d | c9b55f9da0 |
> > > +-----------------------------------------------------------------------------+------------+------------+
> > > | WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture] | 0 | 12 |
> > > | EIP:rcutorture_one_extend_check | 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 <oliver.sang@intel.com>
> > > | Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
> > >
> > >
> > > The kernel config and materials to reproduce are available at:
> > > https://download.01.org/0day-ci/archive/20250217/202502171415.8ec87c87-lkp@intel.com
> > >
> > >
> > > [ 109.553253][ T781] rcu-torture: rcu_torture_reader task started
> > > [ 109.553258][ T781] ------------[ cut here ]------------
> > > [ 109.553259][ T781] rcutorture_one_extend_check during change: Current 0x4 To add 0x4 To remove 0x0 preempt_count() 0x1
> > > [ 109.553292][ T781] WARNING: CPU: 1 PID: 781 at kernel/rcu/rcutorture.c:1905 rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > > [ 109.553302][ T781] Modules linked in: rcutorture(+) torture
> > > [ 109.553307][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
> > > [ 109.553310][ T781] Tainted: [T]=RANDSTRUCT
> > > [ 109.553311][ T781] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
> > > [ 109.553312][ T781] EIP: rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > > [ 109.553318][ T781] Code: 75 2d c6 05 fd 04 1c f1 01 64 a1 84 77 7c 97 25 ff ff ff 7f 50 ff 75 08 57 53 56 68 60 9f 1c f1 68 a4 74 1c f1 e8 8d d3 ca a3 <0f> 0b 83 c4 1c 8d 65 f4 5b 5e 5f 5d c3 55 31 d2 83 f8 1f 89 e5 53
> > > [ 109.553320][ T781] EAX: 00000066 EBX: 00000004 ECX: 00000027 EDX: e89c1a00
> > > [ 109.553322][ T781] ESI: f11c92d9 EDI: 00000004 EBP: 825d1d88 ESP: 825d1d54
> > > [ 109.553323][ T781] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 EFLAGS: 00010282
> > > [ 109.553327][ T781] CR0: 80050033 CR2: 77235000 CR3: 010c5000 CR4: 00040690
> > > [ 109.553328][ T781] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> > > [ 109.553330][ T781] DR6: fffe0ff0 DR7: 00000400
> > > [ 109.553331][ T781] Call Trace:
> > > [ 109.553333][ T781] ? show_regs+0x4c/0x52
> > > [ 109.553343][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > > [ 109.553349][ T781] ? __warn+0x9e/0x15f
> > > [ 109.553354][ T781] ? report_bug+0xe8/0x14a
> > > [ 109.553357][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > > [ 109.553364][ T781] ? exc_overflow+0x37/0x37
> > > [ 109.553367][ T781] ? handle_bug+0x3a/0x55
> > > [ 109.553369][ T781] ? exc_invalid_op+0x1a/0x56
> > > [ 109.553372][ T781] ? handle_exception+0x148/0x148
> > > [ 109.553376][ T781] ? osq_wait_next+0x18/0x41
> > > [ 109.553379][ T781] ? exc_overflow+0x37/0x37
> > > [ 109.553381][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > > [ 109.553388][ T781] ? exc_overflow+0x37/0x37
> > > [ 109.553390][ T781] ? rcutorture_one_extend_check+0x25a/0x267 [rcutorture]
> > > [ 109.553399][ T781] rcutorture_one_extend+0x18c/0x3c1 [rcutorture]
> > > [ 109.553410][ T781] rcu_torture_one_read+0x95/0x4d2 [rcutorture]
> > > [ 109.553417][ T781] ? validate_chain+0x3d/0x24c
> > > [ 109.553420][ T781] ? mark_lock+0x6a/0x14d
> > > [ 109.553440][ T781] rcu_torture_reader+0xc4/0xdbd [rcutorture]
> > > [ 109.553448][ T781] ? rcu_torture_one_read+0x4d2/0x4d2 [rcutorture]
> > > [ 109.553457][ T781] kthread+0x169/0x16e
> > > [ 109.553459][ T781] ? rcu_torture_read_exit_child+0x3a/0x3a [rcutorture]
> > > [ 109.553466][ T781] ? kthread_is_per_cpu+0x17/0x17
> > > [ 109.553468][ T781] ret_from_fork+0x19/0x2c
> > > [ 109.553471][ T781] ? kthread_is_per_cpu+0x17/0x17
> > > [ 109.553472][ T781] ret_from_fork_asm+0x12/0x20
> > > [ 109.553475][ T781] entry_INT80_32+0x108/0x108
> > > [ 109.553481][ T781] irq event stamp: 307
> > > [ 109.553482][ T781] hardirqs last enabled at (313): [<94ebb6cb>] console_trylock_spinning+0x6b/0x10a
> > > [ 109.553485][ T781] hardirqs last disabled at (318): [<94ebb691>] console_trylock_spinning+0x31/0x10a
> > > [ 109.553486][ T781] softirqs last enabled at (0): [<94e613c4>] copy_process+0x945/0x1a7d
> > > [ 109.553489][ T781] softirqs last disabled at (0): [<00000000>] 0x0
> > > [ 109.553491][ T781] ---[ end trace 0000000000000000 ]---
> > > [ 109.553494][ T781] ------------[ cut here ]------------
> > > [ 109.553496][ T781] rcutorture_one_extend_check after change: Current 0x60 To add 0x60 To remove 0x4 preempt_count() 0x2
> > > [ 109.553510][ T781] WARNING: CPU: 1 PID: 781 at kernel/rcu/rcutorture.c:1902 rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > > [ 109.553517][ T781] Modules linked in: rcutorture(+) torture
> > > [ 109.553520][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G W T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
> > > [ 109.553523][ T781] Tainted: [W]=WARN, [T]=RANDSTRUCT
> > > [ 109.553524][ T781] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
> > > [ 109.553525][ T781] EIP: rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > > [ 109.553530][ T781] Code: 3d fe 04 1c f1 00 75 27 25 ff ff ff 7f c6 05 fe 04 1c f1 01 50 ff 75 08 57 53 56 68 60 9f 1c f1 68 a4 74 1c f1 e8 da d3 ca a3 <0f> 0b 83 c4 1c a1 40 09 1c f1 8b 40 1c 85 c0 74 41 f6 c3 60 75 3c
> > > [ 109.553532][ T781] EAX: 00000067 EBX: 00000060 ECX: 00000027 EDX: e89c1a00
> > > [ 109.553533][ T781] ESI: f11c936d EDI: 00000060 EBP: 825d1d88 ESP: 825d1d54
> > > [ 109.553535][ T781] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 EFLAGS: 00010282
> > > [ 109.553537][ T781] CR0: 80050033 CR2: 77235000 CR3: 010c5000 CR4: 00040690
> > > [ 109.553539][ T781] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> > > [ 109.553540][ T781] DR6: fffe0ff0 DR7: 00000400
> > > [ 109.553541][ T781] Call Trace:
> > > [ 109.553543][ T781] ? show_regs+0x4c/0x52
> > > [ 109.553545][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > > [ 109.553551][ T781] ? __warn+0x9e/0x15f
> > > [ 109.553555][ T781] ? report_bug+0xe8/0x14a
> > > [ 109.553558][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > > [ 109.553565][ T781] ? exc_overflow+0x37/0x37
> > > [ 109.553567][ T781] ? handle_bug+0x3a/0x55
> > > [ 109.553569][ T781] ? exc_invalid_op+0x1a/0x56
> > > [ 109.553572][ T781] ? handle_exception+0x148/0x148
> > > [ 109.553575][ T781] ? osq_wait_next+0x18/0x41
> > > [ 109.553578][ T781] ? exc_overflow+0x37/0x37
> > > [ 109.553580][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > > [ 109.553587][ T781] ? exc_overflow+0x37/0x37
> > > [ 109.553589][ T781] ? rcutorture_one_extend_check+0x20d/0x267 [rcutorture]
> > > [ 109.553599][ T781] rcutorture_one_extend+0x3b7/0x3c1 [rcutorture]
> > > [ 109.553610][ T781] rcu_torture_one_read+0x21b/0x4d2 [rcutorture]
> > > [ 109.553638][ T781] rcu_torture_reader+0xc4/0xdbd [rcutorture]
> > > [ 109.553646][ T781] ? rcu_torture_one_read+0x4d2/0x4d2 [rcutorture]
> > > [ 109.553655][ T781] kthread+0x169/0x16e
> > > [ 109.553658][ T781] ? rcu_torture_read_exit_child+0x3a/0x3a [rcutorture]
> > > [ 109.553664][ T781] ? kthread_is_per_cpu+0x17/0x17
> > > [ 109.553667][ T781] ret_from_fork+0x19/0x2c
> > > [ 109.553669][ T781] ? kthread_is_per_cpu+0x17/0x17
> > > [ 109.553671][ T781] ret_from_fork_asm+0x12/0x20
> > > [ 109.553673][ T781] entry_INT80_32+0x108/0x108
> > > [ 109.553679][ T781] irq event stamp: 607
> > > [ 109.553680][ T781] hardirqs last enabled at (613): [<94ebb6cb>] console_trylock_spinning+0x6b/0x10a
> > > [ 109.553682][ T781] hardirqs last disabled at (618): [<94ebb691>] console_trylock_spinning+0x31/0x10a
> > > [ 109.553684][ T781] softirqs last enabled at (0): [<94e613c4>] copy_process+0x945/0x1a7d
> > > [ 109.553686][ T781] softirqs last disabled at (0): [<00000000>] 0x0
> > > [ 109.553688][ T781] ---[ end trace 0000000000000000 ]---
> > > [ 109.634034][ T769] rcu-torture: Creating torture_shuffle task
> > > [ 109.635952][ T782] rcu-torture: rcu_torture_stats task started
> > > [ 109.637994][ T769] rcu-torture: Creating torture_stutter task
> >
> > And rcutorture's WARN_ON() has a bug that is exposed by that change
> > in Kconfig option. Does the patch shown below help?
>
> the patch does not fix the WARNING in our tests. attached one dmesg FYI.
Just to make sure that I understand, this patch was applied against this
commit, correct?
c9b55f9da0d2 ("rcu: limit PREEMPT_RCU configurations")
I am guessing this based on this dmesg line:
[ 109.553307][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
Is this really the case, or am I confused?
Thanx, Paul
> > Either way, thank you for your testing efforts!
> >
> > Thanx, Paul
> >
> > ------------------------------------------------------------------------
> >
> > commit bb638fe1a683316397d5517cb7d1797d70d21c86
> > Author: Paul E. McKenney <paulmck@kernel.org>
> > Date: Wed Feb 19 08:41:11 2025 -0800
> >
> > rcutorture: Update rcutorture_one_extend_check() for lazy preemption
> >
> > The rcutorture_one_extend_check() function's last check assumes that
> > if cur_ops->readlock_nesting() returns greater than zero, either the
> > RCUTORTURE_RDR_RCU_1 or the RCUTORTURE_RDR_RCU_2 bit must be set, that
> > is, there must be at least one rcu_read_lock() in effect.
> >
> > This works for preemptible RCU and for non-preemptible RCU running in
> > a non-preemptible kernel. But it fails for non-preemptible RCU running
> > in a preemptible kernel because then RCU's cur_ops->readlock_nesting()
> > function, which is rcu_torture_readlock_nesting(), will return
> > the PREEMPT_MASK mask bits from preempt_count(). The result will
> > be greater than zero if preemption is disabled, including by the
> > RCUTORTURE_RDR_PREEMPT and RCUTORTURE_RDR_SCHED bits.
> >
> > This commit therefore adjusts this check to take into account the case
> > fo non-preemptible RCU running in a preemptible kernel.
> >
> > Reported-by: kernel test robot <oliver.sang@intel.com>
> > Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
> > Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
> > Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> > Co-developed-by: Joel Fernandes <joelagnelf@nvidia.com>
> > Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
> > Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
> >
> > diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> > index 895a27545ae1e..0f446ff04eda1 100644
> > --- a/kernel/rcu/rcutorture.c
> > +++ b/kernel/rcu/rcutorture.c
> > @@ -1981,6 +1981,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
> > #define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
> > static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
> > {
> > + int mask;
> > +
> > if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
> > return;
> >
> > @@ -2010,8 +2012,10 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> > WARN_ONCE(cur_ops->extendables &&
> > !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> > (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
> > - WARN_ONCE(cur_ops->readlock_nesting &&
> > - !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
> > + mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> > + if (IS_ENABLED(CONFIG_PREEMPT_RCU))
> > + mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> > + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
> > cur_ops->readlock_nesting() > 0, ROEC_ARGS);
> > }
> >
> >
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [linux-next:master] [rcu] c9b55f9da0: WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]
2025-02-22 1:02 ` Paul E. McKenney
@ 2025-02-24 2:22 ` Oliver Sang
2025-02-24 3:21 ` Boqun Feng
0 siblings, 1 reply; 16+ messages in thread
From: Oliver Sang @ 2025-02-24 2:22 UTC (permalink / raw)
To: Paul E. McKenney
Cc: Ankur Arora, oe-lkp, lkp, Boqun Feng, Peter Zijlstra,
Frederic Weisbecker, rcu
[-- Attachment #1: Type: text/plain, Size: 6482 bytes --]
hi, Paul,
On Fri, Feb 21, 2025 at 05:02:51PM -0800, Paul E. McKenney wrote:
[...]
> > >
> > > And rcutorture's WARN_ON() has a bug that is exposed by that change
> > > in Kconfig option. Does the patch shown below help?
> >
> > the patch does not fix the WARNING in our tests. attached one dmesg FYI.
>
> Just to make sure that I understand, this patch was applied against this
> commit, correct?
>
> c9b55f9da0d2 ("rcu: limit PREEMPT_RCU configurations")
>
> I am guessing this based on this dmesg line:
>
> [ 109.553307][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
above line is not from the dmesg I attached in last mail. it's from
https://download.01.org/0day-ci/archive/20250217/202502171415.8ec87c87-lkp@intel.com/dmesg.xz
which is for our original report.
>
> Is this really the case, or am I confused?
we applied your patch as:
89519085afdf2 fix for c9b55f9da0 from Paul
c9b55f9da0d2c rcu: limit PREEMPT_RCU configurations
f001b7165def8 osnoise: provide quiescent states
so in the dmesg I attached in last mail (I attached it again in this mail):
[ 0.000000][ T0] Linux version 6.14.0-rc1-00008-g89519085afdf (kbuild@9871be4fdbcc) (gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Fri Feb 21 00:34:02 CST 2025
...
[ 117.463907][ T812] CPU: 1 UID: 0 PID: 812 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00008-g89519085afdf #1
the change of this 89519085afdf2 is as [1]
I'm not sure if it's better to upload dmesg for fix patch to
https://download.01.org/0day-ci/archive/20250217/202502171415.8ec87c87-lkp@intel.com
again, so I did not do that. sorry if this causes confusion.
not sure if this is the correct applyment? thanks
[1]
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index d26fb1d33ed9a..de85a88810cf6 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -1873,6 +1873,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
#define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
{
+ int mask;
+
if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
return;
@@ -1902,8 +1904,10 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
WARN_ONCE(cur_ops->extendables &&
!(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
(preempt_count() & PREEMPT_MASK), ROEC_ARGS);
- WARN_ONCE(cur_ops->readlock_nesting &&
- !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
+ mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
+ if (IS_ENABLED(CONFIG_PREEMPT_RCU))
+ mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
+ WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
cur_ops->readlock_nesting() > 0, ROEC_ARGS);
}
>
> Thanx, Paul
>
> > > Either way, thank you for your testing efforts!
> > >
> > > Thanx, Paul
> > >
> > > ------------------------------------------------------------------------
> > >
> > > commit bb638fe1a683316397d5517cb7d1797d70d21c86
> > > Author: Paul E. McKenney <paulmck@kernel.org>
> > > Date: Wed Feb 19 08:41:11 2025 -0800
> > >
> > > rcutorture: Update rcutorture_one_extend_check() for lazy preemption
> > >
> > > The rcutorture_one_extend_check() function's last check assumes that
> > > if cur_ops->readlock_nesting() returns greater than zero, either the
> > > RCUTORTURE_RDR_RCU_1 or the RCUTORTURE_RDR_RCU_2 bit must be set, that
> > > is, there must be at least one rcu_read_lock() in effect.
> > >
> > > This works for preemptible RCU and for non-preemptible RCU running in
> > > a non-preemptible kernel. But it fails for non-preemptible RCU running
> > > in a preemptible kernel because then RCU's cur_ops->readlock_nesting()
> > > function, which is rcu_torture_readlock_nesting(), will return
> > > the PREEMPT_MASK mask bits from preempt_count(). The result will
> > > be greater than zero if preemption is disabled, including by the
> > > RCUTORTURE_RDR_PREEMPT and RCUTORTURE_RDR_SCHED bits.
> > >
> > > This commit therefore adjusts this check to take into account the case
> > > fo non-preemptible RCU running in a preemptible kernel.
> > >
> > > Reported-by: kernel test robot <oliver.sang@intel.com>
> > > Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
> > > Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
> > > Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> > > Co-developed-by: Joel Fernandes <joelagnelf@nvidia.com>
> > > Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
> > > Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
> > >
> > > diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> > > index 895a27545ae1e..0f446ff04eda1 100644
> > > --- a/kernel/rcu/rcutorture.c
> > > +++ b/kernel/rcu/rcutorture.c
> > > @@ -1981,6 +1981,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
> > > #define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
> > > static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
> > > {
> > > + int mask;
> > > +
> > > if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
> > > return;
> > >
> > > @@ -2010,8 +2012,10 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> > > WARN_ONCE(cur_ops->extendables &&
> > > !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> > > (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
> > > - WARN_ONCE(cur_ops->readlock_nesting &&
> > > - !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
> > > + mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> > > + if (IS_ENABLED(CONFIG_PREEMPT_RCU))
> > > + mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> > > + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
> > > cur_ops->readlock_nesting() > 0, ROEC_ARGS);
> > > }
> > >
> > >
>
>
[-- Attachment #2: dmesg.xz --]
[-- Type: application/x-xz, Size: 74464 bytes --]
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [linux-next:master] [rcu] c9b55f9da0: WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]
2025-02-24 2:22 ` Oliver Sang
@ 2025-02-24 3:21 ` Boqun Feng
2025-02-24 4:40 ` Boqun Feng
0 siblings, 1 reply; 16+ messages in thread
From: Boqun Feng @ 2025-02-24 3:21 UTC (permalink / raw)
To: Oliver Sang
Cc: Paul E. McKenney, Ankur Arora, oe-lkp, lkp, Peter Zijlstra,
Frederic Weisbecker, rcu
I finally find why I cannot reproduce this, I accidentally used
next.2025.02.10a to build the kernel first, which has commit
("rcutorture: Move RCU_TORTURE_TEST_{CHK_RDR_STATE,LOG_CPU} to bool"),
which changes Kconfig RCU_TORTURE_TEST_CHK_DRD_STATE into a bool and
that disabled the test... (because config from you has it as =m).
On Mon, Feb 24, 2025 at 10:22:02AM +0800, Oliver Sang wrote:
> hi, Paul,
>
> On Fri, Feb 21, 2025 at 05:02:51PM -0800, Paul E. McKenney wrote:
>
> [...]
>
> > > >
> > > > And rcutorture's WARN_ON() has a bug that is exposed by that change
> > > > in Kconfig option. Does the patch shown below help?
> > >
> > > the patch does not fix the WARNING in our tests. attached one dmesg FYI.
> >
> > Just to make sure that I understand, this patch was applied against this
> > commit, correct?
> >
> > c9b55f9da0d2 ("rcu: limit PREEMPT_RCU configurations")
> >
> > I am guessing this based on this dmesg line:
> >
> > [ 109.553307][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
>
> above line is not from the dmesg I attached in last mail. it's from
> https://download.01.org/0day-ci/archive/20250217/202502171415.8ec87c87-lkp@intel.com/dmesg.xz
> which is for our original report.
>
> >
> > Is this really the case, or am I confused?
>
> we applied your patch as:
>
> 89519085afdf2 fix for c9b55f9da0 from Paul
> c9b55f9da0d2c rcu: limit PREEMPT_RCU configurations
> f001b7165def8 osnoise: provide quiescent states
>
> so in the dmesg I attached in last mail (I attached it again in this mail):
>
> [ 0.000000][ T0] Linux version 6.14.0-rc1-00008-g89519085afdf (kbuild@9871be4fdbcc) (gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Fri Feb 21 00:34:02 CST 2025
> ...
> [ 117.463907][ T812] CPU: 1 UID: 0 PID: 812 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00008-g89519085afdf #1
>
> the change of this 89519085afdf2 is as [1]
>
> I'm not sure if it's better to upload dmesg for fix patch to
> https://download.01.org/0day-ci/archive/20250217/202502171415.8ec87c87-lkp@intel.com
> again, so I did not do that. sorry if this causes confusion.
>
> not sure if this is the correct applyment? thanks
>
> [1]
> diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> index d26fb1d33ed9a..de85a88810cf6 100644
> --- a/kernel/rcu/rcutorture.c
> +++ b/kernel/rcu/rcutorture.c
> @@ -1873,6 +1873,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
> #define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
> static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
> {
> + int mask;
> +
> if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
> return;
>
> @@ -1902,8 +1904,10 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> WARN_ONCE(cur_ops->extendables &&
> !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
> - WARN_ONCE(cur_ops->readlock_nesting &&
> - !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
> + mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> + if (IS_ENABLED(CONFIG_PREEMPT_RCU))
Now look into this, I think this should be:
if (!IS_ENABLED(CONFIG_PREEMPT_RCU))
because:
* For preemptible RCU, ->readlock_nesting() will return
rcu_preempt_depth()
* For non-preemptible RCU, ->readlock_nesting() will return
preempt count.
, which means if RCUTORTURE_RDR_PREEMPT or RCUTORTURE_RDR_SCHED is in
the curstate for *non-preemption RCU*, ->readlock_nesting() will be >0.
That is, the "mask" needs to consider _PREEMPT and _SCHED for
*non-preemption RCU*, not preemptible RCU.
Paul? Did I get it right?
Regards,
Boqun
> + mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
> cur_ops->readlock_nesting() > 0, ROEC_ARGS);
> }
>
>
>
> >
> > Thanx, Paul
> >
> > > > Either way, thank you for your testing efforts!
> > > >
> > > > Thanx, Paul
> > > >
> > > > ------------------------------------------------------------------------
> > > >
> > > > commit bb638fe1a683316397d5517cb7d1797d70d21c86
> > > > Author: Paul E. McKenney <paulmck@kernel.org>
> > > > Date: Wed Feb 19 08:41:11 2025 -0800
> > > >
> > > > rcutorture: Update rcutorture_one_extend_check() for lazy preemption
> > > >
> > > > The rcutorture_one_extend_check() function's last check assumes that
> > > > if cur_ops->readlock_nesting() returns greater than zero, either the
> > > > RCUTORTURE_RDR_RCU_1 or the RCUTORTURE_RDR_RCU_2 bit must be set, that
> > > > is, there must be at least one rcu_read_lock() in effect.
> > > >
> > > > This works for preemptible RCU and for non-preemptible RCU running in
> > > > a non-preemptible kernel. But it fails for non-preemptible RCU running
> > > > in a preemptible kernel because then RCU's cur_ops->readlock_nesting()
> > > > function, which is rcu_torture_readlock_nesting(), will return
> > > > the PREEMPT_MASK mask bits from preempt_count(). The result will
> > > > be greater than zero if preemption is disabled, including by the
> > > > RCUTORTURE_RDR_PREEMPT and RCUTORTURE_RDR_SCHED bits.
> > > >
> > > > This commit therefore adjusts this check to take into account the case
> > > > fo non-preemptible RCU running in a preemptible kernel.
> > > >
> > > > Reported-by: kernel test robot <oliver.sang@intel.com>
> > > > Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
> > > > Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
> > > > Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> > > > Co-developed-by: Joel Fernandes <joelagnelf@nvidia.com>
> > > > Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
> > > > Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
> > > >
> > > > diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> > > > index 895a27545ae1e..0f446ff04eda1 100644
> > > > --- a/kernel/rcu/rcutorture.c
> > > > +++ b/kernel/rcu/rcutorture.c
> > > > @@ -1981,6 +1981,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
> > > > #define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
> > > > static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
> > > > {
> > > > + int mask;
> > > > +
> > > > if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
> > > > return;
> > > >
> > > > @@ -2010,8 +2012,10 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> > > > WARN_ONCE(cur_ops->extendables &&
> > > > !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> > > > (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
> > > > - WARN_ONCE(cur_ops->readlock_nesting &&
> > > > - !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
> > > > + mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> > > > + if (IS_ENABLED(CONFIG_PREEMPT_RCU))
> > > > + mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> > > > + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
> > > > cur_ops->readlock_nesting() > 0, ROEC_ARGS);
> > > > }
> > > >
> > > >
> >
> >
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [linux-next:master] [rcu] c9b55f9da0: WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture]
2025-02-24 3:21 ` Boqun Feng
@ 2025-02-24 4:40 ` Boqun Feng
2025-02-24 4:43 ` [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() for lazy preemption Boqun Feng
0 siblings, 1 reply; 16+ messages in thread
From: Boqun Feng @ 2025-02-24 4:40 UTC (permalink / raw)
To: Oliver Sang
Cc: Paul E. McKenney, Ankur Arora, oe-lkp, lkp, Peter Zijlstra,
Frederic Weisbecker, rcu
On Sun, Feb 23, 2025 at 07:21:25PM -0800, Boqun Feng wrote:
> I finally find why I cannot reproduce this, I accidentally used
> next.2025.02.10a to build the kernel first, which has commit
> ("rcutorture: Move RCU_TORTURE_TEST_{CHK_RDR_STATE,LOG_CPU} to bool"),
> which changes Kconfig RCU_TORTURE_TEST_CHK_DRD_STATE into a bool and
> that disabled the test... (because config from you has it as =m).
>
> On Mon, Feb 24, 2025 at 10:22:02AM +0800, Oliver Sang wrote:
> > hi, Paul,
> >
> > On Fri, Feb 21, 2025 at 05:02:51PM -0800, Paul E. McKenney wrote:
> >
> > [...]
> >
> > > > >
> > > > > And rcutorture's WARN_ON() has a bug that is exposed by that change
> > > > > in Kconfig option. Does the patch shown below help?
> > > >
> > > > the patch does not fix the WARNING in our tests. attached one dmesg FYI.
> > >
> > > Just to make sure that I understand, this patch was applied against this
> > > commit, correct?
> > >
> > > c9b55f9da0d2 ("rcu: limit PREEMPT_RCU configurations")
> > >
> > > I am guessing this based on this dmesg line:
> > >
> > > [ 109.553307][ T781] CPU: 1 UID: 0 PID: 781 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00007-gc9b55f9da0d2 #1
> >
> > above line is not from the dmesg I attached in last mail. it's from
> > https://download.01.org/0day-ci/archive/20250217/202502171415.8ec87c87-lkp@intel.com/dmesg.xz
> > which is for our original report.
> >
> > >
> > > Is this really the case, or am I confused?
> >
> > we applied your patch as:
> >
> > 89519085afdf2 fix for c9b55f9da0 from Paul
> > c9b55f9da0d2c rcu: limit PREEMPT_RCU configurations
> > f001b7165def8 osnoise: provide quiescent states
> >
> > so in the dmesg I attached in last mail (I attached it again in this mail):
> >
> > [ 0.000000][ T0] Linux version 6.14.0-rc1-00008-g89519085afdf (kbuild@9871be4fdbcc) (gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Fri Feb 21 00:34:02 CST 2025
> > ...
> > [ 117.463907][ T812] CPU: 1 UID: 0 PID: 812 Comm: rcu_torture_rea Tainted: G T 6.14.0-rc1-00008-g89519085afdf #1
> >
> > the change of this 89519085afdf2 is as [1]
> >
> > I'm not sure if it's better to upload dmesg for fix patch to
> > https://download.01.org/0day-ci/archive/20250217/202502171415.8ec87c87-lkp@intel.com
> > again, so I did not do that. sorry if this causes confusion.
> >
> > not sure if this is the correct applyment? thanks
> >
> > [1]
> > diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> > index d26fb1d33ed9a..de85a88810cf6 100644
> > --- a/kernel/rcu/rcutorture.c
> > +++ b/kernel/rcu/rcutorture.c
> > @@ -1873,6 +1873,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
> > #define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
> > static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
> > {
> > + int mask;
> > +
> > if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
> > return;
> >
> > @@ -1902,8 +1904,10 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> > WARN_ONCE(cur_ops->extendables &&
> > !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> > (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
And we need another fix for the WARN_ONCE() above because in
non-preemptible RCU on a preemptible kernel, rcu_read_lock() is just
preempt_disable(). Sending both really quick.
Regards,
Boqun
> > - WARN_ONCE(cur_ops->readlock_nesting &&
> > - !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
> > + mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> > + if (IS_ENABLED(CONFIG_PREEMPT_RCU))
>
> Now look into this, I think this should be:
>
> if (!IS_ENABLED(CONFIG_PREEMPT_RCU))
>
> because:
>
> * For preemptible RCU, ->readlock_nesting() will return
> rcu_preempt_depth()
>
> * For non-preemptible RCU, ->readlock_nesting() will return
> preempt count.
>
> , which means if RCUTORTURE_RDR_PREEMPT or RCUTORTURE_RDR_SCHED is in
> the curstate for *non-preemption RCU*, ->readlock_nesting() will be >0.
> That is, the "mask" needs to consider _PREEMPT and _SCHED for
> *non-preemption RCU*, not preemptible RCU.
>
> Paul? Did I get it right?
>
> Regards,
> Boqun
>
> > + mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> > + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
> > cur_ops->readlock_nesting() > 0, ROEC_ARGS);
> > }
> >
[...]
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() for lazy preemption
2025-02-24 4:40 ` Boqun Feng
@ 2025-02-24 4:43 ` Boqun Feng
2025-02-24 4:43 ` [PATCH v2 2/2] rcutorture: Update ->extendables check " Boqun Feng
2025-02-24 4:58 ` [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() " Paul E. McKenney
0 siblings, 2 replies; 16+ messages in thread
From: Boqun Feng @ 2025-02-24 4:43 UTC (permalink / raw)
To: Oliver Sang
Cc: Paul E. McKenney, Ankur Arora, oe-lkp, lkp, Peter Zijlstra,
Frederic Weisbecker, rcu, Boqun Feng, Joel Fernandes
From: "Paul E. McKenney" <paulmck@kernel.org>
The rcutorture_one_extend_check() function's last check assumes that
if cur_ops->readlock_nesting() returns greater than zero, either the
RCUTORTURE_RDR_RCU_1 or the RCUTORTURE_RDR_RCU_2 bit must be set, that
is, there must be at least one rcu_read_lock() in effect.
This works for preemptible RCU and for non-preemptible RCU running in
a non-preemptible kernel. But it fails for non-preemptible RCU running
in a preemptible kernel because then RCU's cur_ops->readlock_nesting()
function, which is rcu_torture_readlock_nesting(), will return
the PREEMPT_MASK mask bits from preempt_count(). The result will
be greater than zero if preemption is disabled, including by the
RCUTORTURE_RDR_PREEMPT and RCUTORTURE_RDR_SCHED bits.
This commit therefore adjusts this check to take into account the case
fo non-preemptible RCU running in a preemptible kernel.
[boqun: Fix the if condition and add comment]
Reported-by: kernel test robot <oliver.sang@intel.com>
Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Co-developed-by: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
---
kernel/rcu/rcutorture.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index d26fb1d33ed9..280bff706017 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -1873,6 +1873,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
#define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
{
+ int mask;
+
if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
return;
@@ -1902,8 +1904,16 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
WARN_ONCE(cur_ops->extendables &&
!(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
(preempt_count() & PREEMPT_MASK), ROEC_ARGS);
- WARN_ONCE(cur_ops->readlock_nesting &&
- !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
+
+ /*
+ * non-preemptible RCU in a preemptible kernel uses "preempt_count() &
+ * PREEMPT_MASK" as ->readlock_nesting().
+ */
+ mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
+ if (!IS_ENABLED(CONFIG_PREEMPT_RCU))
+ mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
+
+ WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
cur_ops->readlock_nesting() > 0, ROEC_ARGS);
}
--
2.39.5 (Apple Git-154)
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 2/2] rcutorture: Update ->extendables check for lazy preemption
2025-02-24 4:43 ` [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() for lazy preemption Boqun Feng
@ 2025-02-24 4:43 ` Boqun Feng
2025-02-24 4:49 ` Boqun Feng
2025-02-24 17:07 ` Paul E. McKenney
2025-02-24 4:58 ` [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() " Paul E. McKenney
1 sibling, 2 replies; 16+ messages in thread
From: Boqun Feng @ 2025-02-24 4:43 UTC (permalink / raw)
To: Oliver Sang
Cc: Paul E. McKenney, Ankur Arora, oe-lkp, lkp, Peter Zijlstra,
Frederic Weisbecker, rcu, Boqun Feng
The rcutorture_one_extend_check() function's second last check assumes
that "preempt_count() & PREEMPT_MASK" is non-zero only if
RCUTORTURE_RDR_PREEMPT or RCUTORTURE_RDR_SCHED bit is set.
This works for preemptible RCU and for non-preemptible RCU running in
a non-preemptible kernel. But it fails for non-preemptible RCU running
in a preemptible kernel because then rcu_read_lock() is just
preempt_disable(), which increases preempt count.
This commit therefore adjusts this check to take into account the case
fo non-preemptible RCU running in a preemptible kernel.
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
---
kernel/rcu/rcutorture.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index 280bff706017..4cae119dece8 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -1901,8 +1901,16 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
WARN_ONCE(cur_ops->extendables &&
!(curstate & (RCUTORTURE_RDR_BH | RCUTORTURE_RDR_RBH)) &&
(preempt_count() & SOFTIRQ_MASK), ROEC_ARGS);
- WARN_ONCE(cur_ops->extendables &&
- !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
+
+ /*
+ * non-preemptible RCU in a preemptible kernel uses preempt_disable()
+ * as rcu_read_lock().
+ */
+ mask = RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
+ if (!IS_ENABLED(CONFIG_PREEMPT_RCU))
+ mask |= RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
+
+ WARN_ONCE(cur_ops->extendables && !(curstate & mask) &&
(preempt_count() & PREEMPT_MASK), ROEC_ARGS);
/*
--
2.39.5 (Apple Git-154)
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/2] rcutorture: Update ->extendables check for lazy preemption
2025-02-24 4:43 ` [PATCH v2 2/2] rcutorture: Update ->extendables check " Boqun Feng
@ 2025-02-24 4:49 ` Boqun Feng
2025-02-24 17:07 ` Paul E. McKenney
1 sibling, 0 replies; 16+ messages in thread
From: Boqun Feng @ 2025-02-24 4:49 UTC (permalink / raw)
To: Oliver Sang
Cc: Paul E. McKenney, Ankur Arora, oe-lkp, lkp, Peter Zijlstra,
Frederic Weisbecker, rcu, Joel Fernandes
[Cc Joel]
On Sun, Feb 23, 2025 at 08:43:10PM -0800, Boqun Feng wrote:
> The rcutorture_one_extend_check() function's second last check assumes
> that "preempt_count() & PREEMPT_MASK" is non-zero only if
> RCUTORTURE_RDR_PREEMPT or RCUTORTURE_RDR_SCHED bit is set.
>
> This works for preemptible RCU and for non-preemptible RCU running in
> a non-preemptible kernel. But it fails for non-preemptible RCU running
> in a preemptible kernel because then rcu_read_lock() is just
> preempt_disable(), which increases preempt count.
>
> This commit therefore adjusts this check to take into account the case
> fo non-preemptible RCU running in a preemptible kernel.
>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> ---
> kernel/rcu/rcutorture.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> index 280bff706017..4cae119dece8 100644
> --- a/kernel/rcu/rcutorture.c
> +++ b/kernel/rcu/rcutorture.c
> @@ -1901,8 +1901,16 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> WARN_ONCE(cur_ops->extendables &&
> !(curstate & (RCUTORTURE_RDR_BH | RCUTORTURE_RDR_RBH)) &&
> (preempt_count() & SOFTIRQ_MASK), ROEC_ARGS);
> - WARN_ONCE(cur_ops->extendables &&
> - !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> +
> + /*
> + * non-preemptible RCU in a preemptible kernel uses preempt_disable()
> + * as rcu_read_lock().
> + */
> + mask = RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> + if (!IS_ENABLED(CONFIG_PREEMPT_RCU))
> + mask |= RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> +
> + WARN_ONCE(cur_ops->extendables && !(curstate & mask) &&
> (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
>
> /*
> --
> 2.39.5 (Apple Git-154)
>
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() for lazy preemption
2025-02-24 4:43 ` [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() for lazy preemption Boqun Feng
2025-02-24 4:43 ` [PATCH v2 2/2] rcutorture: Update ->extendables check " Boqun Feng
@ 2025-02-24 4:58 ` Paul E. McKenney
2025-02-25 2:43 ` Oliver Sang
1 sibling, 1 reply; 16+ messages in thread
From: Paul E. McKenney @ 2025-02-24 4:58 UTC (permalink / raw)
To: Boqun Feng
Cc: Oliver Sang, Ankur Arora, oe-lkp, lkp, Peter Zijlstra,
Frederic Weisbecker, rcu, Joel Fernandes
On Sun, Feb 23, 2025 at 08:43:09PM -0800, Boqun Feng wrote:
> From: "Paul E. McKenney" <paulmck@kernel.org>
>
> The rcutorture_one_extend_check() function's last check assumes that
> if cur_ops->readlock_nesting() returns greater than zero, either the
> RCUTORTURE_RDR_RCU_1 or the RCUTORTURE_RDR_RCU_2 bit must be set, that
> is, there must be at least one rcu_read_lock() in effect.
>
> This works for preemptible RCU and for non-preemptible RCU running in
> a non-preemptible kernel. But it fails for non-preemptible RCU running
> in a preemptible kernel because then RCU's cur_ops->readlock_nesting()
> function, which is rcu_torture_readlock_nesting(), will return
> the PREEMPT_MASK mask bits from preempt_count(). The result will
> be greater than zero if preemption is disabled, including by the
> RCUTORTURE_RDR_PREEMPT and RCUTORTURE_RDR_SCHED bits.
>
> This commit therefore adjusts this check to take into account the case
> fo non-preemptible RCU running in a preemptible kernel.
>
> [boqun: Fix the if condition and add comment]
>
> Reported-by: kernel test robot <oliver.sang@intel.com>
> Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
> Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> Co-developed-by: Joel Fernandes <joelagnelf@nvidia.com>
> Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> ---
> kernel/rcu/rcutorture.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> index d26fb1d33ed9..280bff706017 100644
> --- a/kernel/rcu/rcutorture.c
> +++ b/kernel/rcu/rcutorture.c
> @@ -1873,6 +1873,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
> #define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
> static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
> {
> + int mask;
> +
> if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
> return;
>
> @@ -1902,8 +1904,16 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> WARN_ONCE(cur_ops->extendables &&
> !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
> - WARN_ONCE(cur_ops->readlock_nesting &&
> - !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
> +
> + /*
> + * non-preemptible RCU in a preemptible kernel uses "preempt_count() &
> + * PREEMPT_MASK" as ->readlock_nesting().
> + */
> + mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> + if (!IS_ENABLED(CONFIG_PREEMPT_RCU))
Good catch, thank you, and it looks good to me!
Oliver, you are right, I was looking at the wrong console output.
One of those days, I guess... :-/
Thanx, Paul
> + mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> +
> + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
> cur_ops->readlock_nesting() > 0, ROEC_ARGS);
> }
>
> --
> 2.39.5 (Apple Git-154)
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/2] rcutorture: Update ->extendables check for lazy preemption
2025-02-24 4:43 ` [PATCH v2 2/2] rcutorture: Update ->extendables check " Boqun Feng
2025-02-24 4:49 ` Boqun Feng
@ 2025-02-24 17:07 ` Paul E. McKenney
1 sibling, 0 replies; 16+ messages in thread
From: Paul E. McKenney @ 2025-02-24 17:07 UTC (permalink / raw)
To: Boqun Feng
Cc: Oliver Sang, Ankur Arora, oe-lkp, lkp, Peter Zijlstra,
Frederic Weisbecker, rcu
On Sun, Feb 23, 2025 at 08:43:10PM -0800, Boqun Feng wrote:
> The rcutorture_one_extend_check() function's second last check assumes
> that "preempt_count() & PREEMPT_MASK" is non-zero only if
> RCUTORTURE_RDR_PREEMPT or RCUTORTURE_RDR_SCHED bit is set.
>
> This works for preemptible RCU and for non-preemptible RCU running in
> a non-preemptible kernel. But it fails for non-preemptible RCU running
> in a preemptible kernel because then rcu_read_lock() is just
> preempt_disable(), which increases preempt count.
>
> This commit therefore adjusts this check to take into account the case
> fo non-preemptible RCU running in a preemptible kernel.
>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
> ---
> kernel/rcu/rcutorture.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> index 280bff706017..4cae119dece8 100644
> --- a/kernel/rcu/rcutorture.c
> +++ b/kernel/rcu/rcutorture.c
> @@ -1901,8 +1901,16 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> WARN_ONCE(cur_ops->extendables &&
> !(curstate & (RCUTORTURE_RDR_BH | RCUTORTURE_RDR_RBH)) &&
> (preempt_count() & SOFTIRQ_MASK), ROEC_ARGS);
> - WARN_ONCE(cur_ops->extendables &&
> - !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> +
> + /*
> + * non-preemptible RCU in a preemptible kernel uses preempt_disable()
> + * as rcu_read_lock().
> + */
> + mask = RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> + if (!IS_ENABLED(CONFIG_PREEMPT_RCU))
> + mask |= RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> +
> + WARN_ONCE(cur_ops->extendables && !(curstate & mask) &&
> (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
>
> /*
> --
> 2.39.5 (Apple Git-154)
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() for lazy preemption
2025-02-24 4:58 ` [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() " Paul E. McKenney
@ 2025-02-25 2:43 ` Oliver Sang
2025-02-25 3:37 ` Boqun Feng
0 siblings, 1 reply; 16+ messages in thread
From: Oliver Sang @ 2025-02-25 2:43 UTC (permalink / raw)
To: Paul E. McKenney
Cc: Boqun Feng, Ankur Arora, oe-lkp, lkp, Peter Zijlstra,
Frederic Weisbecker, rcu, Joel Fernandes, oliver.sang
hi, Paul, hi, Boqun Feng,
On Sun, Feb 23, 2025 at 08:58:16PM -0800, Paul E. McKenney wrote:
> On Sun, Feb 23, 2025 at 08:43:09PM -0800, Boqun Feng wrote:
> > From: "Paul E. McKenney" <paulmck@kernel.org>
> >
> > The rcutorture_one_extend_check() function's last check assumes that
> > if cur_ops->readlock_nesting() returns greater than zero, either the
> > RCUTORTURE_RDR_RCU_1 or the RCUTORTURE_RDR_RCU_2 bit must be set, that
> > is, there must be at least one rcu_read_lock() in effect.
> >
> > This works for preemptible RCU and for non-preemptible RCU running in
> > a non-preemptible kernel. But it fails for non-preemptible RCU running
> > in a preemptible kernel because then RCU's cur_ops->readlock_nesting()
> > function, which is rcu_torture_readlock_nesting(), will return
> > the PREEMPT_MASK mask bits from preempt_count(). The result will
> > be greater than zero if preemption is disabled, including by the
> > RCUTORTURE_RDR_PREEMPT and RCUTORTURE_RDR_SCHED bits.
> >
> > This commit therefore adjusts this check to take into account the case
> > fo non-preemptible RCU running in a preemptible kernel.
> >
> > [boqun: Fix the if condition and add comment]
> >
> > Reported-by: kernel test robot <oliver.sang@intel.com>
> > Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
> > Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
> > Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> > Co-developed-by: Joel Fernandes <joelagnelf@nvidia.com>
> > Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
> > Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
> > Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> > ---
> > kernel/rcu/rcutorture.c | 14 ++++++++++++--
> > 1 file changed, 12 insertions(+), 2 deletions(-)
> >
> > diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> > index d26fb1d33ed9..280bff706017 100644
> > --- a/kernel/rcu/rcutorture.c
> > +++ b/kernel/rcu/rcutorture.c
> > @@ -1873,6 +1873,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
> > #define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
> > static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
> > {
> > + int mask;
> > +
> > if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
> > return;
> >
> > @@ -1902,8 +1904,16 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> > WARN_ONCE(cur_ops->extendables &&
> > !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> > (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
> > - WARN_ONCE(cur_ops->readlock_nesting &&
> > - !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
> > +
> > + /*
> > + * non-preemptible RCU in a preemptible kernel uses "preempt_count() &
> > + * PREEMPT_MASK" as ->readlock_nesting().
> > + */
> > + mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> > + if (!IS_ENABLED(CONFIG_PREEMPT_RCU))
>
> Good catch, thank you, and it looks good to me!
>
> Oliver, you are right, I was looking at the wrong console output.
> One of those days, I guess... :-/
we tested this new patch-set, and confirmed the WARN we reported is fixed by
whole patch-set. thanks
Tested-by: kernel test robot <oliver.sang@intel.com>
just want to confirm one thing, we applied the patch-set as below:
* b9aa59295f037 rcutorture: Update ->extendables check for lazy preemption
* 5ffd825e807bd rcutorture: Update rcutorture_one_extend_check() for lazy preemption
* c9b55f9da0d2c rcu: limit PREEMPT_RCU configurations
we also made the test upon 5ffd825e807bd, which still shows the similar WARN.
is this expected?
>
> Thanx, Paul
>
> > + mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> > +
> > + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
> > cur_ops->readlock_nesting() > 0, ROEC_ARGS);
> > }
> >
> > --
> > 2.39.5 (Apple Git-154)
> >
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() for lazy preemption
2025-02-25 2:43 ` Oliver Sang
@ 2025-02-25 3:37 ` Boqun Feng
2025-02-25 6:20 ` Oliver Sang
0 siblings, 1 reply; 16+ messages in thread
From: Boqun Feng @ 2025-02-25 3:37 UTC (permalink / raw)
To: Oliver Sang
Cc: Paul E. McKenney, Ankur Arora, oe-lkp, lkp, Peter Zijlstra,
Frederic Weisbecker, rcu, Joel Fernandes
On Tue, Feb 25, 2025 at 10:43:45AM +0800, Oliver Sang wrote:
> hi, Paul, hi, Boqun Feng,
>
> On Sun, Feb 23, 2025 at 08:58:16PM -0800, Paul E. McKenney wrote:
> > On Sun, Feb 23, 2025 at 08:43:09PM -0800, Boqun Feng wrote:
> > > From: "Paul E. McKenney" <paulmck@kernel.org>
> > >
> > > The rcutorture_one_extend_check() function's last check assumes that
> > > if cur_ops->readlock_nesting() returns greater than zero, either the
> > > RCUTORTURE_RDR_RCU_1 or the RCUTORTURE_RDR_RCU_2 bit must be set, that
> > > is, there must be at least one rcu_read_lock() in effect.
> > >
> > > This works for preemptible RCU and for non-preemptible RCU running in
> > > a non-preemptible kernel. But it fails for non-preemptible RCU running
> > > in a preemptible kernel because then RCU's cur_ops->readlock_nesting()
> > > function, which is rcu_torture_readlock_nesting(), will return
> > > the PREEMPT_MASK mask bits from preempt_count(). The result will
> > > be greater than zero if preemption is disabled, including by the
> > > RCUTORTURE_RDR_PREEMPT and RCUTORTURE_RDR_SCHED bits.
> > >
> > > This commit therefore adjusts this check to take into account the case
> > > fo non-preemptible RCU running in a preemptible kernel.
> > >
> > > [boqun: Fix the if condition and add comment]
> > >
> > > Reported-by: kernel test robot <oliver.sang@intel.com>
> > > Closes: https://lore.kernel.org/oe-lkp/202502171415.8ec87c87-lkp@intel.com
> > > Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
> > > Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> > > Co-developed-by: Joel Fernandes <joelagnelf@nvidia.com>
> > > Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
> > > Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
> > > Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> > > ---
> > > kernel/rcu/rcutorture.c | 14 ++++++++++++--
> > > 1 file changed, 12 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> > > index d26fb1d33ed9..280bff706017 100644
> > > --- a/kernel/rcu/rcutorture.c
> > > +++ b/kernel/rcu/rcutorture.c
> > > @@ -1873,6 +1873,8 @@ static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
> > > #define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_count() %#x\n", __func__, s, curstate, new, old, preempt_count()
> > > static void rcutorture_one_extend_check(char *s, int curstate, int new, int old, bool insoftirq)
> > > {
> > > + int mask;
> > > +
> > > if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE))
> > > return;
> > >
> > > @@ -1902,8 +1904,16 @@ static void rcutorture_one_extend_check(char *s, int curstate, int new, int old,
> > > WARN_ONCE(cur_ops->extendables &&
> > > !(curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) &&
> > > (preempt_count() & PREEMPT_MASK), ROEC_ARGS);
> > > - WARN_ONCE(cur_ops->readlock_nesting &&
> > > - !(curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) &&
> > > +
> > > + /*
> > > + * non-preemptible RCU in a preemptible kernel uses "preempt_count() &
> > > + * PREEMPT_MASK" as ->readlock_nesting().
> > > + */
> > > + mask = RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
> > > + if (!IS_ENABLED(CONFIG_PREEMPT_RCU))
> >
> > Good catch, thank you, and it looks good to me!
> >
> > Oliver, you are right, I was looking at the wrong console output.
> > One of those days, I guess... :-/
>
>
> we tested this new patch-set, and confirmed the WARN we reported is fixed by
> whole patch-set. thanks
>
> Tested-by: kernel test robot <oliver.sang@intel.com>
>
Thanks!
>
> just want to confirm one thing, we applied the patch-set as below:
>
> * b9aa59295f037 rcutorture: Update ->extendables check for lazy preemption
> * 5ffd825e807bd rcutorture: Update rcutorture_one_extend_check() for lazy preemption
> * c9b55f9da0d2c rcu: limit PREEMPT_RCU configurations
>
> we also made the test upon 5ffd825e807bd, which still shows the similar WARN.
> is this expected?
>
Yes, that's expected, and that's why commit b9aa59295f037 is needed,
thank you for the double confirmation.
Regards,
Boqun
> >
> > Thanx, Paul
> >
> > > + mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> > > +
> > > + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
> > > cur_ops->readlock_nesting() > 0, ROEC_ARGS);
> > > }
> > >
> > > --
> > > 2.39.5 (Apple Git-154)
> > >
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() for lazy preemption
2025-02-25 3:37 ` Boqun Feng
@ 2025-02-25 6:20 ` Oliver Sang
0 siblings, 0 replies; 16+ messages in thread
From: Oliver Sang @ 2025-02-25 6:20 UTC (permalink / raw)
To: Boqun Feng
Cc: Paul E. McKenney, Ankur Arora, oe-lkp, lkp, Peter Zijlstra,
Frederic Weisbecker, rcu, Joel Fernandes, oliver.sang
hi, Boqun,
On Mon, Feb 24, 2025 at 07:37:25PM -0800, Boqun Feng wrote:
[...]
> >
> > * b9aa59295f037 rcutorture: Update ->extendables check for lazy preemption
> > * 5ffd825e807bd rcutorture: Update rcutorture_one_extend_check() for lazy preemption
> > * c9b55f9da0d2c rcu: limit PREEMPT_RCU configurations
> >
> > we also made the test upon 5ffd825e807bd, which still shows the similar WARN.
> > is this expected?
> >
>
> Yes, that's expected, and that's why commit b9aa59295f037 is needed,
thanks a lot for information!
> thank you for the double confirmation.
you are welcome. always our great pleasure :)
>
> Regards,
> Boqun
>
> > >
> > > Thanx, Paul
> > >
> > > > + mask |= RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> > > > +
> > > > + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) &&
> > > > cur_ops->readlock_nesting() > 0, ROEC_ARGS);
> > > > }
> > > >
> > > > --
> > > > 2.39.5 (Apple Git-154)
> > > >
>
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2025-02-25 6:20 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-17 6:30 [linux-next:master] [rcu] c9b55f9da0: WARNING:at_kernel/rcu/rcutorture.c:#rcutorture_one_extend_check[rcutorture] kernel test robot
2025-02-19 16:51 ` Paul E. McKenney
2025-02-21 5:56 ` Boqun Feng
2025-02-21 6:59 ` Oliver Sang
2025-02-22 1:02 ` Paul E. McKenney
2025-02-24 2:22 ` Oliver Sang
2025-02-24 3:21 ` Boqun Feng
2025-02-24 4:40 ` Boqun Feng
2025-02-24 4:43 ` [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() for lazy preemption Boqun Feng
2025-02-24 4:43 ` [PATCH v2 2/2] rcutorture: Update ->extendables check " Boqun Feng
2025-02-24 4:49 ` Boqun Feng
2025-02-24 17:07 ` Paul E. McKenney
2025-02-24 4:58 ` [PATCH v2 1/2] rcutorture: Update rcutorture_one_extend_check() " Paul E. McKenney
2025-02-25 2:43 ` Oliver Sang
2025-02-25 3:37 ` Boqun Feng
2025-02-25 6:20 ` Oliver Sang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox