Thread (52 messages) 52 messages, 8 authors, 2021-12-15

Re: [PATCH v3 net-next 01/23] lib: add reference counting tracking infrastructure

flat view

From: Eric Dumazet <hidden>
Date: 2021-12-15 10:39:02

On Wed, Dec 15, 2021 at 2:18 AM Jiri Slaby [off-list ref] wrote:
On 05. 12. 21, 5:21, Eric Dumazet wrote:
quoted
From: Eric Dumazet <redacted>

It can be hard to track where references are taken and released.

In networking, we have annoying issues at device or netns dismantles,
and we had various proposals to ease root causing them.
...
quoted
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -680,6 +680,11 @@ config STACK_HASH_ORDER
       Select the hash size as a power of 2 for the stackdepot hash table.
       Choose a lower value to reduce the memory impact.

+config REF_TRACKER
+     bool
+     depends on STACKTRACE_SUPPORT
+     select STACKDEPOT
Hi,

I have to:
+       select STACKDEPOT_ALWAYS_INIT
here. Otherwise I see this during boot:
Thanks, I am adding Vlastimil Babka to the CC

This stuff has been added in
commit e88cc9f5e2e7a5d28a1adf12615840fab4cbebfd
Author: Vlastimil Babka [off-list ref]
Date:   Tue Dec 14 21:50:42 2021 +0000

    lib/stackdepot: allow optional init and stack_table allocation by kvmalloc()


