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

1990/0403/port/sturp.c (diff list | history)

1990/0331/sys/src/9/port/sturp.c:207,2121990/0403/sys/src/9/port/sturp.c:207,215 (short | long | prev | next)
1990/0312    
	 *  kill off the kernel process 
	 */ 
	wakeup(&up->rq->r); 
1990/0403    
 
	if(up->kstarted == 0) 
		up->state = 0; 
1990/0227    
} 
 
/* 
1990/0331/sys/src/9/port/sturp.c:253,2591990/0403/sys/src/9/port/sturp.c:256,262
1990/0227    
	/* 
1990/0312    
	 *  take care of any data 
1990/0227    
	 */ 
1990/0312    
	if(BLEN(bp)>0 && q->next->len<Streamhi) 
1990/0403    
	if(BLEN(bp)>0 && !QFULL(q->next)) 
1990/0227    
		PUTNEXT(q, bp); 
	else 
		freeb(bp); 
1990/0331/sys/src/9/port/sturp.c:311,3171990/0403/sys/src/9/port/sturp.c:314,320
1990/0227    
	case SEQ+4: case SEQ+5: case SEQ+6: case SEQ+7: 
1990/0321    
		qlock(&up->ack); 
1990/0312    
		i = ctl & Nmask; 
		if(q->next->len < Streamhi) 
1990/0403    
		if(!QFULL(q->next)) 
1990/0312    
			sendctl(up, up->lastecho = ECHO+i); 
		up->iseq = i; 
1990/0321    
		qunlock(&up->ack); 
1990/0331/sys/src/9/port/sturp.c:479,4851990/0403/sys/src/9/port/sturp.c:482,488
1990/0227    
		 */ 
1990/0321    
		qlock(&up->ack); 
1990/0312    
		up->iseq = i; 
1990/0321    
		if(q->next->len < Streamhi) 
1990/0403    
		if(!QFULL(q->next)) 
1990/0321    
			sendctl(up, up->lastecho = ECHO|i); 
		qunlock(&up->ack); 
1990/0227    
		break; 
1990/0331/sys/src/9/port/sturp.c:572,5781990/0403/sys/src/9/port/sturp.c:575,583
1990/0312    
	 *  fill the transmit buffers 
1990/0227    
	 */ 
1990/0312    
	q = up->wq; 
	for(bp = getq(q); bp && up->xb[up->nxb]==0; up->nxb = NEXT(up->nxb)){ 
1990/0403    
	for(bp = getq(q); q->first && up->xb[up->nxb]==0; up->nxb = NEXT(up->nxb)){ 
		if(bp == 0) 
			bp = getq(q); 
1990/0312    
		if(BLEN(bp) > up->maxblock){ 
			nbp = up->xb[up->nxb] = allocb(0); 
			nbp->rptr = bp->rptr; 
1990/0331/sys/src/9/port/sturp.c:579,5851990/0403/sys/src/9/port/sturp.c:584,590
1990/0312    
			nbp->wptr = bp->rptr = bp->rptr + up->maxblock; 
		} else { 
			up->xb[up->nxb] = bp; 
			bp = getq(q); 
1990/0403    
			bp = 0; 
1990/0227    
		} 
	} 
1990/0312    
	if(bp) 
1990/0331/sys/src/9/port/sturp.c:622,6281990/0403/sys/src/9/port/sturp.c:627,633
1990/0227    
{ 
1990/0312    
	Block *bp; 
1990/0227    
 
1990/0312    
	if(up->wq->next->len > Streamhi) 
1990/0403    
	if(QFULL(up->wq->next)) 
1990/0227    
		return; 
1990/0312    
	bp = allocb(1); 
	bp->wptr = bp->lim; 
1990/0331/sys/src/9/port/sturp.c:658,6641990/0403/sys/src/9/port/sturp.c:663,669
1990/0321    
	/* 
	 *  check the precondition for acking 
	 */ 
	if(up->rq->next->len>=Streamhi || (up->lastecho&Nmask)==up->iseq) 
1990/0403    
	if(QFULL(up->rq->next) || (up->lastecho&Nmask)==up->iseq) 
1990/0321    
		return; 
 
	if(!canqlock(&up->ack)) 
1990/0331/sys/src/9/port/sturp.c:667,6731990/0403/sys/src/9/port/sturp.c:672,678
1990/0321    
	/* 
	 *  check again now that we've locked 
	 */ 
	if(up->rq->next->len>=Streamhi || (up->lastecho&Nmask)==up->iseq){ 
1990/0403    
	if(QFULL(up->rq->next) || (up->lastecho&Nmask)==up->iseq){ 
1990/0321    
		qunlock(&up->ack); 
		return; 
	} 
1990/0331/sys/src/9/port/sturp.c:689,6951990/0403/sys/src/9/port/sturp.c:694,700
1990/0312    
	int n; 
1990/0227    
 
1990/0312    
	up->timer = NOW + MSrexmit; 
	if(up->wq->next->len > Streamhi) 
1990/0403    
	if(QFULL(up->wq->next)) 
1990/0312    
		return; 
 
	/* 
1990/0331/sys/src/9/port/sturp.c:804,8111990/0403/sys/src/9/port/sturp.c:809,814
1990/0227    
	up->maxblock = window/4; 
	if(up->maxblock < 64) 
		up->maxblock = 64; 
	if(up->maxblock > Streamhi/4) 
		up->maxblock = Streamhi/4; 
1990/0312    
	up->maxblock -= 4; 
	up->maxout = 3; 
1990/0227    
 
1990/0331/sys/src/9/port/sturp.c:870,8751990/0403/sys/src/9/port/sturp.c:873,884
1990/0312    
 
	up = (Urp *)arg; 
 
1990/0403    
	if(waserror()){ 
		up->state = 0; 
		up->kstarted = 0; 
		wakeup(&up->r); 
		return; 
	} 
1990/0312    
	for(;;){ 
		if(up->state & (HUNGUP|CLOSING)){ 
			if(isflushed(up)) 
1990/0331/sys/src/9/port/sturp.c:881,8861990/0403/sys/src/9/port/sturp.c:890,895
1990/0312    
		output(up); 
		tsleep(&up->rq->r, todo, up, MSrexmit/2); 
	} 
	up->kstarted = 0; 
	up->state = 0; 
1990/0403    
	up->kstarted = 0; 
1990/0227    
} 


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