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

1994/0612/port/devproc.c (diff list | history)

1994/0409/sys/src/9/port/devproc.c:23,291994/0612/sys/src/9/port/devproc.c:23,28 (short | long | prev | next)
1993/0818    
	Qregs, 
1991/0705    
	Qsegment, 
1990/0227    
	Qstatus, 
1993/1201    
	Qcounters, 
1990/0227    
	Qtext, 
1993/0309    
	Qwait, 
1990/0227    
}; 
1994/0409/sys/src/9/port/devproc.c:31,371994/0612/sys/src/9/port/devproc.c:30,35
1992/0814    
#define	STATSIZE	(2*NAMELEN+12+7*12) 
1992/0824    
Dirtab procdir[] = 
{ 
1993/1201    
	"counters",	{Qcounters},	0,			0444, 
1991/1109    
	"ctl",		{Qctl},		0,			0000, 
1993/0818    
	"fpregs",	{Qfpregs},	sizeof(FPsave),		0000, 
1994/0331    
	"kregs",	{Qkregs},	sizeof(Ureg),		0000, 
1994/0409/sys/src/9/port/devproc.c:73,791994/0612/sys/src/9/port/devproc.c:71,76
1992/0824    
Segment* txt2data(Proc*, Segment*); 
1991/1110    
int	procstopped(void*); 
1993/0501    
void	mntscan(Mntwalk*); 
1993/1201    
ulong	readcounters(Proc*, ulong, void*, int); 
1991/1109    
 
1990/0227    
int 
procgen(Chan *c, Dirtab *tab, int ntab, int s, Dir *dp) 
1994/0409/sys/src/9/port/devproc.c:121,1311994/0612/sys/src/9/port/devproc.c:118,123
1990/0227    
void 
procinit(void) 
{ 
1993/1201    
	/* standard counters - this ordering is important */ 
	proccounter("sched"); 
	proccounter("fault"); 
	proccounter("tlbmiss"); 
                 
1990/0227    
	if(conf.nproc >= (1<<(16-QSHIFT))-1) 
		print("warning: too many procs for devproc\n"); 
} 
1994/0409/sys/src/9/port/devproc.c:196,2021994/0612/sys/src/9/port/devproc.c:188,193
1993/0818    
			error(Eperm); 
		break; 
 
1993/1201    
	case Qcounters: 
1990/0227    
	case Qctl: 
	case Qnote: 
1993/1018    
	case Qnoteid: 
1994/0409/sys/src/9/port/devproc.c:375,3831994/0612/sys/src/9/port/devproc.c:366,371
1993/0818    
		memmove(a, rptr+offset, n); 
1990/0227    
		return n; 
 
1993/1201    
	case Qcounters: 
		return readcounters(p, offset, va, n); 
                 
1990/0227    
	case Qstatus: 
1991/0712    
		if(offset >= STATSIZE) 
1990/0227    
			return 0; 
1994/0409/sys/src/9/port/devproc.c:862,9031994/0612/sys/src/9/port/devproc.c:850,853
1992/1104    
	ps->flushme = 1; 
1991/1110    
 
	return ps; 
1993/1201    
} 
                 
static char *counter[Pcounter]; 
int ncounter; 
                 
int 
proccounter(char *name) 
{ 
	if(ncounter >= Pcounter) 
		panic("too many process counters"); 
	counter[ncounter] = name; 
	return ncounter++; 
} 
                 
ulong 
readcounters(Proc *p, ulong offset, void *va, int n) 
{ 
	char *bp; 
	int i, j, m; 
	extern char *sysctab[]; 
                 
1994/0407    
	bp = smalloc((nsyscall+ncounter)*(NAMELEN+8)); 
1993/1201    
	m = 0; 
	for(i = 0; i < Pcounter; i++) 
		if(counter[i]) 
			m += sprint(bp+m, "%s\t%8d\n", counter[i], p->counter[i]); 
	j = 0; 
1994/0407    
	for(i = 0; i < nsyscall; i++) 
1993/1201    
		j += p->syscall[i]; 
	m += sprint(bp+m, "syscall\t%8d\n", j); 
1994/0407    
	for(i = 0; i < nsyscall; i++) 
1993/1201    
		if(p->syscall[i]) 
			m += sprint(bp+m, "%s\t%8d\n", sysctab[i], p->syscall[i]); 
	n = readstr(offset, va, n, bp); 
	free(bp); 
	memset(p->counter, 0, sizeof(p->counter)); 
	memset(p->syscall, 0, sizeof(p->syscall)); 
	return n; 
1990/0227    
} 


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