calling ldi_open_by_name() from within a driver's attach or detach functions can trigger a deadlock (Doc ID 2198490.1)

Last updated on OCTOBER 28, 2016

Applies to:

Solaris Operating System - Version 10 3/05 to 11.3 [Release 10.0 to 11.0]
Information in this document applies to any platform.

Symptoms

Here are two threads that are in a deadlock because a 3rd party driver's attach code has called ldi_open_by_dev():

1st thread:

genunix:cv_wait+0x38(, 0x6016b8f8300, 0, 0x1a24570, 0x10000000)
genunix:mt_config_fini+0x20(, 0x4004048, 0xffffffff)
genunix:config_grand_children(0x30014a79bc8, 0x4004048, 0xffffffff) - frame recycled
genunix:devi_config_common+0x138(, , 0xffffffffffffffff)
genunix:ndi_devi_config(0x30014a79bc8, 0x4004048, 0xdc00, 0x4004000) - frame recycled
devinfo:di_copytree+0x50(0x30014a79bc8, 0x3007458c020, 0x60164beccd0)
devinfo:di_snapshot+0x23c(0x60164beccd0)
devinfo:di_snapshot_and_clean+0xc(0x60164beccd0, 1)
devinfo:di_cache_update+0x20(0x60164beccd0)
devinfo:di_cache_lookup+0x98(0x60164beccd0)
devinfo:di_ioctl+0x5c4()
specfs:spec_ioctl(0x6013fc0ed80, 0x10df00, 0xfe0cb914, 0x100001, , 0x2a102c7badc) - frame recycled
genunix:fop_ioctl+0x2c(0x6013fc0ed80, 0x10df00, 0xfe0cb914, 0x100001, , 0x2a102c7badc)
genunix:ioctl+0x184()
unix:syscall_trap32+0xcc()

 

2nd thread:

genunix:cv_wait+0x38(0x30014a79d1c, 0x30014a79c30, 0x697, 0xf1, 0x788)
genunix:ndi_devi_enter+0x44(0x30014a79bc8, 0x2a103078f48, , 0x8000)
genunix:devi_config_one+0x120(0x30014a79bc8, 0x6016c913300, 0x2a1030790c8, 0x4080)
genunix:ndi_devi_config_one+0xe8(0x30014a79bc8, 0x6016c913300, 0x2a1030790c8, 0x4080)
genunix:resolve_pathname_noalias+0x1a0(0x18edb30, 0x2a103079290, 0x2a103079288, 0x2a103079284, , 0xffffffffffffffff)
genunix:resolve_pathname+0x10(0x18edb30, 0x2a103079290, 0x2a103079288, 0x2a103079284)
genunix:ldi_vp_from_name+0x100(0x18edb30, 0x2a103079358)
genunix:ldi_open_by_name+0x38(0x18edb30, 4, 0x6013a063ea8, 0x2a103079418, 0x6017cf64ce8)
vxdmp:dmp_setbootdev+0x30()
vxdmp:dmp_attach+0xfc(0x6013a16ee70, 0)
genunix:devi_attach+0xac(0x6013a16ee70, 0, 0x3000532ac70, 0)
genunix:attach_node+0xbc(0x6013a16ee70)
genunix:i_ndi_config_node+0x14c(0x6013a16ee70, 6, 0)
genunix:i_ddi_attachchild+0x38(0x6013a16ee70, 0x2a103079c80, 0, 0)
genunix:devi_attach_node+0xcc(0x6013a16ee70, 0x4004048)
genunix:config_immediate_children+0xd0(0x6013a15b9d0, , 0xffffffff)
genunix:devi_config_common+0xe0(0x6013a15b9d0, , 0xffffffff)
genunix:mt_config_thread+0x60(0x6017ed4f2a8, 0)
unix:thread_start+4()

Cause

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms