~kris/9p

9hist

e00228db899e3b5349686b9b6716f90754068c1e — David du Colombier 28 years ago 478fa39
Plan 9 from Bell Labs 1998-09-24
6 files changed, 71 insertions(+), 13 deletions(-)

M ip/devip.c
M ip/il.c
M ip/ip.h
M ip/rudp.c
M ip/tcp.c
M pc/memory.c
M ip/devip.c => ip/devip.c +1 -0
@@ 250,6 250,7 @@ ipgetfs(int dev)
		netloginit(f);
		for(i = 0; ipprotoinit[i]; i++)
			ipprotoinit[i](f);
		f->dev = dev;
		ipfs[dev] = f;
	}
	qunlock(&fslock);

M ip/il.c => ip/il.c +18 -2
@@ 136,6 136,10 @@ struct Ilpriv
	ulong		dupb;

	Rendez		ilr;

	/* keeping track of the ack kproc */
	int	ackprocstarted;
	QLock	apl;
};

/* Always Acktime < Fasttime < Slowtime << Ackkeepalive */


@@ 385,8 389,6 @@ ilinit(Fs *f)
	il->nc = Nchans;
	il->ptclsize = sizeof(Ilcb);
	Fsproto(f, il);

	kproc("ilack", ilackproc, il);
}

void


@@ 1083,6 1085,20 @@ ilstart(Conv *c, int type, int window)
{
	char *e;
	Ilcb *ic;
	Ilpriv *ipriv;
	char kpname[NAMELEN];

	ipriv = c->p->priv;

	if(ipriv->ackprocstarted == 0){
		qlock(&ipriv->apl);
		if(ipriv->ackprocstarted == 0){
			sprint(kpname, "#I%dilack", c->p->f->dev);
			kproc(kpname, ilackproc, c->p);
			ipriv->ackprocstarted = 1;
		}
		qunlock(&ipriv->apl);
	}

	ic = (Ilcb*)c->ptcl;
	ic->conv = c;

M ip/ip.h => ip/ip.h +1 -0
@@ 240,6 240,7 @@ struct IProuter {
struct Fs
{
	RWlock;
	int	dev;

	int	np;
	Proto*	p[Maxproto+1];		/* list of supported protocols */

M ip/rudp.c => ip/rudp.c +23 -3
@@ 152,6 152,9 @@ struct Rudppriv
	ulong	rxmits;			/* # of retransmissions */
	ulong	orders;			/* # of out of order pkts */

	/* keeping track of the ack kproc */
	int	ackprocstarted;
	QLock	apl;
};




@@ 184,11 187,30 @@ void	relackq(Reliable *, Block *);
void	relhangup(Conv *, Reliable *);
void	relrexmit(Conv *, Reliable *);

static void
rudpstartackproc(Proto *rudp)
{
	Rudppriv *rpriv;
	char kpname[NAMELEN];

	rpriv = rudp->priv;
	if(rpriv->ackprocstarted == 0){
		qlock(&rpriv->apl);
		if(rpriv->ackprocstarted == 0){
			sprint(kpname, "#I%drudpack", rudp->f->dev);
			kproc(kpname, relackproc, rudp);
			rpriv->ackprocstarted = 1;
		}
		qunlock(&rpriv->apl);
	}
}

static char*
rudpconnect(Conv *c, char **argv, int argc)
{
	char *e;

	rudpstartackproc(c->p);
	e = Fsstdconnect(c, argv, argc);
	Fsconnected(c, e);



@@ 217,6 239,7 @@ rudpannounce(Conv *c, char** argv, int argc)
{
	char *e;

	rudpstartackproc(c->p);
	e = Fsstdannounce(c, argv, argc);
	if(e != nil)
		return e;


@@ 644,9 667,6 @@ rudpinit(Fs *fs)
	rudp->ptclsize = sizeof(Rudpcb);

	Fsproto(fs, rudp);

	kproc("relackproc", relackproc, rudp);
	
}

/*********************************************/

M ip/tcp.c => ip/tcp.c +14 -2
@@ 219,6 219,9 @@ struct Tcppriv
	ulong		lenerr;			/* short packet */
	ulong		order;			/* out of order */

	/* for keeping track of tcpackproc */
	int	ackprocstarted;
	QLock	apl;
};

void	addreseq(Tcpctl*, Tcp*, Block*, ushort);


@@ 622,9 625,20 @@ tcpstart(Conv *s, int mode, ushort window)
{
	Tcpctl *tcb;
	Tcppriv *tpriv;
	char kpname[NAMELEN];

	tpriv = s->p->priv;

	if(tpriv->ackprocstarted == 0){
		qlock(&tpriv->apl);
		if(tpriv->ackprocstarted == 0){
			sprint(kpname, "#I%dtcpack", s->p->f->dev);
			kproc(kpname, tcpackproc, s->p);
			tpriv->ackprocstarted = 1;
		}
		qunlock(&tpriv->apl);
	}

	tcb = (Tcpctl*)s->ptcl;

	inittcpctl(s);


@@ 2038,6 2052,4 @@ tcpinit(Fs *fs)
	tpriv->tstats.tcpMaxConn = Nchans;

	Fsproto(fs, tcp);

	kproc("tcpack", tcpackproc, tcp);
}

M pc/memory.c => pc/memory.c +14 -6
@@ 503,17 503,25 @@ umbrwfree(ulong addr, int size)
}

ulong
upamalloc(ulong addr, int size, int align)
upamalloc(ulong pa, int size, int align)
{
	ulong a, ae;

	if(a = mapalloc(&xrmapupa, addr, size, align))
	if(a = mapalloc(&xrmapupa, pa, size, align))
		return a;

	if((a = mapalloc(&rmapupa, addr, size, align)) == 0)
	if((a = mapalloc(&rmapupa, pa, size, align)) == 0){
		memdebug();
		return 0;
	}

	ae = mmukmap(a, 0, size);
	/*
	 * Upamalloc is a request to map a range of physical addresses.
	 * Therefore, if pa is 0 mapalloc will choose the base address.
	 * Note, however, mmukmap is always asked to give a 1-to-1 mapping
	 * of va to pa.
	 */
	ae = mmukmap(a, a, size);

	/*
	 * Should check here that it was all delivered


@@ 528,7 536,7 @@ upamalloc(ulong addr, int size, int align)
}

void
upafree(ulong addr, int size)
upafree(ulong pa, int size)
{
	mapfree(&xrmapupa, addr, size);
	mapfree(&xrmapupa, pa, size);
}