Re: [linus:master] [mm] cc92eba1c8: WARNING:at_kernel/rcu/tree_plugin.h:#__rcu_read_unlock

From: Suren Baghdasaryan
Date: Sat Jun 01 2024 - 19:42:25 EST


On Sun, May 26, 2024 at 7:57 PM kernel test robot <oliver.sang@xxxxxxxxx> wrote:
>
>
>
> Hello,
>
> kernel test robot noticed "WARNING:at_kernel/rcu/tree_plugin.h:#__rcu_read_unlock" on:
>
> commit: cc92eba1c88b1f74e0f044df2738f4e4b22f1e4e ("mm: fix non-compound multi-order memory accounting in __free_pages")
> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git master
>
> [test failed on linus/master 6d69b6c12fce479fde7bc06f686212451688a102]
> [test failed on linux-next/master 3689b0ef08b70e4e03b82ebd37730a03a672853a]
>
> in testcase: boot
>
> compiler: clang-18
> test machine: qemu-system-x86_64 -enable-kvm -cpu SandyBridge -smp 2 -m 16G
>
> (please refer to attached dmesg/kmsg for entire log/backtrace)
>
>
>
> 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@xxxxxxxxx>
> | Closes: https://lore.kernel.org/oe-lkp/202405271029.6d2f9c4c-lkp@xxxxxxxxx

Fix is posted at
https://lore.kernel.org/all/20240601233840.617458-1-surenb@xxxxxxxxxx/

