plan 9 kernel history: overview | file list | diff list

1992/0824/port/devproc.c (diff list | history)

1992/0814/sys/src/9/port/devproc.c:21,271992/0824/sys/src/9/port/devproc.c:21,28 (short | long | prev | next)
1990/0227    
}; 
 
1992/0814    
#define	STATSIZE	(2*NAMELEN+12+7*12) 
1990/0227    
Dirtab procdir[]={ 
1992/0824    
Dirtab procdir[] = 
{ 
1991/1109    
	"ctl",		{Qctl},		0,			0000, 
	"mem",		{Qmem},		0,			0000, 
	"note",		{Qnote},	0,			0000, 
1992/0814/sys/src/9/port/devproc.c:53,651992/0824/sys/src/9/port/devproc.c:54,67
1992/0428    
 
1991/1109    
void	procctlreq(Proc*, char*, int); 
int	procctlmemio(Proc*, ulong, int, void*, int); 
1991/1110    
Chan   *proctext(Chan*, Proc*); 
Segment *txt2data(Proc*, Segment*); 
1992/0824    
Chan*	proctext(Chan*, Proc*); 
Segment* txt2data(Proc*, Segment*); 
1991/1110    
int	procstopped(void*); 
1991/1109    
 
1990/0227    
int 
procgen(Chan *c, Dirtab *tab, int ntab, int s, Dir *dp) 
{ 
1992/0824    
	Qid qid; 
1990/0227    
	Proc *p; 
	char buf[NAMELEN]; 
1991/1109    
	ulong pid, path, perm; 
1992/0814/sys/src/9/port/devproc.c:73,791992/0824/sys/src/9/port/devproc.c:75,82
1990/0227    
		if(pid == 0) 
			return 0; 
		sprint(buf, "%d", pid); 
1991/1112    
		devdir(c, (Qid){CHDIR|((s+1)<<QSHIFT), pid}, buf, 0, p->user, CHDIR|0555, dp); 
1992/0824    
		qid = (Qid){CHDIR|((s+1)<<QSHIFT), pid}; 
		devdir(c, qid, buf, 0, p->user, CHDIR|0555, dp); 
1990/0227    
		return 1; 
	} 
	if(s >= NPROC) 
1992/0814/sys/src/9/port/devproc.c:80,851992/0824/sys/src/9/port/devproc.c:83,89
1990/0227    
		return -1; 
	if(tab) 
		panic("procgen"); 
1992/0824    
 
1990/0227    
	tab = &procdir[s]; 
1991/0705    
	path = c->qid.path&~(CHDIR|((1<<QSHIFT)-1));	/* slot component */ 
1991/1109    
 
1992/0814/sys/src/9/port/devproc.c:88,941992/0824/sys/src/9/port/devproc.c:92,99
1991/1109    
	if(perm == 0) 
		perm = p->procmode; 
 
	devdir(c, (Qid){path|tab->qid.path, c->qid.vers}, tab->name, tab->length, p->user, perm, dp); 
1992/0824    
	qid = (Qid){path|tab->qid.path, c->qid.vers}; 
	devdir(c, qid, tab->name, tab->length, p->user, perm, dp); 
1990/0227    
	return 1; 
} 
 
1992/0814/sys/src/9/port/devproc.c:156,1621992/0824/sys/src/9/port/devproc.c:161,166
1991/1112    
			error(Eperm); 
1991/1110    
		tc = proctext(c, p); 
1990/0227    
		tc->offset = 0; 
1991/1110    
                 
1990/0227    
		return tc; 
1991/1110    
 
1990/0227    
	case Qctl: 
1992/0814/sys/src/9/port/devproc.c:168,1781992/0824/sys/src/9/port/devproc.c:172,183
1990/0227    
		break; 
1990/1110    
 
	case Qnotepg: 
1990/1115    
		if(omode!=OWRITE || pg->pgrpid==1)	/* easy to do by mistake */ 
1992/0824    
		if(omode!=OWRITE || pg->pgrpid == 1) 
1990/11211    
			error(Eperm); 
		c->pgrpid.path = pg->index+1; 
1992/0824    
		c->pgrpid.path = pg->pgrpid+1; 
1992/0428    
		c->pgrpid.vers = p->noteid; 
1990/1110    
		break; 
1992/0824    
 
1990/0227    
	default: 
1992/0114    
		pprint("procopen %lux\n", c->qid); 
1990/11211    
		error(Egreg); 
1992/0814/sys/src/9/port/devproc.c:263,2681992/0824/sys/src/9/port/devproc.c:268,277
1990/0227    
		} 
 
1991/1110    
		if(offset >= KZERO) { 
1992/0824    
			/* Protect crypt key memory */ 
			if(offset >= palloc.cmembase && offset < palloc.cmemtop) 
				error(Eperm); 
 
1992/0128    
			/* validate physical kernel addresses */ 
1992/0628    
			if(offset < (ulong)end) { 
				if(offset+n > (ulong)end) 
1992/0814/sys/src/9/port/devproc.c:332,3421992/0824/sys/src/9/port/devproc.c:341,346
1991/0712    
		if(offset+n > STATSIZE) 
			n = STATSIZE - offset; 
1992/0423    
 
/* Assertion for deref of psstate which causes faults */ 
1992/0328    
if((p->state < Dead) || (p->state > Rendezvous)) 
1992/0423    
	panic("p->state=#%lux, p->psstate=#%lux\n", p->state, p->psstate); 
                 
                 
1991/0712    
		j = sprint(statbuf, "%-27s %-27s %-11s ", 
1991/1105    
			p->text, p->user, p->psstate ? p->psstate : statename[p->state]); 
1990/0227    
		for(i=0; i<6; i++){ 
1992/0814/sys/src/9/port/devproc.c:424,4301992/0824/sys/src/9/port/devproc.c:428,435
1991/1110    
			pxu = (User*)b; 
1991/1111    
			hi = offset+n; 
			/* Check for floating point registers */ 
			if(offset >= (ulong)&u->fpsave && hi <= (ulong)&u->fpsave+sizeof(FPsave)){ 
1992/0824    
			if(offset >= (ulong)&u->fpsave && 
			   hi <= (ulong)&u->fpsave+sizeof(FPsave)){ 
1991/1111    
				memmove(b+(offset-USERADDR), a, n); 
				break; 
			} 
1992/0814/sys/src/9/port/devproc.c:598,6061992/0824/sys/src/9/port/devproc.c:603,611
1991/1110    
int 
1991/1109    
procctlmemio(Proc *p, ulong offset, int n, void *va, int read) 
{ 
1992/0824    
	KMap *k; 
1991/1113    
	Pte *pte; 
1991/1109    
	Page *pg; 
	KMap *k; 
1991/1110    
	Segment *s; 
1992/0423    
	ulong soff, l; 
1991/1109    
	char *a = va, *b; 
1992/0814/sys/src/9/port/devproc.c:660,6671992/0824/sys/src/9/port/devproc.c:665,672
1991/1110    
Segment * 
txt2data(Proc *p, Segment *s) 
{ 
	Segment *ps; 
	int i; 
1992/0824    
	Segment *ps; 
1991/1110    
 
	ps = newseg(SG_DATA, s->base, s->size); 
	ps->image = s->image; 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)