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

1990/1212/port/proc.c (diff list | history)

1990/1211/sys/src/9/port/proc.c:59,651990/1212/sys/src/9/port/proc.c:59,64 (short | long | prev | next)
Move unusepage out of sched (deadlock BUG FIX). Rename save, restore to procsave, procrestore. Set p->kp for kprocs.
rsc Mon Mar 20 17:14:06 2006
1990/0227    
		else if(p->state == Moribund){ 
			p->pid = 0; 
			unlock(&p->debug); 
1990/0801    
			unusepage(p->upage, 1); 
1990/0227    
			p->upage->ref--; 
			/* procalloc already locked */ 
			p->qnext = procalloc.free; 
1990/1211/sys/src/9/port/proc.c:83,951990/1212/sys/src/9/port/proc.c:82,94
1990/0227    
 
	if(u){ 
		splhi(); 
1990/1211    
		save(procstate, sizeof(procstate)); 
1990/1212    
		procsave(procstate, sizeof(procstate)); 
1990/0227    
		if(setlabel(&u->p->sched)){	/* woke up */ 
			p = u->p; 
			p->state = Running; 
			p->mach = m; 
			m->proc = p; 
1990/1211    
			restore(p, procstate); 
1990/1212    
			procrestore(p, procstate); 
1990/0227    
			spllo(); 
			return; 
		} 
1990/1211/sys/src/9/port/proc.c:481,4861990/1212/sys/src/9/port/proc.c:480,486
1990/03081    
 
1990/0227    
	lock(&procalloc);	/* sched() can't do this */ 
1990/03081    
	lock(&c->debug);	/* sched() can't do this */ 
1990/1212    
	unusepage(c->upage, 1);	/* sched() can't do this (it locks) */ 
1990/03081    
	c->state = Moribund; 
1990/0227    
	sched();	/* never returns */ 
} 
1990/1211/sys/src/9/port/proc.c:567,5721990/1212/sys/src/9/port/proc.c:567,573
1990/0227    
	 * Kernel stack 
	 */ 
	p = newproc(); 
1990/1212    
	p->kp = 1; 
1990/0227    
	p->upage = newpage(1, 0, USERADDR|(p->pid&0xFFFF)); 
1990/0617    
	k = kmap(p->upage); 
	upa = VA(k); 


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