>
>
> [ 2.504179][ C0] ------------[ cut here ]------------
> [ 2.506222][ C0] WARNING: CPU: 0 PID: 1 at kernel/rcu/tree_plugin.h:431 __rcu_read_unlock (kernel/rcu/tree_plugin.h:431)
> [ 2.508117][ C0] Modules linked in:
> [ 2.509538][ C0] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.9.0-rc4-00080-gcc92eba1c88b #1 1899fb0438e1349d8761ad4016a94aaeaa8a37df
> [ 2.512111][ C0] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
> [ 2.518194][ C0] RIP: 0010:__rcu_read_unlock (kernel/rcu/tree_plugin.h:431)
> [ 2.520109][ C0] Code: 00 00 41 83 3e 00 75 26 43 0f b6 04 3c 84 c0 75 5f 8b 03 3d 00 00 00 40 73 10 5b 41 5c 41 5d 41 5e 41 5f 5d c3 cc cc cc cc cc <0f> 0b eb ec e8 8d 00 00 00 eb d3 89 d9 80 e1 07 80 c1 03 38 c1 7c
> All code
> ========
> 0: 00 00 add %al,(%rax)
> 2: 41 83 3e 00 cmpl $0x0,(%r14)
> 6: 75 26 jne 0x2e
> 8: 43 0f b6 04 3c movzbl (%r12,%r15,1),%eax
> d: 84 c0 test %al,%al
> f: 75 5f jne 0x70
> 11: 8b 03 mov (%rbx),%eax
> 13: 3d 00 00 00 40 cmp $0x40000000,%eax
> 18: 73 10 jae 0x2a
> 1a: 5b pop %rbx
> 1b: 41 5c pop %r12
> 1d: 41 5d pop %r13
> 1f: 41 5e pop %r14
> 21: 41 5f pop %r15
> 23: 5d pop %rbp
> 24: c3 ret
> 25: cc int3
> 26: cc int3
> 27: cc int3
> 28: cc int3
> 29: cc int3
> 2a:* 0f 0b ud2 <-- trapping instruction
> 2c: eb ec jmp 0x1a
> 2e: e8 8d 00 00 00 call 0xc0
> 33: eb d3 jmp 0x8
> 35: 89 d9 mov %ebx,%ecx
> 37: 80 e1 07 and $0x7,%cl
> 3a: 80 c1 03 add $0x3,%cl
> 3d: 38 c1 cmp %al,%cl
> 3f: 7c .byte 0x7c
>
> Code starting with the faulting instruction
> ===========================================
> 0: 0f 0b ud2
> 2: eb ec jmp 0xfffffffffffffff0
> 4: e8 8d 00 00 00 call 0x96
> 9: eb d3 jmp 0xffffffffffffffde
> b: 89 d9 mov %ebx,%ecx
> d: 80 e1 07 and $0x7,%cl
> 10: 80 c1 03 add $0x3,%cl
> 13: 38 c1 cmp %al,%cl
> 15: 7c .byte 0x7c
> [ 2.524112][ C0] RSP: 0000:ffff8883ae809db8 EFLAGS: 00010286
> [ 2.526188][ C0] RAX: 00000000ffffffff RBX: ffff888100ac04ac RCX: dffffc0000000000
> [ 2.528109][ C0] RDX: dffffc0000000000 RSI: 0000000000000008 RDI: ffff888100ac0040
> [ 2.530810][ C0] RBP: 00000000ffffffff R08: ffffffff878bc007 R09: 1ffffffff0f17800
> [ 2.532116][ C0] R10: dffffc0000000000 R11: fffffbfff0f17801 R12: 1ffff11020158095
> [ 2.534888][ C0] R13: dffffc0000000000 R14: ffffea0004037400 R15: dffffc0000000000
> [ 2.536108][ C0] FS: 0000000000000000(0000) GS:ffff8883ae800000(0000) knlGS:0000000000000000
> [ 2.539082][ C0] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 2.540110][ C0] CR2: ffff88843ffff000 CR3: 00000000056ce000 CR4: 00000000000406f0
> [ 2.542812][ C0] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> [ 2.544109][ C0] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> [ 2.546833][ C0] Call Trace:
> [ 2.548013][ C0] <IRQ>
> [ 2.548772][ C0] ? __warn (kernel/panic.c:240 kernel/panic.c:694)
> [ 2.550219][ C0] ? __rcu_read_unlock (kernel/rcu/tree_plugin.h:431)
> [ 2.551982][ C0] ? __rcu_read_unlock (kernel/rcu/tree_plugin.h:431)
> [ 2.553266][ C0] ? report_bug (lib/bug.c:?)
> [ 2.555068][ C0] ? handle_bug (arch/x86/kernel/traps.c:239)
> [ 2.556133][ C0] ? exc_invalid_op (arch/x86/kernel/traps.c:260)
> [ 2.557753][ C0] ? asm_exc_invalid_op (arch/x86/include/asm/idtentry.h:621)
> [ 2.559780][ C0] ? __rcu_read_unlock (kernel/rcu/tree_plugin.h:431)
> [ 2.561383][ C0] page_ext_put (include/linux/rcupdate.h:339 include/linux/rcupdate.h:814 mm/page_ext.c:537)
> [ 2.562887][ C0] __free_pages (include/linux/page_ref.h:210 include/linux/mm.h:1135 mm/page_alloc.c:4669)
> [ 2.564182][ C0] ? __pfx_thread_stack_free_rcu (kernel/fork.c:346)
> [ 2.566080][ C0] ? rcu_core (kernel/rcu/tree.c:?)
> [ 2.567681][ C0] rcu_core (include/linux/rcupdate.h:339 kernel/rcu/tree.c:2198 kernel/rcu/tree.c:2471)
> [ 2.569661][ C0] __do_softirq (arch/x86/include/asm/jump_label.h:27 include/linux/jump_label.h:207 include/trace/events/irq.h:142 kernel/softirq.c:555)
> [ 2.571612][ C0] ? __irq_exit_rcu (kernel/softirq.c:613 kernel/softirq.c:635)
> [ 2.573327][ C0] __irq_exit_rcu (kernel/softirq.c:613 kernel/softirq.c:635)
> [ 2.574888][ C0] irq_exit_rcu (kernel/softirq.c:647)
> [ 2.576112][ C0] sysvec_apic_timer_interrupt (arch/x86/kernel/apic/apic.c:1043)
> [ 2.578091][ C0] </IRQ>
> [ 2.579130][ C0] <TASK>
> [ 2.580154][ C0] asm_sysvec_apic_timer_interrupt (arch/x86/include/asm/idtentry.h:702)
> [ 2.582143][ C0] RIP: 0010:clear_page_rep (arch/x86/lib/clear_page_64.S:20)
> [ 2.583920][ C0] Code: 1f 46 c0 fd e9 26 ff ff ff cc cc cc cc cc cc cc cc cc cc 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 b9 00 02 00 00 31 c0 <f3> 48 ab c3 cc cc cc cc 90 90 90 90 90 90 90 90 90 90 90 90 90 90
> All code
> ========
> 0: 1f (bad)
> 1: 46 c0 fd e9 rex.RX sar $0xe9,%bpl
> 5: 26 ff es (bad)
> 7: ff (bad)
> 8: ff cc dec %esp
> a: cc int3
> b: cc int3
> c: cc int3
> d: cc int3
> e: cc int3
> f: cc int3
> 10: cc int3
> 11: cc int3
> 12: cc int3
> 13: 90 nop
> 14: 90 nop
> 15: 90 nop
> 16: 90 nop
> 17: 90 nop
> 18: 90 nop
> 19: 90 nop
> 1a: 90 nop
> 1b: 90 nop
> 1c: 90 nop
> 1d: 90 nop
> 1e: 90 nop
> 1f: 90 nop
> 20: 90 nop
> 21: 90 nop
> 22: 90 nop
> 23: b9 00 02 00 00 mov $0x200,%ecx
> 28: 31 c0 xor %eax,%eax
> 2a:* f3 48 ab rep stos %rax,%es:(%rdi) <-- trapping instruction
> 2d: c3 ret
> 2e: cc int3
> 2f: cc int3
> 30: cc int3
> 31: cc int3
> 32: 90 nop
> 33: 90 nop
> 34: 90 nop
> 35: 90 nop
> 36: 90 nop
> 37: 90 nop
> 38: 90 nop
> 39: 90 nop
> 3a: 90 nop
> 3b: 90 nop
> 3c: 90 nop
> 3d: 90 nop
> 3e: 90 nop
> 3f: 90 nop
>
> Code starting with the faulting instruction
> ===========================================
> 0: f3 48 ab rep stos %rax,%es:(%rdi)
> 3: c3 ret
> 4: cc int3
> 5: cc int3
> 6: cc int3
> 7: cc int3
> 8: 90 nop
> 9: 90 nop
> a: 90 nop
> b: 90 nop
> c: 90 nop
> d: 90 nop
> e: 90 nop
> f: 90 nop
> 10: 90 nop
> 11: 90 nop
> 12: 90 nop
> 13: 90 nop
> 14: 90 nop
> 15: 90 nop
>
>
> The kernel config and materials to reproduce are available at:
> https://download.01.org/0day-ci/archive/20240527/202405271029.6d2f9c4c-lkp@xxxxxxxxx
>
>
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
>