quoted
BUG: unable to handle page fault for address: 00000000001e6f80
#PF: supervisor read access in kernel mode
#PF: error_code(0x0000) - not-present page
PGD 0 P4D 0
Oops: 0000 [#1] PREEMPT SMP PTI
CPU: 1 PID: 1 Comm: swapper/0 Tainted: G          I       5.16.0-rc5-next-20211214-vanilla+ #46 2756e36611a8c8a8271884ae04571fc88e1cb566
Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./To be filled by O.E.M., BIOS SDBLI944.86P 05/08/2007
RIP: 0010:__stack_depot_save (lib/stackdepot.c:373)
Code: 04 31 fb 83 fe 03 77 97 83 fe 02 74 7a 83 fe 03 74 72 83 fe 01 74 73 48 8b 05 45 ec 11 02 89 d9 81 e1 ff ff 0f 00 48 8d 0c c8 <48> 8b 29 48 85 ed 75 12 e9 9f 00 00 00 48 8b 6d 00 48 85 ed 0f 84
All code
========
   0: 04 31                   add    $0x31,%al
   2: fb                      sti
   3: 83 fe 03                cmp    $0x3,%esi
   6: 77 97                   ja     0xffffffffffffff9f
   8: 83 fe 02                cmp    $0x2,%esi
   b: 74 7a                   je     0x87
   d: 83 fe 03                cmp    $0x3,%esi
  10: 74 72                   je     0x84
  12: 83 fe 01                cmp    $0x1,%esi
  15: 74 73                   je     0x8a
  17: 48 8b 05 45 ec 11 02    mov    0x211ec45(%rip),%rax        # 0x211ec63
  1e: 89 d9                   mov    %ebx,%ecx
  20: 81 e1 ff ff 0f 00       and    $0xfffff,%ecx
  26: 48 8d 0c c8             lea    (%rax,%rcx,8),%rcx
  2a:*        48 8b 29                mov    (%rcx),%rbp              <-- trapping instruction
  2d: 48 85 ed                test   %rbp,%rbp
  30: 75 12                   jne    0x44
  32: e9 9f 00 00 00          jmp    0xd6
  37: 48 8b 6d 00             mov    0x0(%rbp),%rbp
  3b: 48 85 ed                test   %rbp,%rbp
  3e: 0f                      .byte 0xf
  3f: 84                      .byte 0x84

Code starting with the faulting instruction
===========================================
   0: 48 8b 29                mov    (%rcx),%rbp
   3: 48 85 ed                test   %rbp,%rbp
   6: 75 12                   jne    0x1a
   8: e9 9f 00 00 00          jmp    0xac
   d: 48 8b 6d 00             mov    0x0(%rbp),%rbp
  11: 48 85 ed                test   %rbp,%rbp
  14: 0f                      .byte 0xf
  15: 84                      .byte 0x84
RSP: 0000:ffffb3f700027b78 EFLAGS: 00010206
RAX: 0000000000000000 RBX: 000000004ea3cdf0 RCX: 00000000001e6f80
RDX: 000000000000000d RSI: 0000000000000002 RDI: 00000000793ec676
RBP: ffff8b578094f4d0 R08: 0000000043abc8c3 R09: 000000000000000d
R10: 0000000000000015 R11: 000000000000001c R12: 0000000000000001
R13: 0000000000000cc0 R14: ffffb3f700027bd8 R15: 000000000000000d
FS:  0000000000000000(0000) GS:ffff8b5845c80000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00000000001e6f80 CR3: 0000000199410000 CR4: 00000000000006e0
Call Trace:
<TASK>
ref_tracker_alloc (lib/ref_tracker.c:84)
net_rx_queue_update_kobjects (net/core/net-sysfs.c:1049 net/core/net-sysfs.c:1101)
netdev_register_kobject (net/core/net-sysfs.c:1761 net/core/net-sysfs.c:2012)
register_netdevice (net/core/dev.c:9660)
register_netdev (net/core/dev.c:9784)
loopback_net_init (drivers/net/loopback.c:217)
ops_init (net/core/net_namespace.c:140)
register_pernet_operations (net/core/net_namespace.c:1148 net/core/net_namespace.c:1217)
register_pernet_device (net/core/net_namespace.c:1304)
net_dev_init (net/core/dev.c:11014)
? sysctl_core_init (net/core/dev.c:10958)
do_one_initcall (init/main.c:1303)
kernel_init_freeable (init/main.c:1377 init/main.c:1394 init/main.c:1413 init/main.c:1618)
? rest_init (init/main.c:1499)
kernel_init (init/main.c:1509)
ret_from_fork (arch/x86/entry/entry_64.S:301)
</TASK>
Modules linked in:
CR2: 00000000001e6f80
---[ end trace 0000000000000000 ]---
RIP: 0010:__stack_depot_save (lib/stackdepot.c:373)
Code: 04 31 fb 83 fe 03 77 97 83 fe 02 74 7a 83 fe 03 74 72 83 fe 01 74 73 48 8b 05 45 ec 11 02 89 d9 81 e1 ff ff 0f 00 48 8d 0c c8 <48> 8b 29 48 85 ed 75 12 e9 9f 00 00 00 48 8b 6d 00 48 85 ed 0f 84
All code
========
   0: 04 31                   add    $0x31,%al
   2: fb                      sti
   3: 83 fe 03                cmp    $0x3,%esi
   6: 77 97                   ja     0xffffffffffffff9f
   8: 83 fe 02                cmp    $0x2,%esi
   b: 74 7a                   je     0x87
   d: 83 fe 03                cmp    $0x3,%esi
  10: 74 72                   je     0x84
  12: 83 fe 01                cmp    $0x1,%esi
  15: 74 73                   je     0x8a
  17: 48 8b 05 45 ec 11 02    mov    0x211ec45(%rip),%rax        # 0x211ec63
  1e: 89 d9                   mov    %ebx,%ecx
  20: 81 e1 ff ff 0f 00       and    $0xfffff,%ecx
  26: 48 8d 0c c8             lea    (%rax,%rcx,8),%rcx
  2a:*        48 8b 29                mov    (%rcx),%rbp              <-- trapping instruction
  2d: 48 85 ed                test   %rbp,%rbp
  30: 75 12                   jne    0x44
  32: e9 9f 00 00 00          jmp    0xd6
  37: 48 8b 6d 00             mov    0x0(%rbp),%rbp
  3b: 48 85 ed                test   %rbp,%rbp
  3e: 0f                      .byte 0xf
  3f: 84                      .byte 0x84

Code starting with the faulting instruction
===========================================
   0: 48 8b 29                mov    (%rcx),%rbp
   3: 48 85 ed                test   %rbp,%rbp
   6: 75 12                   jne    0x1a
   8: e9 9f 00 00 00          jmp    0xac
   d: 48 8b 6d 00             mov    0x0(%rbp),%rbp
  11: 48 85 ed                test   %rbp,%rbp
  14: 0f                      .byte 0xf
  15: 84                      .byte 0x84
RSP: 0000:ffffb3f700027b78 EFLAGS: 00010206
RAX: 0000000000000000 RBX: 000000004ea3cdf0 RCX: 00000000001e6f80
RDX: 000000000000000d RSI: 0000000000000002 RDI: 00000000793ec676
RBP: ffff8b578094f4d0 R08: 0000000043abc8c3 R09: 000000000000000d
R10: 0000000000000015 R11: 000000000000001c R12: 0000000000000001
R13: 0000000000000cc0 R14: ffffb3f700027bd8 R15: 000000000000000d
FS:  0000000000000000(0000) GS:ffff8b5845c80000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00000000001e6f80 CR3: 0000000199410000 CR4: 00000000000006e0
regards,
--
js
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help