~kris/9p

9hist

839973a485a7954e4696455119414256dbea361a — David du Colombier 34 years ago 957ee47
Plan 9 from Bell Labs 1992-02-25
3 files changed, 23 insertions(+), 4 deletions(-)

M gnot/devport.c
M port/devroot.c
M port/segment.c
M gnot/devport.c => gnot/devport.c +13 -0
@@ 8,13 8,18 @@

#include	"devtab.h"

#define	ROMADDR	0x40000000
#define	ROMSIZE	((256*1024)/8)

enum {
	Qdir,
	Qdata,
	Qrom
};

Dirtab portdir[]={
	"data",		{Qdata},	0,	0666,
	"rom",		{Qrom},	ROMSIZE,	0444,
};

#define	NPORT	(sizeof portdir/sizeof(Dirtab))


@@ 132,6 137,14 @@ portread(Chan *c, char *a, long n, ulong offset)
		}
		P_qunlock(s);
		break;
	case Qrom:
		if(offset >= ROMSIZE)
			return 0;
		if(offset+n > ROMSIZE)
			n = ROMSIZE - offset;
		memmove(a, ((char*)ROMADDR)+offset, n);
		return n;
		break;
	default:
		panic("portread");
	}

M port/devroot.c => port/devroot.c +6 -2
@@ 45,12 45,14 @@ int	nroot;
int
rootgen(Chan *c, Dirtab *tab, int ntab, int i, Dir *dp)
{
	if(tab==0 || i>=ntab)
	if(i >= nroot)
		return -1;

	if(i < NROOT)
		tab += i;
		tab = &rootdir[i];
	else
		tab = rootmap[i - NROOT];

	devdir(c, tab->qid, tab->name, tab->length, eve, tab->perm, dp);
	return 1;
}


@@ 92,6 94,8 @@ rootwalk(Chan *c, char *name)
		c->qid.path = Qdir|CHDIR;
		return 1;
	}
	if((c->qid.path & ~CHDIR) != Qdir)
		error(Enonexist);
	return devwalk(c, name, rootdir, nroot, rootgen);
}


M port/segment.c => port/segment.c +4 -2
@@ 274,7 274,9 @@ imagereclaim(void)
	for(;;) {
		lock(&palloc);
		for(p = palloc.head; p; p = p->next)
			if(p->image && p->ref == 0 && p->image != &swapimage)
			if(p->image)
			if(p->ref == 0)
			if(p->image != &swapimage)
				break;

		unlock(&palloc);


@@ 282,7 284,7 @@ imagereclaim(void)
			break;

		lockpage(p);
		if(p->ref == 0 && p->image != &swapimage)
		if(p->ref == 0)
			uncachepage(p);
		unlockpage(p);
	}