tech-kern archive

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

Re: hang in tstile with Samsung Galaxy



On 09.04.10 15:12, Andrew Doran wrote:
> On Fri, Apr 09, 2010 at 03:03:06PM +0200, Christoph Egger wrote:
>> On 09.04.10 14:55, Manuel Bouyer wrote:
>>> On Fri, Apr 09, 2010 at 11:36:44AM +0200, Christoph Egger wrote:
>>>> sleepq_block+0xcd
>>>> turnstile_block+0x2dd
>>>> mutex_enter+0x26b
>>>
>>> Its it waiting on sd->sc_dk.dk_openlock ?
>>> What does sdopen+0x7a point to ?
>>
>> It points to sys/dev/scsipi/sd.c:409
>>
>>     if (sd->sc_dk.dk_nwedges != 0 && part != RAW_PART) {
>>
>> Right above that line is
>>
>>     mutex_enter(&sd->sc_dk.dk_openlock);
>>
>> so yes, it actually seems to wait for this lock.
>>
>>>
>>>> sdopen+0x7a
>>>> cdev_open+0x63
>>>> spec_open+0x169
>>>> VOP_OPEN+0x62
>>>> vn_open+0x1fc
>>>> sys_open+0xd7
>>>> syscall+0xaa
>>>>
>>
>>
>> Christoph
>>
> 
> The address of that lock will be in the wchan for the process hung in
> tstile.  Do 'show lock ...' on it in DDB and it will tell you who holds
> it (LWP address to pass to t/a command) and where it is held (pass ot
> x/I do get location of the lock acquire).

db> show lock 0xffff80004f2ffd90
lock address : 0xffff80004f2ffd90 type      :     sleep/adaptive
initialiyed  : 0xffffffff806947f2
shared holds :                  0 exclusive :                  1
shares wanted:                  0 exclusive :                  1
current cpu  :                  0 last held :                  0
current lwp  : 0xffff80004b272c00 last held : 0xffff80004ede1800
last locked  : 0xffffffff80651c61 unlocked  : 000000000000000000
owner field  : 0xffff80004ede1800 wait/spin :                1/0

Turnstile chain at 0xffffffff80e31c80.
=> Turnstile at 0xffff80004e645548 (wrq=0xffff80004e645568,
rdq=0xffff80004e645578).
=> 0 waiting readers:
=> 1 waiting writers: 0xffff80004efc5800
db> tr /a 0xffff80004ede1800
trace: pid 0 lid 57 at 0xffff80004eceb600
sleepq_block+0xcd
cv_wait+0x115
scan_mbr+0x39
readdisklabel+0x143
sdopen+0x2fe
bdev_open+0x64
spec_open+0x346
VOP_OPEN+0x62
dkwedge_discover+0xda
sdattach+0x1f2
config_attach_loc+0x16d
scsi_probe_bus+0x4d2
scsibus_config+0x80
scsipi_completion_thread+0x23
db> ps /l
PID  LID S CPU FLAGS  STRUCT LWP *     NAME     WAIT
8680   1 3   0     0 ffff80004efc5800 disklabel tstile
[...]
0     57 3   0   200 ffff80004ede1800  scsibus0 biowait

on prompt:

gdb netbsd.gdb
list *(0xffffffff80651c61)
0xffffffff80651c61 is in sdopen (sys/dev/scsipi/sd.c:409).

So it the lock has already been locked at the same place.

Christoph


Home | Main Index | Thread Index | Old Index