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

1990/0614/port/devproc.c (diff list | history)

1990/0424/sys/src/9/port/devproc.c:147,1611990/0614/sys/src/9/port/devproc.c:147,158 (short | long | prev | next)
1990/0227    
	case Qnote: 
		break; 
	case Qdir: 
1990/0614    
	case Qmem: 
1990/0227    
	case Qproc: 
	case Qstatus: 
1990/0424    
		if(omode!=OREAD) 
			error(0, Eperm); 
		break; 
	case Qmem: 
1990/0227    
		if(omode!=OREAD) 
			error(0, Eperm); 
		break; 
	default: 
		pprint("unknown qid in devopen\n"); 
		error(0, Egreg); 
1990/0424/sys/src/9/port/devproc.c:204,2091990/0614/sys/src/9/port/devproc.c:201,208
1990/0227    
	Seg *s; 
	Orig *o; 
	Page *pg; 
1990/0614    
	KMap *k; 
	PTE *pte, *opte; 
1990/0227    
	int i; 
	long l; 
	long pid; 
1990/0424/sys/src/9/port/devproc.c:240,2531990/0614/sys/src/9/port/devproc.c:239,263
1990/0227    
				unlock(o); 
				error(0, Egreg); 
			} 
			pg = o->pte[(c->offset-o->va)>>PGSHIFT].page; 
1990/0614    
			pte = &o->pte[(c->offset-o->va)>>PGSHIFT]; 
			if(s->mod){ 
				opte = pte; 
				while(pte = pte->nextmod)	/* assign = */ 
					if(pte->proc == p) 
						break; 
				if(pte == 0) 
					pte = opte; 
			} 
			pg = pte->page; 
1990/0227    
			unlock(o); 
			if(pg == 0){ 
				pprint("nonresident page (complain to rob)\n"); 
1990/0614    
				pprint("nonresident page addr %lux (complain to rob)\n", c->offset); 
1990/0227    
				memset(a, 0, n); 
			}else{ 
				b = (char*)(pg->pa|KZERO); 
1990/0614    
				k = kmap(pg); 
				b = (char*)VA(k); 
1990/0227    
				memcpy(a, b+(c->offset&(BY2PG-1)), n); 
1990/0614    
				kunmap(k); 
1990/0227    
			} 
			return n; 
		} 
1990/0424/sys/src/9/port/devproc.c:259,2731990/0614/sys/src/9/port/devproc.c:269,285
1990/0227    
			pg = p->upage; 
			if(pg==0 || (p->pid&PIDMASK)!=PID(c->qid)) 
				error(0, Eprocdied); 
			b = (char*)(pg->pa|KZERO); 
1990/0614    
			k = kmap(pg); 
			b = (char*)VA(k); 
1990/0227    
			memcpy(a, b+(c->offset-USERADDR), n); 
1990/0614    
			kunmap(k); 
1990/0227    
			return n; 
		} 
 
		/* kernel memory.  BUG: shouldn't be so easygoing. BUG: mem mapping? */ 
		if(c->offset>=KZERO && c->offset<KZERO+conf.npage*BY2PG){ 
			if(c->offset+n > KZERO+conf.npage*BY2PG) 
				n = KZERO+conf.npage*BY2PG - c->offset; 
1990/0614    
		if(c->offset>=KZERO && c->offset<KZERO+conf.npage0*BY2PG){ 
			if(c->offset+n > KZERO+conf.npage0*BY2PG) 
				n = KZERO+conf.npage0*BY2PG - c->offset; 
1990/0227    
			memcpy(a, (char*)c->offset, n); 
			return n; 
		} 
1990/0424/sys/src/9/port/devproc.c:282,2891990/0614/sys/src/9/port/devproc.c:294,303
1990/0227    
		} 
		if((p->pid&PIDMASK) != PID(c->qid)) 
			error(0, Eprocdied); 
		up = (User*)(p->upage->pa|KZERO); 
1990/0614    
		k = kmap(p->upage); 
		up = (User*)VA(k); 
1990/0227    
		if(up->p != p){ 
1990/0614    
			kunmap(k); 
1990/0227    
			pprint("note read u/p mismatch"); 
			error(0, Egreg); 
		} 
1990/0424/sys/src/9/port/devproc.c:297,3021990/0614/sys/src/9/port/devproc.c:311,317
1990/0227    
			memcpy(&up->note[0], &up->note[1], up->nnote*sizeof(Note)); 
			n = ERRLEN; 
		} 
1990/0614    
		kunmap(k); 
1990/0227    
		unlock(&p->debug); 
		return n; 
 
1990/0424/sys/src/9/port/devproc.c:318,3241990/0614/sys/src/9/port/devproc.c:333,339
1990/0227    
			l = p->time[i]; 
			if(i == TReal) 
				l = MACHP(0)->ticks - l; 
			l *= MS2HZ; 
1990/0614    
			l = TK2MS(l); 
1990/0227    
			readnum(0, statbuf+2*NAMELEN+12+NUMSIZE*i, NUMSIZE, l, NUMSIZE); 
		} 
		memcpy(a, statbuf+c->offset, n); 
1990/0424/sys/src/9/port/devproc.c:333,3381990/0614/sys/src/9/port/devproc.c:348,354
1990/0227    
{ 
	Proc *p; 
	User *up; 
1990/0614    
	KMap *k; 
1990/0227    
	char buf[ERRLEN]; 
 
	if(c->qid & CHDIR) 
1990/0424/sys/src/9/port/devproc.c:355,3651990/0614/sys/src/9/port/devproc.c:371,384
1990/0227    
			error(0, Ebadctl); 
		break; 
	case Qnote: 
		up = (User*)(p->upage->pa|KZERO); 
1990/0614    
		k = kmap(p->upage); 
		up = (User*)VA(k); 
1990/0227    
		if(up->p != p){ 
1990/0614    
			kunmap(k); 
1990/0227    
			pprint("note write u/p mismatch"); 
			error(0, Egreg); 
		} 
1990/0614    
		kunmap(k); 
1990/0227    
		if(n >= ERRLEN-1) 
			error(0, Etoobig); 
		if(n>=4 && strncmp(va, "sys:", 4)==0) 


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