From: erik quanstrom <quanstro@coraid.com>
To: 9fans@9fans.net
Subject: Re: [9fans] ps hang
Date: Fri, 21 Aug 2009 14:37:53 -0400 [thread overview]
Message-ID: <fdab0d444d90bc2004c3436613c47030@coraid.com> (raw)
In-Reply-To: <16322979e064dd6e89b14d24c02a5ad2@coraid.com>
with patch this time.
whattya know. the process with the held lock
broke. (but may not have made it to the
broken state.) the process with the locked
debug lock is 16302
> minooka# acid -k 55053 /n/dump/2009/0819/386/9pccpu
> /n/dump/2009/0819/386/9pccpu:386 plan 9 boot image
> /sys/lib/acid/port
> /sys/lib/acid/386
> acid: stk()
> sched()+0x12d /sys/src/9/port/proc.c:155
> qlock(q=0xf03d9244)+0x141 /sys/src/9/port/qlock.c:48
> procopen(omode=0x0,c=0xf6e52ab8)+0x193 /sys/src/9/port/devproc.c:369
> namec(aname=0xf709f318,amode=0x3,omode=0x0,perm=0x0)+0x6d9 /sys/src/9/port/chan.c:1491
> sysopen(arg=0xf041c1a0)+0xa9 /sys/src/9/port/sysfile.c:279
> syscall(ureg=0xf6810e6c)+0x1b5 /sys/src/9/pc/trap.c:712
> _syscallintr()+0x18 /sys/src/9/pc/plan9l.s:45
> 0xf6810e6c ?file?:0
Wed Aug 19 18:30:29: 16302 acme: checked 163 page table entries
=========================================================
0xf03d90f8 16302: acme sah pc 0xf01aab8a kproc (Wakeme) ut 203 st 347 qpc 0xf019ef57
gotolabel(label=0xf0016028)+0x0 /sys/src/9/pc/l.s:946
sleep(r=0xf6992914,arg=0xf69926e8,f=0xf0117a08)+0x263 /sys/src/9/port/proc.c:796
mountio(m=0xf6a19ec8,r=0xf69926e8)+0x285 /sys/src/9/port/devmnt.c:808
mountrpc(r=0xf69926e8,m=0xf6a19ec8)+0x27 /sys/src/9/port/devmnt.c:745
mntrdwr(c=0xf6aad8d8,buf=0xf6663418,type=0x76,off=0x0,n=0x43)+0xfb /sys/src/9/port/devmnt.c:713
mntwrite(c=0xf6aad8d8,buf=0xf6663418,n=0x43,off=0x0)+0x38 /sys/src/9/port/devmnt.c:681
pprint(fmt=0xf023857e)+0x157 /sys/src/9/port/devcons.c:335
notify(ureg=0xf666371c)+0x162 /sys/src/9/pc/trap.c:797
trap(ureg=0xf666371c)+0x24d /sys/src/9/pc/trap.c:449
forkret()+0x0 /sys/src/9/pc/l.s:1010
0xf666371c ?file?:0
i believe the problem is that pprint() is not guarenteed not to
block for a really long time. the debug lock should be dropped
before pprint'ing.
/n/dump/2009/0821/sys/src/9/pc/trap.c:765,771 - trap.c:765,772
int
notify(Ureg* ureg)
{
- int l;
+ char buf[ERRMAX];
+ int l, flag;
ulong s, sp;
Note *n;
/n/dump/2009/0821/sys/src/9/pc/trap.c:792,801 - trap.c:793,804
}
if(n->flag!=NUser && (up->notified || up->notify==0)){
- if(n->flag == NDebug)
- pprint("suicide: %s\n", n->msg);
+ flag = n->flag;
+ strcpy(buf, n->msg);
qunlock(&up->debug);
- pexit(n->msg, n->flag!=NDebug);
+ if(flag == NDebug)
+ pprint("suicide: %s\n", buf);
+ pexit(buf, flag!=NDebug);
}
if(up->notified){
/n/dump/2009/0821/sys/src/9/pc/trap.c:816,823 - trap.c:819,826
if(!okaddr((ulong)up->notify, 1, 0)
|| !okaddr(sp-ERRMAX-4*BY2WD, sizeof(Ureg)+ERRMAX+4*BY2WD, 1)){
- pprint("suicide: bad address in notify\n");
qunlock(&up->debug);
+ pprint("suicide: bad address in notify\n");
pexit("Suicide", 0);
}
/n/dump/2009/0821/sys/src/9/pc/trap.c:849,855 - trap.c:852,858
noted(Ureg* ureg, ulong arg0)
{
Ureg *nureg;
- ulong oureg, sp;
+ ulong unk, oureg, sp;
qlock(&up->debug);
if(arg0!=NRSTR && !up->notified) {
/n/dump/2009/0821/sys/src/9/pc/trap.c:866,873 - trap.c:869,876
/* sanity clause */
oureg = (ulong)nureg;
if(!okaddr((ulong)oureg-BY2WD, BY2WD+sizeof(Ureg), 0)){
- pprint("bad ureg in noted or call to noted when not notified\n");
qunlock(&up->debug);
+ pprint("bad ureg in noted or call to noted when not notified\n");
pexit("Suicide", 0);
}
/n/dump/2009/0821/sys/src/9/pc/trap.c:881,888 - trap.c:884,891
if((nureg->cs & 0xFFFF) != UESEL || (nureg->ss & 0xFFFF) != UDSEL
|| (nureg->ds & 0xFFFF) != UDSEL || (nureg->es & 0xFFFF) != UDSEL
|| (nureg->fs & 0xFFFF) != UDSEL || (nureg->gs & 0xFFFF) != UDSEL){
- pprint("bad segment selector in noted\n");
qunlock(&up->debug);
+ pprint("bad segment selector in noted\n");
pexit("Suicide", 0);
}
/n/dump/2009/0821/sys/src/9/pc/trap.c:891,896 - trap.c:894,900
memmove(ureg, nureg, sizeof(Ureg));
+ unk = NCONT;
switch(arg0){
case NCONT:
case NRSTR:
/n/dump/2009/0821/sys/src/9/pc/trap.c:921,927 - trap.c:925,931
break;
default:
- pprint("unknown noted arg 0x%lux\n", arg0);
+ unk = arg0;
up->lastnote.flag = NDebug;
/* fall through */
/n/dump/2009/0821/sys/src/9/pc/trap.c:928,933 - trap.c:932,939
case NDFLT:
if(up->lastnote.flag == NDebug){
qunlock(&up->debug);
+ if(unk != NCONT)
+ pprint("unknown noted arg 0x%lux\n", arg0);
pprint("suicide: %s\n", up->lastnote.msg);
} else
qunlock(&up->debug);
- erik
prev parent reply other threads:[~2009-08-21 18:37 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-21 16:20 erik quanstrom
2009-08-21 18:37 ` erik quanstrom [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fdab0d444d90bc2004c3436613c47030@coraid.com \
--to=quanstro@coraid.com \
--cc=9fans@9fans.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).