[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <a6b342b3-8ce1-70c8-8398-fceaee0b51ff@gmail.com>
Date: Wed, 15 Dec 2021 11:18:22 +0100
From: Jiri Slaby <jirislaby@...il.com>
To: Eric Dumazet <eric.dumazet@...il.com>,
"David S . Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>
Cc: netdev <netdev@...r.kernel.org>,
Eric Dumazet <edumazet@...gle.com>,
Dmitry Vyukov <dvyukov@...gle.com>
Subject: Re: [PATCH v3 net-next 01/23] lib: add reference counting tracking
infrastructure
On 05. 12. 21, 5:21, Eric Dumazet wrote:
> From: Eric Dumazet <edumazet@...gle.com>
>
> 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.
...
> --- 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:
> 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
Powered by blists - more mailing lists