Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: panic: kernel diagnostic assertion "l == curlwp"



lwp_exit() used to work for curlwp and !curlwp.

There is a regression that there was introduced code called from
lwp_exit() calling lwp_thread_cleanup(l) that asserts curlwp,
effectively enforcing lwp_exit() to be operational for curlwp only.

This was introduced by:

commit 2de05dfb9c516db5509614b7be366e31205ceeaa
Author: thorpej <thorpej%NetBSD.org@localhost>
Date:   Sat Apr 4 20:20:12 2020 +0000

    Add support for lazily generating a "global thread ID" for a LWP.  This
    identifier uniquely identifies an LWP across the entire system, and will
    be used in future improvements in user-space synchronization primitives.

    (Test disabled and libc stub not included intentionally so as to avoid
    multiple libc version bumps.)

On 01.06.2020 14:45, Jared McNeill wrote:
> Looks like lwp_exit is called with something other than curlwp in the
> sys__lwp_create error path:
> 
> https://nxr.netbsd.org/xref/src/sys/kern/sys_lwp.c#156
> 
> 
> On Mon, 1 Jun 2020, Jared McNeill wrote:
> 
>> Just hit this panic on 9.99.64:
>>
>> [ 6717.5700161] panic: kernel diagnostic assertion "l == curlwp"
>> failed: file "/home/source/ab/HEAD/src/sys/kern/kern_lwp.c", line 2063
>> [ 6717.5800161] cpu18: Begin traceback...
>> [ 6717.5900170] trace fp ffffc0088f5d3c50
>> [ 6717.5900170] fp ffffc0088f5d3c70 vpanic() at ffffc000004b0334
>> netbsd:vpanic+0x15c
>> [ 6717.6000167] fp ffffc0088f5d3ce0 kern_assert() at ffffc000007ce26c
>> netbsd:kern_assert+0x5c
>> [ 6717.6100211] fp ffffc0088f5d3d70 lwp_thread_cleanup() at
>> ffffc0000045f368 netbsd:lwp_thread_cleanup+0x80
>> [ 6717.6200270] fp ffffc0088f5d3d90 lwp_exit() at ffffc0000045f4ac
>> netbsd:lwp_exit+0xcc
>> [ 6717.6200270] fp ffffc0088f5d3dd0 sys__lwp_create() at
>> ffffc000004c2f00 netbsd:sys__lwp_create+0xe8
>> [ 6717.6300215] fp ffffc0088f5d3e20 syscall() at ffffc0000008a63c
>> netbsd:syscall+0x18c
>> [ 6717.6400221] tf ffffc0088f5d3ed0 el0_trap() at ffffc00000088c74
>> netbsd:el0_trap
>> [ 6717.6500214] ---- trapframe 0xffffc0088f5d3ed0 (304 bytes) ----
>> [ 6717.6500214]     pc=0000f8abc4638958,   spsr=0000000020000000
>> [ 6717.6600309]    esr=0000000056000135,    far=0000f8abc465b030
>> [ 6717.6600309]     x0=0000ffffffe68500,     x1=0000f8abc4a1a260
>> [ 6717.6700228]     x2=0000f8abc49fe200,     x3=0000000000000000
>> [ 6717.6800338]     x4=0000ffffffe684d0,     x5=0000000000000030
>> [ 6717.6800338]     x6=0000ffffffe68500,     x7=0000f8abc4760208
>> [ 6717.6900234]     x8=0000000000000001,     x9=0000000000001003
>> [ 6717.6900234]    x10=000000000000000c,    x11=0000000000000001
>> [ 6717.7000252]    x12=0000f8abc49e91d8,    x13=0000000000000000
>> [ 6717.7000252]    x14=0000000000000000,    x15=0000f8abc4000980
>> [ 6717.7100242]    x16=0000f8abc4a122e0,    x17=0000f8abc4638954
>> [ 6717.7200306]    x18=0000000000000001,    x19=0000ffffffe68500
>> [ 6717.7200306]    x20=0000fffff9a72e60,    x21=0000000000000002
>> [ 6717.7300283]    x22=0000f8abc4a1a260,    x23=0000f8abc49fe200
>> [ 6717.7300283]    x24=0000fffff9a72000,    x25=0000ffffffe684d0
>> [ 6717.7400357]    x26=0000fffff9a732a8,    x27=0000fffff9a73070
>> [ 6717.7400357]    x28=0000f8abc4a1b400, fp=x29=0000ffffffe68510
>> [ 6717.7500291] lr=x30=0000f8abc49fe224,     sp=0000ffffffe68420
>> [ 6717.7600300] ------------------------------------------------
>> [ 6717.7600300] cpu18: End traceback...
>> Stopped in pid 152.152 (conftest) at   
>> netbsd:cpu_Debugger+0x4:        ret
>> db{18}>
>>
>>
>>


Attachment: signature.asc
Description: OpenPGP digital signature



Home | Main Index | Thread Index | Old Index