~kris/9p

9hist

d126254a4f0f4d257ed191f9230352ce664f6015 — David du Colombier 27 years ago cc5f512
Plan 9 from Bell Labs 1999-01-12
4 files changed, 21 insertions(+), 30 deletions(-)

M pc/archgeneric.c
M pc/ether79c970.c
M port/fault.c
M port/swap.c
M pc/archgeneric.c => pc/archgeneric.c +1 -1
@@ 201,7 201,7 @@ archinit(void)
	if(X86FAMILY(m->cpuidax) == 3 || conf.nmach > 1)
		conf.copymode = 1;

	if(X86FAMILY(m->cpuidax) == 6 /*&& conf.nmach > 1*/)
	if(X86FAMILY(m->cpuidax) >= 5)
		coherence = wbflush;
}


M pc/ether79c970.c => pc/ether79c970.c +16 -3
@@ 132,6 132,10 @@ typedef struct Ctlr {
	ulong	lcol;
	ulong	uflo;
	ulong	txbuff;

	ulong	merr;			/* bobf is such a whiner */
	ulong	miss;
	ulong	babl;
} Ctlr;

#define csr32r(c, r)	(inl((c)->port+(r)))


@@ 179,7 183,10 @@ ifstat(Ether* ether, void* a, long n, ulong offset)
	len += snprint(p+len, READSTR-len, "Lcar: %ld\n", ctlr->lcar);
	len += snprint(p+len, READSTR-len, "Lcol: %ld\n", ctlr->lcol);
	len += snprint(p+len, READSTR-len, "Uflo: %ld\n", ctlr->uflo);
	snprint(p+len, READSTR-len, "Txbuff: %ld\n", ctlr->txbuff);
	len += snprint(p+len, READSTR-len, "Txbuff: %ld\n", ctlr->txbuff);
	len += snprint(p+len, READSTR-len, "Merr: %ld\n", ctlr->merr);
	len += snprint(p+len, READSTR-len, "Miss: %ld\n", ctlr->miss);
	snprint(p+len, READSTR-len, "Babl: %ld\n", ctlr->babl);

	n = readstr(offset, a, n, p);
	free(p);


@@ 326,8 333,14 @@ interrupt(Ureg*, void* arg)
intrloop:
	csr0 = csr32r(ctlr, Rdp) & 0xFFFF;
	csr32w(ctlr, Rdp, Babl|Cerr|Miss|Merr|Rint|Tint|Iena);
	if(csr0 & (Babl|Miss|Merr))
		print("#l%d: csr0 = 0x%uX\n", ether->ctlrno, csr0);
	if(csr0 & Merr)
		ctlr->merr++;
	if(csr0 & Miss)
		ctlr->miss++;
	if(csr0 & Babl)
		ctlr->babl++;
	//if(csr0 & (Babl|Miss|Merr))
	//	print("#l%d: csr0 = 0x%uX\n", ether->ctlrno, csr0);
	if(!(csr0 & (Rint|Tint)))
		return;


M port/fault.c => port/fault.c +4 -22
@@ 87,21 87,6 @@ fixfault(Segment *s, ulong addr, int read, int doputmmu)
		(*pg)->modref = PG_REF;
		break;

	case SG_SHDATA:			/* Shared data */
	shared:
		if(pagedout(*pg))
			pio(s, addr, soff, pg);

		lkp = *pg;
		lock(lkp);

		/* save a copy of the original for the image cache */
		if(lkp->image)
			duppage(lkp);

		unlock(lkp);
		goto done;

	case SG_BSS:
	case SG_SHARED:			/* Zero fill on demand */
	case SG_STACK:


@@ 117,13 102,11 @@ fixfault(Segment *s, ulong addr, int read, int doputmmu)

			*pg = new;
		}
		if(type == SG_SHARED)
			goto shared;

		goto notshared;
		goto common;

	case SG_DATA:
	notshared:			/* Demand load/pagein/copy on write */
	case SG_SHDATA:
	common:			/* Demand load/pagein/copy on write */
		if(pagedout(*pg))
			pio(s, addr, soff, pg);



@@ 135,6 118,7 @@ fixfault(Segment *s, ulong addr, int read, int doputmmu)

		lkp = *pg;
		lock(lkp);

		if(lkp->image == &swapimage)
			ref = lkp->ref + swapcount(lkp->daddr);
		else


@@ 155,7 139,6 @@ fixfault(Segment *s, ulong addr, int read, int doputmmu)

			unlock(lkp);
		}
	done:
		mmuphys = PPN((*pg)->pa) | PTEWRITE|PTEVALID;
		(*pg)->modref = PG_MOD|PG_REF;
		break;


@@ 289,7 272,6 @@ retry:
				putpage(new);
				goto done;
			} else {
print("!");
				/* another process and the pager got in */
				putpage(new);
				goto retry;

M port/swap.c => port/swap.c +0 -4
@@ 338,14 338,12 @@ executeio(void)
		if(ioptr > conf.nswppo)
			panic("executeio: ioptr %d > %d\n", ioptr, conf.nswppo);
		out = iolist[i];
		up->psstate = "I/Okm";
		k = kmap(out);
		kaddr = (char*)VA(k);

		if(waserror())
			panic("executeio: page out I/O error");

		up->psstate = "I/Owr";
		n = devtab[c->type]->write(c, kaddr, BY2PG, out->daddr);
		if(n != BY2PG)
			nexterror();


@@ 354,11 352,9 @@ executeio(void)
		poperror();

		/* Free up the page after I/O */
		up->psstate = "I/Odec";
		lock(out);
		out->ref--;
		unlock(out);
		up->psstate = "I/Oput";
		putpage(out);
	}
	ioptr = 0;