Browse Source

externup(): an interrupt-safe machp()->externup accessor.
- the race situation is getting a lot better, but
- all remaining machp() accesses still need to be checked.
- at every machp()->, ask yourself: am I splhi?
- if you are not, ask whether it's going to be a problem
if the field value comes from a different cpu than you
currently run on.
- if it is going to be a problem, you should be splhi.
- maybe you should be splhi anyway.

Change-Id: I0d30e5003be08514af96c11f188d736f46f09402

Aki Nyrhinen 8 years ago
parent
commit
b7d5de8f65
100 changed files with 452 additions and 298 deletions
  1. 3 0
      sys/src/9/386/devether.c
  2. 3 1
      sys/src/9/386/devrtc.c
  3. 1 0
      sys/src/9/386/ether8169.c
  4. 1 1
      sys/src/9/386/ether82557.c
  5. 2 2
      sys/src/9/386/ether82563.c
  6. 2 0
      sys/src/9/386/etherigbe.c
  7. 7 4
      sys/src/9/386/etherm10g.c
  8. 3 2
      sys/src/9/386/random.c
  9. 8 3
      sys/src/9/386/sdiahci.c
  10. 1 1
      sys/src/9/386/uarti8250.c
  11. 5 5
      sys/src/9/amd64pv/acore.c
  12. 3 3
      sys/src/9/amd64pv/apic.c
  13. 2 2
      sys/src/9/amd64pv/arch.c
  14. 7 7
      sys/src/9/amd64pv/archk10.c
  15. 1 1
      sys/src/9/amd64pv/asm.c
  16. 2 2
      sys/src/9/amd64pv/devacpi.c
  17. 3 3
      sys/src/9/amd64pv/devarch.c
  18. 12 12
      sys/src/9/amd64pv/devusb.c
  19. 2 2
      sys/src/9/amd64pv/ether82563.c
  20. 12 12
      sys/src/9/amd64pv/fpu.c
  21. 5 5
      sys/src/9/amd64pv/main.c
  22. 15 15
      sys/src/9/amd64pv/mmu.c
  23. 5 5
      sys/src/9/amd64pv/pmcio.c
  24. 1 1
      sys/src/9/amd64pv/qmalloc.c
  25. 5 5
      sys/src/9/amd64pv/syscall.c
  26. 5 5
      sys/src/9/amd64pv/tcore.c
  27. 10 10
      sys/src/9/amd64pv/trap.c
  28. 11 11
      sys/src/9/amd64pv/usbohci.c
  29. 12 12
      sys/src/9/amd64pv/usbuhci.c
  30. 2 1
      sys/src/9/ip/arp.c
  31. 1 0
      sys/src/9/ip/chandial.c
  32. 5 1
      sys/src/9/ip/devip.c
  33. 1 1
      sys/src/9/ip/esp.c
  34. 5 4
      sys/src/9/ip/ethermedium.c
  35. 2 2
      sys/src/9/ip/inferno.c
  36. 1 0
      sys/src/9/ip/ip.c
  37. 6 0
      sys/src/9/ip/ipifc.c
  38. 1 0
      sys/src/9/ip/iproute.c
  39. 1 0
      sys/src/9/ip/ipv6.c
  40. 2 2
      sys/src/9/ip/loopbackmedium.c
  41. 2 2
      sys/src/9/ip/netdevmedium.c
  42. 4 0
      sys/src/9/ip/netlog.c
  43. 2 1
      sys/src/9/ip/rudp.c
  44. 7 1
      sys/src/9/ip/tcp.c
  45. 1 1
      sys/src/9/k10/arch.c
  46. 2 1
      sys/src/9/k10/dat.h
  47. 1 0
      sys/src/9/k10/devacpi.c
  48. 12 2
      sys/src/9/k10/devusb.c
  49. 2 0
      sys/src/9/k10/ether82563.c
  50. 2 1
      sys/src/9/k10/fns.h
  51. 11 11
      sys/src/9/k10/fpu.c
  52. 5 0
      sys/src/9/k10/l64v.S
  53. 3 3
      sys/src/9/k10/main.c
  54. 2 2
      sys/src/9/k10/mmu.c
  55. 1 0
      sys/src/9/k10/pmcio.c
  56. 1 1
      sys/src/9/k10/qmalloc.c
  57. 4 0
      sys/src/9/k10/sdata.c
  58. 5 5
      sys/src/9/k10/syscall.c
  59. 5 4
      sys/src/9/k10/tcore.c
  60. 9 9
      sys/src/9/k10/trap.c
  61. 11 5
      sys/src/9/k10/usbohci.c
  62. 12 6
      sys/src/9/k10/usbuhci.c
  63. 2 1
      sys/src/9/port/alarm.c
  64. 1 1
      sys/src/9/port/allocb.c
  65. 3 0
      sys/src/9/port/cache.c
  66. 12 8
      sys/src/9/port/chan.c
  67. 5 2
      sys/src/9/port/cpu_buffer.c
  68. 4 2
      sys/src/9/port/dev.c
  69. 25 8
      sys/src/9/port/devaoe.c
  70. 4 4
      sys/src/9/port/devcec.c
  71. 5 5
      sys/src/9/port/devcmd.c
  72. 4 2
      sys/src/9/port/devcons.c
  73. 1 1
      sys/src/9/port/devdup.c
  74. 4 2
      sys/src/9/port/devenv.c
  75. 2 1
      sys/src/9/port/devkexec.c
  76. 13 7
      sys/src/9/port/devmnt.c
  77. 2 2
      sys/src/9/port/devpci.c
  78. 2 2
      sys/src/9/port/devpipe.c
  79. 4 3
      sys/src/9/port/devpmc.c
  80. 12 8
      sys/src/9/port/devproc.c
  81. 1 1
      sys/src/9/port/devregress.c
  82. 8 4
      sys/src/9/port/devsd.c
  83. 9 3
      sys/src/9/port/devsegment.c
  84. 7 4
      sys/src/9/port/devsrv.c
  85. 1 0
      sys/src/9/port/devtab.c
  86. 4 2
      sys/src/9/port/devtrace.c
  87. 3 0
      sys/src/9/port/devuart.c
  88. 3 0
      sys/src/9/port/devzp.c
  89. 5 5
      sys/src/9/port/edf.c
  90. 1 0
      sys/src/9/port/elf64.c
  91. 5 5
      sys/src/9/port/fault.c
  92. 1 0
      sys/src/9/port/image.c
  93. 1 1
      sys/src/9/port/kdebug.c
  94. 1 1
      sys/src/9/port/kexec.c
  95. 6 5
      sys/src/9/port/netif.c
  96. 1 1
      sys/src/9/port/page.c
  97. 3 2
      sys/src/9/port/pager.c
  98. 2 2
      sys/src/9/port/parse.c
  99. 4 4
      sys/src/9/port/pgrp.c
  100. 1 1
      sys/src/9/port/portclock.c

+ 3 - 0
sys/src/9/386/devether.c

@@ -23,6 +23,7 @@ static Ether *etherxx[MaxEther];
 Chan*
 etherattach(char* spec)
 {
+	Proc *up = externup();
 	uint32_t ctlrno;
 	char *p;
 	Chan *chan;
@@ -252,6 +253,7 @@ etheroq(Ether* ether, Block* bp)
 static int32_t
 etherwrite(Chan* chan, void* buf, int32_t n, int64_t mm)
 {
+	Proc *up = externup();
 	Ether *ether;
 	Block *bp;
 	int nn, onoff;
@@ -301,6 +303,7 @@ etherwrite(Chan* chan, void* buf, int32_t n, int64_t mm)
 static int32_t
 etherbwrite(Chan* chan, Block* bp, int64_t mm)
 {
+	Proc *up = externup();
 	Ether *ether;
 	int32_t n;
 

+ 3 - 1
sys/src/9/386/devrtc.c

@@ -91,7 +91,7 @@ rtcstat(Chan* c, uint8_t* dp, int32_t n)
 static Chan*
 rtcopen(Chan* c, int omode)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	omode = openmode(omode);
 	switch((uint32_t)c->qid.path){
 	case Qrtc:
@@ -185,6 +185,7 @@ rtctime(void)
 static int32_t
 rtcread(Chan* c, void* buf, int32_t n, int64_t off)
 {
+	Proc *up = externup();
 	uint32_t t;
 	char *a, *start;
 	uint32_t offset = off;
@@ -232,6 +233,7 @@ rtcread(Chan* c, void* buf, int32_t n, int64_t off)
 static int32_t
 rtcwrite(Chan* c, void* buf, int32_t n, int64_t off)
 {
+	Proc *up = externup();
 	int t;
 	char *a, *start;
 	Rtc rtc;

+ 1 - 0
sys/src/9/386/ether8169.c

@@ -508,6 +508,7 @@ rtl8169multicast(void* ether, unsigned char *eaddr, int add)
 static int32_t
 rtl8169ifstat(Ether* edev, void* a, int32_t n, uint32_t offset)
 {
+	Proc *up = externup();
 	char *p, *s, *e;
 	Ctlr *ctlr;
 	Dtcc *dtcc;

+ 1 - 1
sys/src/9/386/ether82557.c

@@ -354,7 +354,7 @@ static void txstart(Ether*);
 static void
 watchdog(void* arg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ether *ether;
 	Ctlr *ctlr;
 	//static void txstart(Ether*);

+ 2 - 2
sys/src/9/386/ether82563.c

@@ -696,7 +696,7 @@ static Cmdtab i82563ctlmsg[] = {
 static int32_t
 i82563ctl(Ether* edev, void* buf, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t v;
 	char *p;
 	Ctlr *ctlr;
@@ -1222,7 +1222,7 @@ i82563tproc(void *v)
 static void
 i82563attach(Ether* edev)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Block *bp;
 	Ctlr *ctlr;
 	char name[KNAMELEN];

+ 2 - 0
sys/src/9/386/etherigbe.c

@@ -707,6 +707,7 @@ static Cmdtab igbectlmsg[] = {
 static int32_t
 igbectl(Ether* edev, void* buf, int32_t n)
 {
+	Proc *up = externup();
 	int v;
 	char *p;
 	Ctlr *ctlr;
@@ -1234,6 +1235,7 @@ igberproc(void* arg)
 static void
 igbeattach(Ether* edev)
 {
+	Proc *up = externup();
 	Block *bp;
 	Ctlr *ctlr;
 	char name[KNAMELEN];

+ 7 - 4
sys/src/9/386/etherm10g.c

@@ -485,7 +485,7 @@ prepcmd(uint *cmd, int i)
 uint32_t
 cmd(Ctlr *c, int type, uint64_t data)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t buf[16], i;
 	Cmd *cmd;
 
@@ -525,7 +525,7 @@ cmd(Ctlr *c, int type, uint64_t data)
 uint32_t
 maccmd(Ctlr *c, int type, uint8_t *mac)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t buf[16], i;
 	Cmd *cmd;
 
@@ -571,7 +571,7 @@ enum {
 uint32_t
 dmatestcmd(Ctlr *c, int type, uint64_t addr, int len)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t buf[16], i;
 
 	memset(buf, 0, sizeof buf);
@@ -605,7 +605,7 @@ dmatestcmd(Ctlr *c, int type, uint64_t addr, int len)
 uint32_t
 rdmacmd(Ctlr *c, int on)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t buf[16], i;
 
 	memset(buf, 0, sizeof buf);
@@ -775,6 +775,7 @@ chkfw(Ctlr *c)
 static int
 reset(Ether *e, Ctlr *c)
 {
+	Proc *up = externup();
 	uint32_t i, sz;
 
 	if(waserror()){
@@ -1338,6 +1339,7 @@ m10ginterrupt(Ureg *ureg, void *v)
 static void
 m10gattach(Ether *e)
 {
+	Proc *up = externup();
 	Ctlr *c;
 	char name[12];
 
@@ -1497,6 +1499,7 @@ static Cmdtab ctab[] = {
 static int32_t
 m10gctl(Ether *e, void *v, int32_t n)
 {
+	Proc *up = externup();
 	int i;
 	Cmdbuf *c;
 	Cmdtab *t;

+ 3 - 2
sys/src/9/386/random.c

@@ -50,7 +50,7 @@ rbnotempty(void* v)
 static void
 genrandom(void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	up->basepri = PriNormal;
 	up->priority = up->basepri;
 
@@ -108,7 +108,7 @@ randominit(void)
 uint32_t
 randomread(void *xp, uint32_t n)
 {
-
+	Proc *up = externup();
 	uint8_t *e, *p;
 	uint32_t x;
 
@@ -166,6 +166,7 @@ randomread(void *xp, uint32_t n)
 uint32_t
 urandomread(void *xp, uint32_t n)
 {
+	Proc *up = externup();
 	uint64_t seed[16];
 	uint8_t *e, *p;
 	uint32_t x=0;

+ 8 - 3
sys/src/9/386/sdiahci.c

@@ -267,7 +267,7 @@ dreg(char *s, Aport *p)
 static void
 esleep(int ms)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if(waserror())
 		return;
 	tsleep(&up->sleep, return0, 0, ms);
@@ -286,6 +286,7 @@ ahciclear(void *v)
 static void
 aesleep(Aportm *pm, Asleep *a, int ms)
 {
+	Proc *up = externup();
 	if(waserror())
 		return;
 	tsleep(pm, ahciclear, a, ms);
@@ -380,7 +381,7 @@ setudmamode(Aportc *pc, unsigned char f)
 static void
 asleep(int ms)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if(up == nil)
 		delay(ms);
 	else
@@ -1300,7 +1301,7 @@ portreset:
 static void
 satakproc(void *v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	for(;;){
 		tsleep(&up->sleep, return0, 0, Nms);
@@ -1706,6 +1707,7 @@ flushcache(Drive *d)
 static int
 iariopkt(SDreq *r, Drive *d)
 {
+	Proc *up = externup();
 	int n, count, try, max, flag, task, wormwrite;
 	char *name;
 	unsigned char *cmd, *data;
@@ -1823,6 +1825,7 @@ retry:
 static int
 iario(SDreq *r)
 {
+	Proc *up = externup();
 	int i, n, count, try, max, flag, task;
 	int64_t lba;
 	char *name;
@@ -2223,6 +2226,7 @@ forcemode(Drive *d, char *mode)
 static void
 runsmartable(Drive *d, int i)
 {
+	Proc *up = externup();
 	if(waserror()){
 		qunlock(&d->portm);
 		d->smartrs = 0;
@@ -2270,6 +2274,7 @@ changemedia(SDunit *u)
 static int
 iawctl(SDunit *u, Cmdbuf *cmd)
 {
+	Proc *up = externup();
 	char **f;
 	Ctlr *c;
 	Drive *d;

+ 1 - 1
sys/src/9/386/uarti8250.c

@@ -430,7 +430,7 @@ i8250baud(Uart* uart, int baud)
 static void
 i8250break(Uart* uart, int ms)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlr *ctlr;
 
 	/*

+ 5 - 5
sys/src/9/amd64pv/acore.c

@@ -57,7 +57,7 @@ ACVctl *acvctl[256];
 static void
 testiccfn(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	print("called: %s\n", ( char *)m->icc->data);
 }
 
@@ -87,7 +87,7 @@ testicc(int i)
 static void
 acstackok(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char dummy;
 	char *sstart;
 
@@ -109,7 +109,7 @@ acstackok(void)
 void
 acsched(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	acmmuswitch();
 	for(;;){
 		acstackok();
@@ -127,7 +127,7 @@ acsched(void)
 void
 acmmuswitch(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	extern Page mach0pml4;
 
 	DBG("acmmuswitch mpl4 %#p mach0pml4 %#p m0pml4 %#p\n", machp()->pml4->pa, mach0pml4.pa, sys->machptr[0]->pml4->pa);
@@ -310,7 +310,7 @@ char *rolename[] =
 void
 acmodeset(int mode)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	switch(mode){
 	case NIXAC:
 	case NIXKC:

+ 3 - 3
sys/src/9/amd64pv/apic.c

@@ -118,7 +118,7 @@ apicisr(int vecno)
 void
 apicinit(int apicno, uintmem pa, int isbp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Apic *apic;
 
 	/*
@@ -198,7 +198,7 @@ apictimer(Ureg* ureg, void* v)
 int
 apiconline(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Apic *apic;
 	uint64_t tsc;
 	uint32_t dfr, ver;
@@ -352,7 +352,7 @@ apictimerenab(void)
 void
 apictimerset(uint64_t next)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Mpl pl;
 	Apic *apic;
 	int64_t period;

+ 2 - 2
sys/src/9/amd64pv/arch.c

@@ -87,7 +87,7 @@ procsave(Proc *p)
 static void
 linkproc(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	spllo();
 	up->kpfun(up->kparg);
 	pexit("kproc dying", 0);
@@ -119,7 +119,7 @@ kprocchild(Proc* p, void (*func)(void*), void* arg)
 void
 idlehands(void)
 {
-Proc *up = machp()->externup;
+Proc *up = externup();
 if(sys->nmach <= 1)
 {
 	halt();

+ 7 - 7
sys/src/9/amd64pv/archk10.c

@@ -19,7 +19,7 @@
 static int
 cpuidinit(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t eax, info[4];
 
 	/*
@@ -53,7 +53,7 @@ cpuidinit(void)
 static int
 cpuidinfo(uint32_t eax, uint32_t ecx, uint32_t info[4])
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if(m->ncpuinfos == 0 && cpuidinit() == 0)
 		return 0;
 
@@ -214,7 +214,7 @@ print("\n");*/
 void
 cpuiddump(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	uint32_t info[4];
 
@@ -239,7 +239,7 @@ cpuiddump(void)
 int64_t
 archhz(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int64_t hz;
 	uint32_t info0[4], info1[4];
 
@@ -264,7 +264,7 @@ archhz(void)
 int
 archmmu(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t info[4];
 
 	/*
@@ -389,7 +389,7 @@ archidle(void)
 void
 microdelay(int microsecs)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint64_t r, t;
 
 	r = rdtsc();
@@ -400,7 +400,7 @@ microdelay(int microsecs)
 void
 millidelay(int millisecs)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint64_t r, t;
 
 	r = rdtsc();

+ 1 - 1
sys/src/9/amd64pv/asm.c

@@ -317,7 +317,7 @@ asmwalkalloc(usize size)
 void
 asmmeminit(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i, l;
 	Asm* assem;
 	PTE *pte, *pml4;

+ 2 - 2
sys/src/9/amd64pv/devacpi.c

@@ -846,7 +846,7 @@ acpimblocksize(uintmem addr, int *dom)
 int
 corecolor(int core)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Srat *sl;
 	static int colors[32];
 
@@ -1630,7 +1630,7 @@ acpiread(Chan *c, void *a, int32_t n, int64_t off)
 static int32_t
 acpiwrite(Chan *c, void *a, int32_t n, int64_t off)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Cmdtab *ct;
 	Cmdbuf *cb;
 	Reg *r;

+ 3 - 3
sys/src/9/amd64pv/devarch.c

@@ -525,7 +525,7 @@ void (*coherence)(void) = mfence;
 static int32_t
 cputyperead(Chan* c, void *a, int32_t n, int64_t off)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char buf[512], *s, *e;
 	int i, k;
 
@@ -576,7 +576,7 @@ archreset(void)
 uint64_t
 fastticks(uint64_t* hz)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if(hz != nil)
 		*hz = m->cpuhz;
 	return rdtsc();
@@ -608,7 +608,7 @@ cycles(uint64_t* t)
 void
 delay(int millisecs)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint64_t r, t;
 
 	if(millisecs <= 0)

+ 12 - 12
sys/src/9/amd64pv/devusb.c

@@ -276,7 +276,7 @@ addhcitype(char* t, int (*r)(Hci*))
 static char*
 seprintep(char *s, char *se, Ep *ep, int all)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	static char* dsnames[] = { "config", "enabled", "detached", "reset" };
 	Udev *d;
 	int i;
@@ -410,7 +410,7 @@ putep(Ep *ep)
 static void
 dumpeps(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	static char buf[512];
 	char *s;
@@ -547,7 +547,7 @@ epdataperm(int mode)
 static int
 usbgen(Chan *c, char *l, Dirtab *d, int n, int s, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qid q;
 	Dirtab *dir;
 	int perm;
@@ -835,7 +835,7 @@ usbload(int speed, int maxpkt)
 static Chan*
 usbopen(Chan *c, int omode)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int q;
 	Ep *ep;
 	int mode;
@@ -892,7 +892,7 @@ usbopen(Chan *c, int omode)
 static void
 epclose(Ep *ep)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	qlock(ep);
 	if(waserror()){
 		qunlock(ep);
@@ -909,7 +909,7 @@ epclose(Ep *ep)
 static void
 usbclose(Chan *c)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int q;
 	Ep *ep;
 
@@ -939,7 +939,7 @@ usbclose(Chan *c)
 static int32_t
 ctlread(Chan *c, void *a, int32_t n, int64_t offset)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int q;
 	char *s;
 	char *us;
@@ -1056,7 +1056,7 @@ rhubwrite(Ep *ep, void *a, int32_t n)
 static int32_t
 usbread(Chan *c, void *a, int32_t n, int64_t offset)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int q;
 	Ep *ep;
 	int nr;
@@ -1134,7 +1134,7 @@ setmaxpkt(Ep *ep, char* s)
 static int32_t
 epctl(Ep *ep, Chan *c, void *a, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i, l, mode, nb, tt;
 	char *b, *s;
 	Cmdbuf *cb;
@@ -1348,7 +1348,7 @@ epctl(Ep *ep, Chan *c, void *a, int32_t n)
 static int32_t
 usbctl(void *a, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Cmdtab *ct;
 	Cmdbuf *cb;
 	Ep *ep;
@@ -1388,7 +1388,7 @@ usbctl(void *a, int32_t n)
 static int32_t
 ctlwrite(Chan *c, void *a, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int q;
 	Ep *ep;
 
@@ -1420,7 +1420,7 @@ ctlwrite(Chan *c, void *a, int32_t n)
 static int32_t
 usbwrite(Chan *c, void *a, int32_t n, int64_t off)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int nr, q;
 	Ep *ep;
 

+ 2 - 2
sys/src/9/amd64pv/ether82563.c

@@ -1423,7 +1423,7 @@ i82563tproc(void *v)
 static void
 i82563attach(Ether* edev)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char name[KNAMELEN];
 	Block *bp;
 	Ctlr *ctlr;
@@ -1809,7 +1809,7 @@ static Cmdtab i82563ctlmsg[] = {
 static int32_t
 i82563ctl(Ether *edev, void *buf, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *p;
 	uint32_t v;
 	Ctlr *ctlr;

+ 12 - 12
sys/src/9/amd64pv/fpu.c

@@ -120,7 +120,7 @@ fpudevprocio(Proc* proc, void* a, int32_t n, uintptr_t offset, int write)
 void
 fpunotify(Ureg* u)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/*
 	 * Called when a note is about to be delivered to a
 	 * user process, usually at the end of a system call.
@@ -139,7 +139,7 @@ fpunotify(Ureg* u)
 void
 fpunoted(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/*
 	 * Called from sysnoted() via the machine-dependent
 	 * noted() routine.
@@ -151,7 +151,7 @@ fpunoted(void)
 void
 fpusysrfork(Ureg* u)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/*
 	 * Called early in the non-interruptible path of
 	 * sysrfork() via the machine-dependent syscall() routine.
@@ -169,7 +169,7 @@ fpusysrfork(Ureg* u)
 void
 fpusysrforkchild(Proc* child, Proc* parent)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/*
 	 * Called later in sysrfork() via the machine-dependent
 	 * sysrforkchild() routine.
@@ -266,7 +266,7 @@ acfpusysprocsetup(Proc *p)
 static char*
 fpunote(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint16_t fsw;
 	Fxsave *fpusave;
 	char *cm;
@@ -310,7 +310,7 @@ fpunote(void)
 char*
 xfpuxf(Ureg* ureg, void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t mxcsr;
 	Fxsave *fpusave;
 	char *cm;
@@ -360,7 +360,7 @@ xfpuxf(Ureg* ureg, void* v)
 void
 fpuxf(Ureg *ureg, void *p)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *n;
 
 	n = xfpuxf(ureg, p);
@@ -377,7 +377,7 @@ acfpuxf(Ureg *ureg, void *p)
 static char*
 xfpumf(Ureg* ureg, void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Fxsave *fpusave;
 
 	/*
@@ -414,7 +414,7 @@ xfpumf(Ureg* ureg, void* v)
 void
 fpumf(Ureg *ureg, void *p)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *n;
 
 	n = xfpumf(ureg, p);
@@ -431,7 +431,7 @@ acfpumf(Ureg *ureg, void *p)
 static char*
 xfpunm(Ureg* ureg, void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Fxsave *fpusave;
 
 	/*
@@ -498,7 +498,7 @@ xfpunm(Ureg* ureg, void* v)
 void
 fpunm(Ureg *ureg, void *p)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *n;
 
 	n = xfpunm(ureg, p);
@@ -515,7 +515,7 @@ acfpunm(Ureg *ureg, void *p)
 void
 fpuinit(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint64_t r;
 	Fxsave *fxsave;
 	uint8_t buf[sizeof(Fxsave)+15];

+ 5 - 5
sys/src/9/amd64pv/main.c

@@ -214,7 +214,7 @@ testiccs(void)
 static void
 nixsquids(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Mach *mp;
 	int i;
 	uint64_t now, start;
@@ -341,7 +341,7 @@ void put64(uint64_t v)
 
 void debugtouser(void *va)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uintptr_t uva = (uintptr_t) va;
 	PTE *pte, *pml4;
 
@@ -558,7 +558,7 @@ if (0){	acpiinit(); hi("	acpiinit();\n");}
 void
 init0(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char buf[2*KNAMELEN];
 
 	up->nerrlab = 0;
@@ -636,7 +636,7 @@ bootargs(uintptr_t base)
 void
 userinit(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Proc *p;
 	Segment *s;
 	KMap *k;
@@ -727,7 +727,7 @@ confinit(void)
 static void
 shutdown(int ispanic)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int ms, once;
 
 	lock(&active);

+ 15 - 15
sys/src/9/amd64pv/mmu.c

@@ -31,7 +31,7 @@
 void
 mmuflushtlb(uint64_t u)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 
 	m->tlbpurge++;
 	if(machp()->pml4->daddr){
@@ -44,7 +44,7 @@ mmuflushtlb(uint64_t u)
 void
 mmuflush(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Mpl pl;
 
 	pl = splhi();
@@ -56,7 +56,7 @@ mmuflush(void)
 static void
 mmuptpfree(Proc* proc, int clear)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int l;
 	PTE *pte;
 	Page **last, *page;
@@ -117,7 +117,7 @@ dumpptepg(int lvl, uintptr_t pa)
 void
 dumpmmu(Proc *p)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	Page *pg;
 
@@ -136,7 +136,7 @@ dumpmmu(Proc *p)
 void
 dumpmmuwalk(uint64_t addr)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int l;
 	PTE *pte, *pml4;
 
@@ -206,7 +206,7 @@ mmuptpalloc(void)
 void
 mmuswitch(Proc* proc)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	PTE *pte;
 	Page *page;
 	Mpl pl;
@@ -243,7 +243,7 @@ mmuswitch(Proc* proc)
 void
 mmurelease(Proc* proc)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Page *page, *next;
 
 	mmuptpfree(proc, 0);
@@ -270,7 +270,7 @@ mmurelease(Proc* proc)
 static void
 checkpte(uintmem ppn, void *a)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int l;
 	PTE *pte, *pml4;
 	uint64_t addr;
@@ -315,7 +315,7 @@ Panic:
 static void
 mmuptpcheck(Proc *proc)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int lvl, npgs, i;
 	Page *lp, *p, *pgs[16], *fp;
 	uint idx[16];
@@ -389,7 +389,7 @@ pteflags(uint attr)
 void
 mmuput(uintptr_t va, Page *pg, uint attr)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int lvl, user, x, pgsz;
 	PTE *pte;
 	Page *page, *prev;
@@ -649,7 +649,7 @@ vmapalloc(usize size)
 void*
 vmap(uintptr_t pa, usize size)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uintptr_t va;
 	usize o, sz;
 
@@ -702,7 +702,7 @@ vmap(uintptr_t pa, usize size)
 void
 vunmap(void* v, usize size)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uintptr_t va;
 
 	DBG("vunmap(%#p, %lud)\n", v, size);
@@ -729,7 +729,7 @@ int
 mmuwalk(PTE* pml4, uintptr_t va, int level, PTE** ret,
 	uint64_t (*alloc)(usize))
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int l;
 	uintmem pa;
 	PTE *pte;
@@ -765,7 +765,7 @@ mmuwalk(PTE* pml4, uintptr_t va, int level, PTE** ret,
 uintmem
 mmuphysaddr(uintptr_t va)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int l;
 	PTE *pte;
 	uintmem mask, pa;
@@ -794,7 +794,7 @@ Page mach0pml4;
 void
 mmuinit(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint8_t *p;
 	Page *page;
 	uint64_t o, pa, r, sz;

+ 5 - 5
sys/src/9/amd64pv/pmcio.c

@@ -281,7 +281,7 @@ pmcwclose(PmcWait *w)
 static void
 waitnotstale(Mach *mp, PmcCtr *p)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	PmcWait *w;
 
 	p->stale = 1;
@@ -329,7 +329,7 @@ shouldipi(Mach *mp)
 uint64_t
 pmcgetctr(uint32_t coreno, uint32_t regno)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	PmcCtr *p;
 	Mach *mp;
 	uint64_t v;
@@ -361,7 +361,7 @@ pmcgetctr(uint32_t coreno, uint32_t regno)
 int
 pmcsetctr(uint32_t coreno, uint64_t v, uint32_t regno)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	PmcCtr *p;
 	Mach *mp;
 
@@ -405,7 +405,7 @@ ctl2ctl(PmcCtl *dctl, PmcCtl *sctl)
 int
 pmcsetctl(uint32_t coreno, PmcCtl *pctl, uint32_t regno)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	PmcCtr *p;
 	Mach *mp;
 
@@ -427,7 +427,7 @@ pmcsetctl(uint32_t coreno, PmcCtl *pctl, uint32_t regno)
 int
 pmcgetctl(uint32_t coreno, PmcCtl *pctl, uint32_t regno)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	PmcCtr *p;
 	Mach *mp;
 

+ 1 - 1
sys/src/9/amd64pv/qmalloc.c

@@ -549,7 +549,7 @@ mallocalign(uint32_t nbytes, uint32_t align, int32_t offset, uint32_t span)
 void*
 smalloc(uint32_t size)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	void *v;
 
 	while((v = malloc(size)) == nil)

+ 5 - 5
sys/src/9/amd64pv/syscall.c

@@ -39,7 +39,7 @@ typedef struct {
 void
 noted(Ureg* cur, uintptr_t arg0)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	NFrame *nf;
 	Note note;
 	Ureg *nur;
@@ -129,7 +129,7 @@ noted(Ureg* cur, uintptr_t arg0)
 int
 notify(Ureg* ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int l;
 	Mpl pl;
 	Note note;
@@ -218,7 +218,7 @@ notify(Ureg* ureg)
 void
 noerrorsleft(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 
 	if(up->nerrlab){
@@ -247,7 +247,7 @@ syscall(int badscallnr, Ureg *ureg)
 	a2 = ureg->dx;
 	a3 = ureg->r10;
 	a4 = ureg->r8;
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	unsigned int scallnr = (unsigned int) badscallnr;
 	if (0) iprint("Syscall %d, %lx, %lx, %lx %lx %lx\n", scallnr, a0, a1, a2, a3, a4);
 	char *e;
@@ -436,7 +436,7 @@ sysexecstack(uintptr_t stack, int argc)
 void*
 sysexecregs(uintptr_t entry, uint32_t ssize, void *argv, uint32_t nargs, void *tos)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uintptr_t *sp;
 	Ureg *ureg;
 

+ 5 - 5
sys/src/9/amd64pv/tcore.c

@@ -31,7 +31,7 @@ extern void acsysret(void);
 Mach*
 getac(Proc *p, int core)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	Mach *mp;
 
@@ -101,7 +101,7 @@ putac(Mach *m)
 void
 stopac(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Mach *mp;
 
 	mp = up->ac;
@@ -140,7 +140,7 @@ extern int notify(Ureg*);
 int
 runac(Mach *mp, APfunc func, int flushtlb, void *a, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint8_t *dpg, *spg;
 
 	if (n > sizeof(mp->icc->data))
@@ -193,7 +193,7 @@ runac(Mach *mp, APfunc func, int flushtlb, void *a, int32_t n)
 static void
 fakeretfromsyscall(Ureg *ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int s;
 
 	poperror();	/* as syscall() would do if we would return */
@@ -236,7 +236,7 @@ fakeretfromsyscall(Ureg *ureg)
 void
 runacore(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ureg *ureg;
 	void (*fn)(void);
 	int rc, flush, s;

+ 10 - 10
sys/src/9/amd64pv/trap.c

@@ -266,7 +266,7 @@ static char* excname[32] = {
 void
 intrtime(int vno)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t diff, x;		/* should be uint64_t */
 
 	x = perfticks();
@@ -292,7 +292,7 @@ void (*_pmcupdate)(Mach *m) = pmcnop;
 void
 kexit(Ureg* u)
 {
- 	Proc *up = machp()->externup;
+ 	Proc *up = externup();
  	uint64_t t;
 	Tos *tos;
 	Mach *mp;
@@ -323,7 +323,7 @@ kexit(Ureg* u)
 void
 _trap(Ureg *ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/*
 	 * If it's a real trap in this core, then we want to
 	 * use the hardware cr2 register.
@@ -366,7 +366,7 @@ trap(Ureg* ureg)
 	lastvno = vno;
 	if (gsbase < 1ULL<<63)
 		die("bogus gsbase");
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char buf[ERRMAX];
 	Vctl *ctl, *v;
 
@@ -486,7 +486,7 @@ trap(Ureg* ureg)
 void
 dumpgpr(Ureg* ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if(up != nil)
 		iprint("cpu%d: registers for %s %d\n",
 			machp()->machno, up->text, up->pid);
@@ -525,7 +525,7 @@ dumpgpr(Ureg* ureg)
 void
 dumpregs(Ureg* ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 
 	dumpgpr(ureg);
 
@@ -559,7 +559,7 @@ callwithureg(void (*fn)(Ureg*))
 static void
 dumpstackwithureg(Ureg* ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uintptr_t l, v, i, estack;
 //	extern char etext;
 	int x;
@@ -613,7 +613,7 @@ dumpstack(void)
 static void
 debugbpt(Ureg* ureg, void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char buf[ERRMAX];
 
 	if(up == 0)
@@ -645,7 +645,7 @@ expected(Ureg* ureg, void* v)
 static void
 faultamd64(Ureg* ureg, void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint64_t addr;
 	int read, user, insyscall;
 	char buf[ERRMAX];
@@ -708,7 +708,7 @@ iprint("could not fault %p\n", addr);
 uintptr_t
 userpc(Ureg* ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if(ureg == nil)
 		ureg = up->dbgreg;
 	return ureg->ip;

+ 11 - 11
sys/src/9/amd64pv/usbohci.c

@@ -1410,7 +1410,7 @@ epiodone(void *a)
 static void
 epiowait(Ctlr *ctlr, Qio *io, int tmout, uint32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ed *ed;
 	int timedout;
 
@@ -1456,7 +1456,7 @@ epiowait(Ctlr *ctlr, Qio *io, int tmout, uint32_t n)
 static int32_t
 epio(Ep *ep, Qio *io, void *a, int32_t count, int mustlock)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ed *ed;
 	Ctlr *ctlr;
 	char buf[80];
@@ -1608,7 +1608,7 @@ clrhalt(Ep *ep)
 static int32_t
 epread(Ep *ep, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlio *cio;
 	Qio *io;
 	char buf[80];
@@ -1686,7 +1686,7 @@ epread(Ep *ep, void *a, int32_t count)
 static int32_t
 epctlio(Ep *ep, Ctlio *cio, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	unsigned char *c;
 	int32_t len;
 
@@ -1791,7 +1791,7 @@ putsamples(Ctlr *ctlr, Ep *ep, Isoio *iso, unsigned char *b, int32_t count)
 static int32_t
 episowrite(Ep *ep, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int32_t tot, nw;
 	char *err;
 	unsigned char *b;
@@ -1857,7 +1857,7 @@ episowrite(Ep *ep, void *a, int32_t count)
 static int32_t
 epwrite(Ep *ep, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qio *io;
 	Ctlio *cio;
 	uint32_t delta;
@@ -1906,7 +1906,7 @@ epwrite(Ep *ep, void *a, int32_t count)
 static Ed*
 newed(Ctlr *ctlr, Ep *ep, Qio *io, char *c)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ed *ed;
 	Td *td;
 
@@ -2021,7 +2021,7 @@ isoopen(Ctlr *ctlr, Ep *ep)
 static void
 epopen(Ep *ep)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlr *ctlr;
 	Qio *io;
 	Ctlio *cio;
@@ -2091,7 +2091,7 @@ epopen(Ep *ep)
 static void
 cancelio(Ep *ep, Qio *io)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ed *ed;
 	Ctlr *ctlr;
 
@@ -2185,7 +2185,7 @@ epclose(Ep *ep)
 static int
 portreset(Hci *hp, int port, int on)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlr *ctlr;
 	Ohci *ohci;
 
@@ -2221,7 +2221,7 @@ portreset(Hci *hp, int port, int on)
 static int
 portenable(Hci *hp, int port, int on)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlr *ctlr;
 
 	ctlr = hp->aux;

+ 12 - 12
sys/src/9/amd64pv/usbuhci.c

@@ -1007,7 +1007,7 @@ putsamples(Isoio *iso, unsigned char *b, int32_t count)
 static int32_t
 episowrite(Ep *ep, Isoio *iso, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlr *ctlr;
 	unsigned char *b;
 	int tot;
@@ -1075,7 +1075,7 @@ episowrite(Ep *ep, Isoio *iso, void *a, int32_t count)
 static int32_t
 episoread(Ep *ep, Isoio *iso, void *a, int count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlr *ctlr;
 	unsigned char *b;
 	int nr;
@@ -1219,7 +1219,7 @@ epiodone(void *a)
 static void
 epiowait(Ctlr *ctlr, Qio *io, int tmout, uint32_t load)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qh *qh;
 	int timedout;
 
@@ -1266,7 +1266,7 @@ epiowait(Ctlr *ctlr, Qio *io, int tmout, uint32_t load)
 static int32_t
 epio(Ep *ep, Qio *io, void *a, int32_t count, int mustlock)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Td *td, *ltd, *td0, *ntd;
 	Ctlr *ctlr;
 	Qh* qh;
@@ -1415,7 +1415,7 @@ clrhalt(Ep *ep)
 static int32_t
 epread(Ep *ep, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlio *cio;
 	Qio *io;
 	Isoio *iso;
@@ -1495,7 +1495,7 @@ epread(Ep *ep, void *a, int32_t count)
 static int32_t
 epctlio(Ep *ep, Ctlio *cio, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	unsigned char *c;
 	int32_t len;
 
@@ -1569,7 +1569,7 @@ epctlio(Ep *ep, Ctlio *cio, void *a, int32_t count)
 static int32_t
 epwrite(Ep *ep, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlio *cio;
 	Isoio *iso;
 	Qio *io;
@@ -1726,7 +1726,7 @@ isoopen(Ep *ep)
 static void
 epopen(Ep *ep)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlr *ctlr;
 	Qh *cqh;
 	Qio *io;
@@ -1797,7 +1797,7 @@ epopen(Ep *ep)
 static void
 cancelio(Ctlr *ctlr, Qio *io)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qh *qh;
 
 	ilock(ctlr);
@@ -1828,7 +1828,7 @@ cancelio(Ctlr *ctlr, Qio *io)
 static void
 cancelisoio(Ctlr *ctlr, Isoio *iso, int pollival, uint32_t load)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Isoio **il;
 	uint32_t *lp;
 	int i;
@@ -1986,7 +1986,7 @@ seprintep(char *s, char *e, Ep *ep)
 static int
 portenable(Hci *hp, int port, int on)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int s;
 	int ioport;
 	Ctlr *ctlr;
@@ -2044,7 +2044,7 @@ portreset(Hci *hp, int port, int on)
 static int
 portstatus(Hci *hp, int port)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int s;
 	int r;
 	int ioport;

+ 2 - 1
sys/src/9/ip/arp.c

@@ -306,6 +306,7 @@ arpresolve(Arp *arp, Arpent *a, Medium *type, uint8_t *mac)
 void
 arpenter(Fs *fs, int version, uint8_t *ip, uint8_t *mac, int n, int refresh)
 {
+	Proc *up = externup();
 	Arp *arp;
 	Route *r;
 	Arpent *a, *f, **l;
@@ -675,7 +676,7 @@ rxready(void *v)
 static void
 rxmitproc(void *v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Arp *arp = v;
 	int32_t wakeupat;
 

+ 1 - 0
sys/src/9/ip/chandial.c

@@ -60,6 +60,7 @@ chandial(char *dest, char *local, char *dir, Chan **ctlp)
 static Chan*
 call(char *clone, char *dest, DS *ds)
 {
+	Proc *up = externup();
 	int n;
 	Chan *dchan, *cchan;
 	char name[Maxpath], data[Maxpath], *p;

+ 5 - 1
sys/src/9/ip/devip.c

@@ -183,7 +183,7 @@ static int
 ipgen(Chan *c, char* j, Dirtab* dir, int mm, int s, Dir *dp)
 
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qid q;
 	Conv *cv;
 	Fs *f;
@@ -368,6 +368,7 @@ static int m2p[] = {
 static Chan*
 ipopen(Chan* c, int omode)
 {
+	Proc *up = externup();
 	Conv *cv, *nc;
 	Proto *p;
 	int perm;
@@ -970,6 +971,7 @@ connected(void* a)
 static void
 connectctlmsg(Proto *x, Conv *c, Cmdbuf *cb)
 {
+	Proc *up = externup();
 	char *p;
 
 	if(c->state != 0)
@@ -1023,6 +1025,7 @@ announced(void* a)
 static void
 announcectlmsg(Proto *x, Conv *c, Cmdbuf *cb)
 {
+	Proc *up = externup();
 	char *p;
 
 	if(c->state != 0)
@@ -1097,6 +1100,7 @@ ttlctlmsg(Conv *c, Cmdbuf *cb)
 static int32_t
 ipwrite(Chan* ch, void *v, int32_t n, int64_t off)
 {
+	Proc *up = externup();
 	Conv *c;
 	Proto *x;
 	char *p;

+ 1 - 1
sys/src/9/ip/esp.c

@@ -459,7 +459,7 @@ espkick(void *x)
 void
 espiput(Proto *esp, Ipifc *ipifc, Block *bp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int payload, nexthdr;
 	uint8_t *auth, *espspi;
 	Conv *c;

+ 5 - 4
sys/src/9/ip/ethermedium.c

@@ -133,6 +133,7 @@ static char *nbmsg = "nonblocking";
 static void
 etherbind(Ipifc *ifc, int argc, char **argv)
 {
+	Proc *up = externup();
 	Chan *mchan4, *cchan4, *achan, *mchan6, *cchan6, *schan;
 	char addr[Maxpath];	//char addr[2*KNAMELEN];
 	char dir[Maxpath];	//char dir[2*KNAMELEN];
@@ -247,7 +248,7 @@ etherbind(Ipifc *ifc, int argc, char **argv)
 static void
 etherunbind(Ipifc *ifc)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Etherrock *er = ifc->arg;
 
 	if(er->read4p)
@@ -342,7 +343,7 @@ etherbwrite(Ipifc *ifc, Block *bp, int version, uint8_t *ip)
 static void
 etherread4(void *a)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ipifc *ifc;
 	Block *bp;
 	Etherrock *er;
@@ -382,7 +383,7 @@ etherread4(void *a)
 static void
 etherread6(void *a)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ipifc *ifc;
 	Block *bp;
 	Etherrock *er;
@@ -687,7 +688,7 @@ recvarp(Ipifc *ifc)
 static void
 recvarpproc(void *v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ipifc *ifc = v;
 	Etherrock *er = ifc->arg;
 

+ 2 - 2
sys/src/9/ip/inferno.c

@@ -21,14 +21,14 @@
 char*
 commonuser(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	return up->user;
 }
 
 char*
 commonerror(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	return up->errstr;
 }
 

+ 1 - 0
sys/src/9/ip/ip.c

@@ -129,6 +129,7 @@ iprouting(Fs *f, int on)
 int
 ipoput4(Fs *f, Block *bp, int gating, int ttl, int tos, Conv *c)
 {
+	Proc *up = externup();
 	Ipifc *ifc;
 	uint8_t *gate;
 	uint32_t fragoff;

+ 6 - 0
sys/src/9/ip/ipifc.c

@@ -112,6 +112,7 @@ ipfindmedium(char *name)
 static char*
 ipifcbind(Conv *c, char **argv, int argc)
 {
+	Proc *up = externup();
 	Ipifc *ifc;
 	Medium *medium;
 
@@ -182,6 +183,7 @@ ipifcbind(Conv *c, char **argv, int argc)
 static char*
 ipifcunbind(Ipifc *ifc)
 {
+	Proc *up = externup();
 	char *err;
 
 	if(waserror()){
@@ -292,6 +294,7 @@ ipifcinuse(Conv *c)
 static void
 ipifckick(void *x)
 {
+	Proc *up = externup();
 	Conv *c = x;
 	Block *bp;
 	Ipifc *ifc;
@@ -678,6 +681,7 @@ ipifcremroute(Fs *f, int vers, uint8_t *addr, uint8_t *mask)
 static char*
 ipifcconnect(Conv* c, char **argv, int argc)
 {
+	Proc *up = externup();
 	char *err;
 	Ipifc *ifc;
 
@@ -1435,6 +1439,7 @@ ipisbm(uint8_t *ip)
 void
 ipifcaddmulti(Conv *c, uint8_t *ma, uint8_t *ia)
 {
+	Proc *up = externup();
 	Ipifc *ifc;
 	Iplifc *lifc;
 	Conv **p;
@@ -1476,6 +1481,7 @@ ipifcaddmulti(Conv *c, uint8_t *ma, uint8_t *ia)
 void
 ipifcremmulti(Conv *c, uint8_t *ma, uint8_t *ia)
 {
+	Proc *up = externup();
 	Ipmulti *multi, **l;
 	Iplifc *lifc;
 	Conv **p;

+ 1 - 0
sys/src/9/ip/iproute.c

@@ -818,6 +818,7 @@ printroute(Route *r)
 int32_t
 routewrite(Fs *f, Chan *c, char *p, int n)
 {
+	Proc *up = externup();
 	int h, changed;
 	char *tag;
 	Cmdbuf *cb;

+ 1 - 0
sys/src/9/ip/ipv6.c

@@ -39,6 +39,7 @@ int		unfraglen(Block *bp, uint8_t *nexthdr, int setfh);
 int
 ipoput6(Fs *f, Block *bp, int gating, int ttl, int tos, Conv *c)
 {
+	Proc *up = externup();
 	int medialen, len, chunk, uflen, flen, seglen, lid, offset, fragoff;
 	int morefrags, blklen, rv = 0, tentative;
 	uint8_t *gate, nexthdr;

+ 2 - 2
sys/src/9/ip/loopbackmedium.c

@@ -49,7 +49,7 @@ loopbackbind(Ipifc *ifc, int i, char**argv)
 static void
 loopbackunbind(Ipifc *ifc)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	LB *lb = ifc->arg;
 
 	if(lb->readp)
@@ -78,7 +78,7 @@ loopbackbwrite(Ipifc *ifc, Block *bp, int i, uint8_t *c)
 static void
 loopbackread(void *a)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ipifc *ifc;
 	Block *bp;
 	LB *lb;

+ 2 - 2
sys/src/9/ip/netdevmedium.c

@@ -72,7 +72,7 @@ netdevbind(Ipifc *ifc, int argc, char **argv)
 static void
 netdevunbind(Ipifc *ifc)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Netdevrock *er = ifc->arg;
 
 	if(er->readp != nil)
@@ -111,7 +111,7 @@ netdevbwrite(Ipifc *ifc, Block *bp, int i, uint8_t *c)
 static void
 netdevread(void *a)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ipifc *ifc;
 	Block *bp;
 	Netdevrock *er;

+ 4 - 0
sys/src/9/ip/netlog.c

@@ -86,6 +86,7 @@ netloginit(Fs *f)
 void
 netlogopen(Fs *f)
 {
+	Proc *up = externup();
 	lock(f->alog);
 	if(waserror()){
 		unlock(f->alog);
@@ -107,6 +108,7 @@ netlogopen(Fs *f)
 void
 netlogclose(Fs *f)
 {
+	Proc *up = externup();
 	lock(f->alog);
 	if(waserror()){
 		unlock(f->alog);
@@ -132,6 +134,7 @@ netlogready(void *a)
 int32_t
 netlogread(Fs *f, void *a, uint32_t u, int32_t n)
 {
+	Proc *up = externup();
 	int i, d;
 	char *p, *rptr;
 
@@ -177,6 +180,7 @@ netlogread(Fs *f, void *a, uint32_t u, int32_t n)
 void
 netlogctl(Fs *f, char* s, int n)
 {
+	Proc *up = externup();
 	int i, set;
 	Netlogflag *fp;
 	Cmdbuf *cb;

+ 2 - 1
sys/src/9/ip/rudp.c

@@ -345,6 +345,7 @@ flow(void *v)
 void
 rudpkick(void *x)
 {
+	Proc *up = externup();
 	Conv *c = x;
 	Udphdr *uh;
 	uint16_t rport;
@@ -736,7 +737,7 @@ relackq(Reliable *r, Block *bp)
 void
 relackproc(void *a)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Rudpcb *ucb;
 	Proto *rudp;
 	Reliable *r;

+ 7 - 1
sys/src/9/ip/tcp.c

@@ -595,6 +595,7 @@ tcpclose(Conv *c)
 static void
 tcpkick(void *x)
 {
+	Proc *up = externup();
 	Conv *s = x;
 	Tcpctl *tcb;
 
@@ -653,6 +654,7 @@ tcprcvwin(Conv *s)				/* Call with tcb locked */
 static void
 tcpacktimer(void *v)
 {
+	Proc *up = externup();
 	Tcpctl *tcb;
 	Conv *s;
 
@@ -755,7 +757,7 @@ timerstate(Tcppriv *priv, Tcptimer *t, int newstate)
 static void
 tcpackproc(void *a)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Tcptimer *t, *tp, *timeo;
 	Proto *tcp;
 	Tcppriv *priv;
@@ -1428,6 +1430,7 @@ sndrst(Proto *tcp, uint8_t *source, uint8_t *dest, uint16_t length, Tcp *seg, ui
 static char*
 tcphangup(Conv *s)
 {
+	Proc *up = externup();
 	Tcp seg;
 	Tcpctl *tcb;
 	Block *hbp;
@@ -2081,6 +2084,7 @@ done:
 static void
 tcpiput(Proto *tcp, Ipifc *ipifc, Block *bp)
 {
+	Proc *up = externup();
 	Tcp seg;
 	Tcp4hdr *h4;
 	Tcp6hdr *h6;
@@ -2868,6 +2872,7 @@ tcpsetkacounter(Tcpctl *tcb)
 static void
 tcpkeepalive(void *v)
 {
+	Proc *up = externup();
 	Tcpctl *tcb;
 	Conv *s;
 
@@ -2961,6 +2966,7 @@ tcprxmit(Conv *s)
 static void
 tcptimeout(void *arg)
 {
+	Proc *up = externup();
 	Conv *s;
 	Tcpctl *tcb;
 	int maxback;

+ 1 - 1
sys/src/9/k10/arch.c

@@ -87,7 +87,7 @@ procsave(Proc *p)
 static void
 linkproc(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	spllo();
 	up->kpfun(up->kparg);
 	pexit("kproc dying", 0);

+ 2 - 1
sys/src/9/k10/dat.h

@@ -253,6 +253,7 @@ enum {
  *	splpc	- splhi, spllo, splx
  *	proc	- syscallentry
  *	stack	- acsyscall
+ *	externup - externup()
  */
 struct Mach
 {
@@ -263,10 +264,10 @@ struct Mach
 	Proc*	proc;			/* current process on this processor */
 	uintptr_t	stack;		/* mach stack, kstack is in proc->kstack */
 	uintptr_t	rathole;	/* to save a reg in syscallentry */
+	Proc*	externup;		/* Forsyth recommends we replace the global up with this. */
 	/* end warning, I think */
 
 	int	machno;			/* physical id of processor */
-	Proc*	externup;		/* Forsyth recommends we replace the global up with this. */
 
 	int	apicno;
 	int	online;

+ 1 - 0
sys/src/9/k10/devacpi.c

@@ -1630,6 +1630,7 @@ acpiread(Chan *c, void *a, int32_t n, int64_t off)
 static int32_t
 acpiwrite(Chan *c, void *a, int32_t n, int64_t off)
 {
+	Proc *up = externup();
 	Cmdtab *ct;
 	Cmdbuf *cb;
 	Reg *r;

+ 12 - 2
sys/src/9/k10/devusb.c

@@ -276,6 +276,7 @@ addhcitype(char* t, int (*r)(Hci*))
 static char*
 seprintep(char *s, char *se, Ep *ep, int all)
 {
+	Proc *up = externup();
 	static char* dsnames[] = { "config", "enabled", "detached", "reset" };
 	Udev *d;
 	int i;
@@ -409,6 +410,7 @@ putep(Ep *ep)
 static void
 dumpeps(void)
 {
+	Proc *up = externup();
 	int i;
 	static char buf[512];
 	char *s;
@@ -545,7 +547,7 @@ epdataperm(int mode)
 static int
 usbgen(Chan *c, char *l, Dirtab *d, int n, int s, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qid q;
 	Dirtab *dir;
 	int perm;
@@ -833,6 +835,7 @@ usbload(int speed, int maxpkt)
 static Chan*
 usbopen(Chan *c, int omode)
 {
+	Proc *up = externup();
 	int q;
 	Ep *ep;
 	int mode;
@@ -889,6 +892,7 @@ usbopen(Chan *c, int omode)
 static void
 epclose(Ep *ep)
 {
+	Proc *up = externup();
 	qlock(ep);
 	if(waserror()){
 		qunlock(ep);
@@ -905,6 +909,7 @@ epclose(Ep *ep)
 static void
 usbclose(Chan *c)
 {
+	Proc *up = externup();
 	int q;
 	Ep *ep;
 
@@ -934,6 +939,7 @@ usbclose(Chan *c)
 static int32_t
 ctlread(Chan *c, void *a, int32_t n, int64_t offset)
 {
+	Proc *up = externup();
 	int q;
 	char *s;
 	char *us;
@@ -1050,6 +1056,7 @@ rhubwrite(Ep *ep, void *a, int32_t n)
 static int32_t
 usbread(Chan *c, void *a, int32_t n, int64_t offset)
 {
+	Proc *up = externup();
 	int q;
 	Ep *ep;
 	int nr;
@@ -1127,7 +1134,7 @@ setmaxpkt(Ep *ep, char* s)
 static int32_t
 epctl(Ep *ep, Chan *c, void *a, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i, l, mode, nb, tt;
 	char *b, *s;
 	Cmdbuf *cb;
@@ -1341,6 +1348,7 @@ epctl(Ep *ep, Chan *c, void *a, int32_t n)
 static int32_t
 usbctl(void *a, int32_t n)
 {
+	Proc *up = externup();
 	Cmdtab *ct;
 	Cmdbuf *cb;
 	Ep *ep;
@@ -1380,6 +1388,7 @@ usbctl(void *a, int32_t n)
 static int32_t
 ctlwrite(Chan *c, void *a, int32_t n)
 {
+	Proc *up = externup();
 	int q;
 	Ep *ep;
 
@@ -1411,6 +1420,7 @@ ctlwrite(Chan *c, void *a, int32_t n)
 static int32_t
 usbwrite(Chan *c, void *a, int32_t n, int64_t off)
 {
+	Proc *up = externup();
 	int nr, q;
 	Ep *ep;
 

+ 2 - 0
sys/src/9/k10/ether82563.c

@@ -1423,6 +1423,7 @@ i82563tproc(void *v)
 static void
 i82563attach(Ether* edev)
 {
+	Proc *up = externup();
 	char name[KNAMELEN];
 	Block *bp;
 	Ctlr *ctlr;
@@ -1808,6 +1809,7 @@ static Cmdtab i82563ctlmsg[] = {
 static int32_t
 i82563ctl(Ether *edev, void *buf, int32_t n)
 {
+	Proc *up = externup();
 	char *p;
 	uint32_t v;
 	Ctlr *ctlr;

+ 2 - 1
sys/src/9/k10/fns.h

@@ -206,7 +206,7 @@ void	acsyscallentry(void);
 void	syscallreturn(void);
 void	sysrforkret(void);
 
-#define	waserror()	(machp()->externup->nerrlab++, setlabel(&machp()->externup->errlab[machp()->externup->nerrlab-1]))
+#define	waserror()	(up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1]))
 
 #define	dcflush(a, b)
 
@@ -271,6 +271,7 @@ void put16(uint16_t);
 void put8(uint8_t);
 
 Mach *machp(void);
+Proc *externup(void);
 
 /* temporary. */
 void die(char *);

+ 11 - 11
sys/src/9/k10/fpu.c

@@ -120,7 +120,7 @@ fpudevprocio(Proc* proc, void* a, int32_t n, uintptr_t offset, int write)
 void
 fpunotify(Ureg* u)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/*
 	 * Called when a note is about to be delivered to a
 	 * user process, usually at the end of a system call.
@@ -139,7 +139,7 @@ fpunotify(Ureg* u)
 void
 fpunoted(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/*
 	 * Called from sysnoted() via the machine-dependent
 	 * noted() routine.
@@ -151,7 +151,7 @@ fpunoted(void)
 void
 fpusysrfork(Ureg* u)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/*
 	 * Called early in the non-interruptible path of
 	 * sysrfork() via the machine-dependent syscall() routine.
@@ -169,7 +169,7 @@ fpusysrfork(Ureg* u)
 void
 fpusysrforkchild(Proc* child, Proc* parent)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/*
 	 * Called later in sysrfork() via the machine-dependent
 	 * sysrforkchild() routine.
@@ -266,7 +266,7 @@ acfpusysprocsetup(Proc *p)
 static char*
 fpunote(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint16_t fsw;
 	Fxsave *fpusave;
 	char *cm;
@@ -310,7 +310,7 @@ fpunote(void)
 char*
 xfpuxf(Ureg* ureg, void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t mxcsr;
 	Fxsave *fpusave;
 	char *cm;
@@ -360,7 +360,7 @@ xfpuxf(Ureg* ureg, void* v)
 void
 fpuxf(Ureg *ureg, void *p)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *n;
 
 	n = xfpuxf(ureg, p);
@@ -377,7 +377,7 @@ acfpuxf(Ureg *ureg, void *p)
 static char*
 xfpumf(Ureg* ureg, void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Fxsave *fpusave;
 
 	/*
@@ -414,7 +414,7 @@ xfpumf(Ureg* ureg, void* v)
 void
 fpumf(Ureg *ureg, void *p)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *n;
 
 	n = xfpumf(ureg, p);
@@ -431,7 +431,7 @@ acfpumf(Ureg *ureg, void *p)
 static char*
 xfpunm(Ureg* ureg, void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Fxsave *fpusave;
 
 	/*
@@ -498,7 +498,7 @@ xfpunm(Ureg* ureg, void* v)
 void
 fpunm(Ureg *ureg, void *p)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *n;
 
 	n = xfpunm(ureg, p);

+ 5 - 0
sys/src/9/k10/l64v.S

@@ -510,6 +510,11 @@ machp:
 	movq	%gs:0, %rax
 	ret
 
+.global externup
+externup:
+	movq	%gs:40, %rax
+	ret
+
 /* not needed.
 .global mul64fract
 mul64fract:

+ 3 - 3
sys/src/9/k10/main.c

@@ -455,7 +455,7 @@ main(uint32_t mbmagic, uint32_t mbaddress)
 	mach->stack = PTR2UINT(sys->machstk);
 	*(uintptr_t*)mach->stack = STACKGUARD;
 	mach->vsvm = sys->vsvmpage;
-	mach->externup = (void *)0;
+	mach->externup = nil;
 	active.nonline = 1;
 	active.exiting = 0;
 	active.nbooting = 0;
@@ -584,7 +584,7 @@ if (0){	acpiinit(); hi("	acpiinit();\n");}
 void
 init0(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char buf[2*KNAMELEN];
 
 	up->nerrlab = 0;
@@ -662,7 +662,7 @@ bootargs(uintptr_t base)
 void
 userinit(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Proc *p;
 	Segment *s;
 	KMap *k;

+ 2 - 2
sys/src/9/k10/mmu.c

@@ -43,7 +43,7 @@ mmuflushtlb(uint64_t u)
 void
 mmuflush(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Mpl pl;
 
 	pl = splhi();
@@ -383,7 +383,7 @@ pteflags(uint attr)
 void
 mmuput(uintptr_t va, Page *pg, uint attr)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int lvl, user, x, pgsz;
 	PTE *pte;
 	Page *page, *prev;

+ 1 - 0
sys/src/9/k10/pmcio.c

@@ -281,6 +281,7 @@ pmcwclose(PmcWait *w)
 static void
 waitnotstale(Mach *mp, PmcCtr *p)
 {
+	Proc *up = externup();
 	PmcWait *w;
 
 	p->stale = 1;

+ 1 - 1
sys/src/9/k10/qmalloc.c

@@ -549,7 +549,7 @@ mallocalign(uint32_t nbytes, uint32_t align, int32_t offset, uint32_t span)
 void*
 smalloc(uint32_t size)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	void *v;
 
 	while((v = malloc(size)) == nil)

+ 4 - 0
sys/src/9/k10/sdata.c

@@ -1028,6 +1028,7 @@ atamodesense(Drive* drive, uint8_t* cmd)
 static int
 atastandby(Drive* drive, int period)
 {
+	Proc *up = externup();
 	Ctlr* ctlr;
 	int cmdport, done;
 
@@ -1276,6 +1277,7 @@ atapktinterrupt(Drive* drive)
 static int
 atapktio(Drive* drive, uint8_t* cmd, int clen)
 {
+	Proc *up = externup();
 	Ctlr *ctlr;
 	int as, cmdport, ctlport, len, r, timeo;
 
@@ -1503,6 +1505,7 @@ atagenioretry(Drive* drive)
 static int
 atagenio(Drive* drive, uint8_t* cmd, int clen)
 {
+	Proc *up = externup();
 	uint8_t *p;
 	Ctlr *ctlr;
 	int64_t lba, len;
@@ -2282,6 +2285,7 @@ atarctl(SDunit* unit, char* p, int l)
 static int
 atawctl(SDunit* unit, Cmdbuf* cb)
 {
+	Proc *up = externup();
 	int period;
 	Ctlr *ctlr;
 	Drive *drive;

+ 5 - 5
sys/src/9/k10/syscall.c

@@ -39,7 +39,7 @@ typedef struct {
 void
 noted(Ureg* cur, uintptr_t arg0)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	NFrame *nf;
 	Note note;
 	Ureg *nur;
@@ -132,7 +132,7 @@ noted(Ureg* cur, uintptr_t arg0)
 int
 notify(Ureg* ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int l;
 	Mpl pl;
 	Note note;
@@ -221,7 +221,7 @@ notify(Ureg* ureg)
 void
 noerrorsleft(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 
 	if(up->nerrlab){
@@ -251,7 +251,7 @@ syscall(int badscallnr, Ureg *ureg)
 	a2 = ureg->dx;
 	a3 = ureg->r10;
 	a4 = ureg->r8;
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	unsigned int scallnr = (unsigned int) badscallnr;
 	if (0) iprint("Syscall %d, %lx, %lx, %lx %lx %lx\n", scallnr, a0, a1, a2, a3, a4);
 	char *e;
@@ -448,7 +448,7 @@ sysexecstack(uintptr_t stack, int argc)
 void*
 sysexecregs(uintptr_t entry, uint32_t ssize, void *tos)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uintptr_t *sp;
 	Ureg *ureg;
 

+ 5 - 4
sys/src/9/k10/tcore.c

@@ -31,6 +31,7 @@ extern void acsysret(void);
 Mach*
 getac(Proc *p, int core)
 {
+	Proc *up = externup();
 	int i;
 	Mach *mp;
 
@@ -100,7 +101,7 @@ putac(Mach *m)
 void
 stopac(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Mach *mp;
 
 	mp = up->ac;
@@ -139,7 +140,7 @@ extern int notify(Ureg*);
 int
 runac(Mach *mp, APfunc func, int flushtlb, void *a, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint8_t *dpg, *spg;
 
 	if (n > sizeof(mp->icc->data))
@@ -192,7 +193,7 @@ runac(Mach *mp, APfunc func, int flushtlb, void *a, int32_t n)
 static void
 fakeretfromsyscall(Ureg *ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int s;
 
 	poperror();	/* as syscall() would do if we would return */
@@ -235,7 +236,7 @@ fakeretfromsyscall(Ureg *ureg)
 void
 runacore(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ureg *ureg;
 	void (*fn)(void);
 	int rc, flush, s;

+ 9 - 9
sys/src/9/k10/trap.c

@@ -266,7 +266,7 @@ static char* excname[32] = {
 void
 intrtime(int vno)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t diff, x;		/* should be uint64_t */
 
 	x = perfticks();
@@ -292,7 +292,7 @@ void (*_pmcupdate)(Mach *m) = pmcnop;
 void
 kexit(Ureg* u)
 {
- 	Proc *up = machp()->externup;
+ 	Proc *up = externup();
  	uint64_t t;
 	Tos *tos;
 	Mach *mp;
@@ -325,7 +325,7 @@ kexit(Ureg* u)
 void
 kstackok(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 
 	if(up == nil){
 		uintptr_t *stk = (uintptr_t*)machp()->stack;
@@ -384,7 +384,7 @@ trap(Ureg* ureg)
 	lastvno = vno;
 	if (gsbase < 1ULL<<63)
 		die("bogus gsbase");
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char buf[ERRMAX];
 	Vctl *ctl, *v;
 
@@ -504,7 +504,7 @@ trap(Ureg* ureg)
 void
 dumpgpr(Ureg* ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if(up != nil)
 		iprint("cpu%d: registers for %s %d\n",
 			machp()->machno, up->text, up->pid);
@@ -576,7 +576,7 @@ callwithureg(void (*fn)(Ureg*))
 static void
 dumpstackwithureg(Ureg* ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uintptr_t l, v, i, estack;
 //	extern char etext;
 	int x;
@@ -630,7 +630,7 @@ dumpstack(void)
 static void
 debugbpt(Ureg* ureg, void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char buf[ERRMAX];
 
 	if(up == 0)
@@ -662,7 +662,7 @@ expected(Ureg* ureg, void* v)
 static void
 faultamd64(Ureg* ureg, void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint64_t addr;
 	int ftype, user, insyscall;
 	char buf[ERRMAX];
@@ -726,7 +726,7 @@ iprint("could not %s fault %p\n", faulttypes[ftype], addr);
 uintptr_t
 userpc(Ureg* ureg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if(ureg == nil)
 		ureg = up->dbgreg;
 	return ureg->ip;

+ 11 - 5
sys/src/9/k10/usbohci.c

@@ -1412,7 +1412,7 @@ epiodone(void *a)
 static void
 epiowait(Ctlr *ctlr, Qio *io, int tmout, uint32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ed *ed;
 	int timedout;
 
@@ -1458,6 +1458,7 @@ epiowait(Ctlr *ctlr, Qio *io, int tmout, uint32_t n)
 static int32_t
 epio(Ep *ep, Qio *io, void *a, int32_t count, int mustlock)
 {
+	Proc *up = externup();
 	Ed *ed;
 	Ctlr *ctlr;
 	char buf[80];
@@ -1609,7 +1610,7 @@ clrhalt(Ep *ep)
 static int32_t
 epread(Ep *ep, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlio *cio;
 	Qio *io;
 	char buf[80];
@@ -1687,6 +1688,7 @@ epread(Ep *ep, void *a, int32_t count)
 static int32_t
 epctlio(Ep *ep, Ctlio *cio, void *a, int32_t count)
 {
+	Proc *up = externup();
 	unsigned char *c;
 	int32_t len;
 
@@ -1791,6 +1793,7 @@ putsamples(Ctlr *ctlr, Ep *ep, Isoio *iso, unsigned char *b, int32_t count)
 static int32_t
 episowrite(Ep *ep, void *a, int32_t count)
 {
+	Proc *up = externup();
 	int32_t tot, nw;
 	char *err;
 	unsigned char *b;
@@ -1856,7 +1859,7 @@ episowrite(Ep *ep, void *a, int32_t count)
 static int32_t
 epwrite(Ep *ep, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qio *io;
 	Ctlio *cio;
 	uint32_t delta;
@@ -1905,6 +1908,7 @@ epwrite(Ep *ep, void *a, int32_t count)
 static Ed*
 newed(Ctlr *ctlr, Ep *ep, Qio *io, char *c)
 {
+	Proc *up = externup();
 	Ed *ed;
 	Td *td;
 
@@ -2019,6 +2023,7 @@ isoopen(Ctlr *ctlr, Ep *ep)
 static void
 epopen(Ep *ep)
 {
+	Proc *up = externup();
 	Ctlr *ctlr;
 	Qio *io;
 	Ctlio *cio;
@@ -2088,7 +2093,7 @@ epopen(Ep *ep)
 static void
 cancelio(Ep *ep, Qio *io)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ed *ed;
 	Ctlr *ctlr;
 
@@ -2182,6 +2187,7 @@ epclose(Ep *ep)
 static int
 portreset(Hci *hp, int port, int on)
 {
+	Proc *up = externup();
 	Ctlr *ctlr;
 	Ohci *ohci;
 
@@ -2217,7 +2223,7 @@ portreset(Hci *hp, int port, int on)
 static int
 portenable(Hci *hp, int port, int on)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlr *ctlr;
 
 	ctlr = hp->aux;

+ 12 - 6
sys/src/9/k10/usbuhci.c

@@ -1009,6 +1009,7 @@ putsamples(Isoio *iso, unsigned char *b, int32_t count)
 static int32_t
 episowrite(Ep *ep, Isoio *iso, void *a, int32_t count)
 {
+	Proc *up = externup();
 	Ctlr *ctlr;
 	unsigned char *b;
 	int tot;
@@ -1076,6 +1077,7 @@ episowrite(Ep *ep, Isoio *iso, void *a, int32_t count)
 static int32_t
 episoread(Ep *ep, Isoio *iso, void *a, int count)
 {
+	Proc *up = externup();
 	Ctlr *ctlr;
 	unsigned char *b;
 	int nr;
@@ -1219,7 +1221,7 @@ epiodone(void *a)
 static void
 epiowait(Ctlr *ctlr, Qio *io, int tmout, uint32_t load)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qh *qh;
 	int timedout;
 
@@ -1266,6 +1268,7 @@ epiowait(Ctlr *ctlr, Qio *io, int tmout, uint32_t load)
 static int32_t
 epio(Ep *ep, Qio *io, void *a, int32_t count, int mustlock)
 {
+	Proc *up = externup();
 	Td *td, *ltd, *td0, *ntd;
 	Ctlr *ctlr;
 	Qh* qh;
@@ -1414,7 +1417,7 @@ clrhalt(Ep *ep)
 static int32_t
 epread(Ep *ep, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlio *cio;
 	Qio *io;
 	Isoio *iso;
@@ -1494,6 +1497,7 @@ epread(Ep *ep, void *a, int32_t count)
 static int32_t
 epctlio(Ep *ep, Ctlio *cio, void *a, int32_t count)
 {
+	Proc *up = externup();
 	unsigned char *c;
 	int32_t len;
 
@@ -1567,7 +1571,7 @@ epctlio(Ep *ep, Ctlio *cio, void *a, int32_t count)
 static int32_t
 epwrite(Ep *ep, void *a, int32_t count)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Ctlio *cio;
 	Isoio *iso;
 	Qio *io;
@@ -1724,6 +1728,7 @@ isoopen(Ep *ep)
 static void
 epopen(Ep *ep)
 {
+	Proc *up = externup();
 	Ctlr *ctlr;
 	Qh *cqh;
 	Qio *io;
@@ -1794,7 +1799,7 @@ epopen(Ep *ep)
 static void
 cancelio(Ctlr *ctlr, Qio *io)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qh *qh;
 
 	ilock(ctlr);
@@ -1825,7 +1830,7 @@ cancelio(Ctlr *ctlr, Qio *io)
 static void
 cancelisoio(Ctlr *ctlr, Isoio *iso, int pollival, uint32_t load)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Isoio **il;
 	uint32_t *lp;
 	int i;
@@ -1983,7 +1988,7 @@ seprintep(char *s, char *e, Ep *ep)
 static int
 portenable(Hci *hp, int port, int on)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int s;
 	int ioport;
 	Ctlr *ctlr;
@@ -2041,6 +2046,7 @@ portreset(Hci *hp, int port, int on)
 static int
 portstatus(Hci *hp, int port)
 {
+	Proc *up = externup();
 	int s;
 	int r;
 	int ioport;

+ 2 - 1
sys/src/9/port/alarm.c

@@ -19,6 +19,7 @@ static Rendez	alarmr;
 void
 alarmkproc(void* v)
 {
+	Proc *up = externup();
 	Proc *rp;
 	uint32_t now;
 
@@ -64,7 +65,7 @@ checkalarms(void)
 uint32_t
 procalarm(uint32_t time)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Proc **l, *f;
 	uint32_t when, old;
 

+ 1 - 1
sys/src/9/port/allocb.c

@@ -59,7 +59,7 @@ _allocb(int size)
 Block*
 allocb(int size)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Block *b;
 
 	/*

+ 3 - 0
sys/src/9/port/cache.c

@@ -276,6 +276,7 @@ cdev(Mntcache *mc, Chan *c)
 int
 cread(Chan *c, uint8_t *buf, int len, int64_t off)
 {
+	Proc *up = externup();
 	KMap *k;
 	Page *p;
 	Mntcache *mc;
@@ -356,6 +357,7 @@ cread(Chan *c, uint8_t *buf, int len, int64_t off)
 Extent*
 cchain(uint8_t *buf, uint32_t offset, int len, Extent **tail)
 {
+	Proc *up = externup();
 	int l;
 	Page *p;
 	KMap *k;
@@ -423,6 +425,7 @@ cchain(uint8_t *buf, uint32_t offset, int len, Extent **tail)
 int
 cpgmove(Extent *e, uint8_t *buf, int boff, int len)
 {
+	Proc *up = externup();
 	Page *p;
 	KMap *k;
 

+ 12 - 8
sys/src/9/port/chan.c

@@ -108,7 +108,7 @@ emptystr(char *s)
 void
 kstrdup(char **p, char *s)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int n;
 	char *t, *prev;
 
@@ -387,6 +387,7 @@ chanfree(Chan *c)
 void
 cclose(Chan *c)
 {
+	Proc *up = externup();
 	if(c->flag&CFREE)
 		panic("cclose %#p", getcallerpc(&c));
 
@@ -451,6 +452,7 @@ clunkwork(void* v)
 static void
 closeproc(void* v)
 {
+	Proc *up = externup();
 	Chan *c;
 
 	for(;;){
@@ -546,7 +548,7 @@ newmhead(Chan *from)
 int
 cmount(Chan **newp, Chan *old, int flag, char *spec)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int order, flg;
 	Chan *new;
 	Mhead *mhead, **l, *mh;
@@ -665,7 +667,7 @@ cmount(Chan **newp, Chan *old, int flag, char *spec)
 void
 cunmount(Chan *mnt, Chan *mounted)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Pgrp *pg;
 	Mhead *mh, **l;
 	Mount *f, **p;
@@ -757,7 +759,7 @@ cclone(Chan *c)
 int
 findmount(Chan **cp, Mhead **mp, int dc, uint devno, Qid qid)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Pgrp *pg;
 	Mhead *mh;
 
@@ -852,6 +854,7 @@ undomount(Chan *c, Path *path)
 static Walkqid*
 ewalk(Chan *c, Chan *nc, char **name, int nname)
 {
+	Proc *up = externup();
 	Walkqid *wq;
 
 	if(waserror())
@@ -869,7 +872,7 @@ static char Edoesnotexist[] = "does not exist";
 int
 walk(Chan **cp, char **names, int nnames, int nomount, int *nerror)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int dc, devno, didmount, dotdot, i, n, nhave, ntry;
 	Chan *c, *nc, *mtpt;
 	Path *path;
@@ -1045,6 +1048,7 @@ walk(Chan **cp, char **names, int nnames, int nomount, int *nerror)
 Chan*
 createdir(Chan *c, Mhead *mh)
 {
+	Proc *up = externup();
 	Chan *nc;
 	Mount *f;
 
@@ -1155,7 +1159,7 @@ memrchr(void *va, int c, int32_t n)
 static void
 namelenerror(char *aname, int len, char *err)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *ename, *name, *next;
 	int i, errlen;
 
@@ -1223,7 +1227,7 @@ nameerror(char *name, char *err)
 Chan*
 namec(char *aname, int amode, int omode, int perm)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int len, n, nomount;
 	Chan *c, *cnew;
 	Path *path;
@@ -1625,7 +1629,7 @@ char isfrog[256]={
 static char*
 validname0(char *aname, int slashok, int dup, uintptr_t pc)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *ename, *name, *s;
 	int c, n;
 	Rune r;

+ 5 - 2
sys/src/9/port/cpu_buffer.c

@@ -252,6 +252,7 @@ static int
 op_add_code(struct oprofile_cpu_buffer *cpu_buf, unsigned long backtrace,
 			int is_kernel, Proc *proc)
 {
+	Proc *up = externup();
 	//print_func_entry();
 	// Block *b; this gets some bizarre gcc set but not used error. 	Block *b;
 	struct op_entry entry;
@@ -314,6 +315,7 @@ static inline int
 op_add_sample(struct oprofile_cpu_buffer *cpu_buf,
 			  unsigned long pc, unsigned long event)
 {
+	Proc *up = externup();
 	//print_func_entry();
 	struct op_entry entry;
 	struct op_sample *sample;
@@ -350,7 +352,7 @@ log_sample(struct oprofile_cpu_buffer *cpu_buf, unsigned long pc,
 		   Proc *proc)
 {
 	//print_func_entry();
-	Proc *tsk = proc ? proc : machp()->externup;
+	Proc *tsk = proc ? proc : externup();
 	cpu_buf->sample_received++;
 
 	if (pc == ESCAPE_CODE) {
@@ -526,6 +528,7 @@ oprofile_write_reserve(struct op_entry *entry,
 		       Ureg *regs,
 		       unsigned long pc, int code, int size)
 {
+	Proc *up = externup();
 	//print_func_entry();
 	struct op_sample *sample;
 	// Block *b; this gets some bizarre gcc set but not used error. 	Block *b;
@@ -540,7 +543,7 @@ oprofile_write_reserve(struct op_entry *entry,
 	cpu_buf->sample_received++;
 
 	/* no backtraces for samples with data */
-	if (op_add_code(cpu_buf, 0, is_kernel,machp()->externup))
+	if (op_add_code(cpu_buf, 0, is_kernel, externup()))
 		goto fail;
 
 	op_cpu_buffer_write_reserve(cpu_buf, entry, size + 2);

+ 4 - 2
sys/src/9/port/dev.c

@@ -203,7 +203,7 @@ Walkqid*
 devwalk(Chan *c, Chan *nc, char **name, int nname, Dirtab *tab, int ntab,
 	Devgen *gen)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if (0) print_func_entry();
 	int i, j, alloc;
 	Walkqid *wq;
@@ -400,7 +400,7 @@ devdirread(Chan *c, char *d, int32_t n, Dirtab *tab, int ntab,
 void
 devpermcheck(char *fileuid, int perm, int omode)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if (0) print_func_entry();
 	int t;
 	static int access[] = { 0400, 0200, 0600, 0100 };
@@ -461,6 +461,7 @@ devcreate(Chan* c, char* d, int i, int n)
 Block*
 devbread(Chan *c, int32_t n, int64_t offset)
 {
+	Proc *up = externup();
 	if (0) print_func_entry();
 	Block *bp;
 
@@ -480,6 +481,7 @@ devbread(Chan *c, int32_t n, int64_t offset)
 int32_t
 devbwrite(Chan *c, Block *bp, int64_t offset)
 {
+	Proc *up = externup();
 	if (0) print_func_entry();
 	int32_t n;
 

+ 25 - 8
sys/src/9/port/devaoe.c

@@ -312,7 +312,7 @@ frameerror(Aoedev *d, Frame *f, char *s)
 static char*
 unitname(Aoedev *d)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uprint("%d.%d", d->major, d->minor);
 	return up->genbuf;
 }
@@ -328,6 +328,7 @@ eventlogready(void* v)
 static int32_t
 eventlogread(void *a, int32_t n)
 {
+	Proc *up = externup();
 	int len;
 	char *p, *buf;
 
@@ -535,6 +536,7 @@ hset(Aoedev *d, Frame *f, Aoehdr *h, int cmd)
 static int
 resend(Aoedev *d, Frame *f)
 {
+	Proc *up = externup();
 	uint32_t n;
 	Aoeata *a;
 
@@ -560,6 +562,7 @@ resend(Aoedev *d, Frame *f)
 static void
 discover(int major, int minor)
 {
+	Proc *up = externup();
 	Aoehdr *h;
 	Block *b;
 	Netlink *nl, *e;
@@ -597,7 +600,7 @@ discover(int major, int minor)
 static void
 aoesweepproc(void* v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t i, tx, timeout, nbc;
 	int64_t starttick;
 	enum { Nms = 100, Nbcms = 30*1000, };
@@ -687,6 +690,7 @@ static void netbind(char *path);
 static void
 aoecfg(void)
 {
+	Proc *up = externup();
 	int n, i;
 	char *p, *f[32], buf[24];
 
@@ -742,7 +746,7 @@ aoeattach(char *spec)
 static Aoedev*
 unit2dev(uint32_t unit)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	Aoedev *d;
 
@@ -838,7 +842,7 @@ topgen(Chan *c, uint32_t type, Dir *d)
 static int
 aoegen(Chan *c, char *e, Dirtab *dir, int j, int s, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	Aoedev *d;
 	Qid q;
@@ -934,6 +938,7 @@ aoestat(Chan *c, uint8_t *db, int32_t n)
 static Chan*
 aoeopen(Chan *c, int omode)
 {
+	Proc *up = externup();
 	Aoedev *d;
 
 	if(TYPE(c->qid) != Qdata)
@@ -957,6 +962,7 @@ aoeopen(Chan *c, int omode)
 static void
 aoeclose(Chan *c)
 {
+	Proc *up = externup();
 	Aoedev *d;
 
 	if(TYPE(c->qid) != Qdata || (c->flag&COPEN) == 0)
@@ -974,6 +980,7 @@ aoeclose(Chan *c)
 static void
 atarw(Aoedev *d, Frame *f)
 {
+	Proc *up = externup();
 	uint32_t bcnt;
 	char extbit, writebit;
 	Aoeata *ah;
@@ -1127,6 +1134,7 @@ work(Aoedev *d)
 static void
 strategy(Aoedev *d, Srb *srb)
 {
+	Proc *up = externup();
 	qlock(d);
 	if(waserror()){
 		qunlock(d);
@@ -1153,6 +1161,7 @@ strategy(Aoedev *d, Srb *srb)
 static int32_t
 rw(Aoedev *d, int write, uint8_t *db, int32_t len, uint64_t off)
 {
+	Proc *up = externup();
 	int32_t n, nlen, copy;
 	enum { Srbsz = 1<<18, };
 	Srb *srb;
@@ -1382,7 +1391,7 @@ aoeread(Chan *c, void *db, int32_t n, int64_t off)
 static int32_t
 configwrite(Aoedev *d, void *db, int32_t len)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *s;
 	Aoeqc *ch;
 	Frame *f;
@@ -1497,6 +1506,7 @@ static void ataident(Aoedev*);
 static int32_t
 unitctlwrite(Aoedev *d, void *db, int32_t n)
 {
+	Proc *up = externup();
 	uint maxbcnt, mm;
 	uint64_t bsize;
 	enum {
@@ -1614,6 +1624,7 @@ unitwrite(Chan *c, void *db, int32_t n, int64_t off)
 static Netlink*
 addnet(char *path, Chan *cc, Chan *dc, Chan *mtu, uint8_t *ea)
 {
+	Proc *up = externup();
 	Netlink *nl, *e;
 
 	lock(&netlinks);
@@ -1715,6 +1726,7 @@ mm2dev(int major, int minor)
 static Aoedev*
 getdev(int32_t major, int32_t minor, int n)
 {
+	Proc *up = externup();
 	Aoedev *d;
 
 	wlock(&devs);
@@ -1796,6 +1808,7 @@ ataident(Aoedev *d)
 static int
 getmtu(Chan *mm)
 {
+	Proc *up = externup();
 	int n, mtu;
 	char buf[36];
 
@@ -1875,7 +1888,7 @@ errrsp(Block *b, char *s)
 static void
 qcfgrsp(Block *b, Netlink *nl)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int major, cmd, cslen, blen;
 	unsigned n;
 	Aoedev *d;
@@ -2062,6 +2075,7 @@ identify(Aoedev *d, uint16_t *id)
 static void
 atarsp(Block *b)
 {
+	Proc *up = externup();
 	unsigned n;
 	int16_t major;
 	Aoeata *ahin, *ahout;
@@ -2145,7 +2159,7 @@ bail:
 static void
 netrdaoeproc(void *v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int idx;
 	char name[Maxpath+1], *s;
 	Aoehdr *h;
@@ -2202,7 +2216,7 @@ netrdaoeproc(void *v)
 static void
 getaddr(char *path, uint8_t *ea)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int n;
 	char buf[2*Eaddrlen+1];
 	Chan *c;
@@ -2227,6 +2241,7 @@ getaddr(char *path, uint8_t *ea)
 static void
 netbind(char *path)
 {
+	Proc *up = externup();
 	char addr[Maxpath];
 	uint8_t ea[2*Eaddrlen+1];
 	Chan *dc, *cc, *mtu;
@@ -2267,6 +2282,7 @@ unbound(void *v)
 static void
 netunbind(char *path)
 {
+	Proc *up = externup();
 	int i, idx;
 	Aoedev *d, *p, *next;
 	Chan *dc, *cc;
@@ -2433,6 +2449,7 @@ topctlwrite(void *db, int32_t n)
 		Remove,
 		Unbind,
 	};
+	Proc *up = externup();
 	char *f;
 	Cmdbuf *cb;
 	Cmdtab *ct;

+ 4 - 4
sys/src/9/port/devcec.c

@@ -168,7 +168,7 @@ cecprint(char *fmt, ...)
 static void
 getaddr(char *path, uint8_t *ea)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char buf[6*2];
 	int n;
 	Chan *c;
@@ -574,7 +574,7 @@ inita(Conn *ncp, If *ifc, Pkt *p)
 static void
 cecrdr(void *vp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Block *bp;
 	Conn *cp;
 	If *ifc;
@@ -770,7 +770,7 @@ cecfixup(void)
 static void
 cecon(char *path)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char buf[64];
 	uint8_t ea[6];
 	Chan *dc, *cc;
@@ -842,7 +842,7 @@ rst(Conn *c)
 static int32_t
 cecwrite(Chan *c, void *a, int32_t n, int64_t mm)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Cmdbuf *cb;
 	Cmdtab *cp;
 

+ 5 - 5
sys/src/9/port/devcmd.c

@@ -115,7 +115,7 @@ cmd3gen(Chan *c, int i, Dir *dp)
 static int
 cmdgen(Chan *c, char *name, Dirtab *d, int nd, int s, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qid q;
 	Conv *cv;
 
@@ -218,7 +218,7 @@ cmdstat(Chan *c, uint8_t *db, int32_t n)
 static Chan *
 cmdopen(Chan *c, int omode)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int perm;
 	Conv *cv;
 	char *user;
@@ -388,7 +388,7 @@ cmdclose(Chan *c)
 static int32_t
 cmdread(Chan *ch, void *a, int32_t n, int64_t offset)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Conv *c;
 	Proc *p;
 	char *s, *cmds;
@@ -487,7 +487,7 @@ Cmdtab cmdtab[] = {
 static int32_t
 cmdwrite(Chan *ch, void *a, int32_t n, int64_t offset)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i, r = 0;
 	Conv *c;
 	Segment *s;
@@ -589,7 +589,7 @@ cmdwrite(Chan *ch, void *a, int32_t n, int64_t offset)
 static int32_t
 cmdwstat(Chan *c, uint8_t *dp, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Dir *d;
 	Conv *cv;
 

+ 4 - 2
sys/src/9/port/devcons.c

@@ -255,7 +255,7 @@ _assert(char *fmt)
 int
 pprint(char *fmt, ...)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int n;
 	Chan *c;
 	va_list arg;
@@ -422,7 +422,7 @@ consclose(Chan *c)
 static int32_t
 consread(Chan *c, void *buf, int32_t n, int64_t off)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uint32_t l;
 	Mach *mp;
 	char *b, *bp, *s, *e;
@@ -607,6 +607,7 @@ consread(Chan *c, void *buf, int32_t n, int64_t off)
 static int32_t
 conswrite(Chan *c, void *va, int32_t n, int64_t off)
 {
+	Proc *up = externup();
 	char buf[256];
 	int32_t l, bp;
 	char *a;
@@ -781,6 +782,7 @@ static	uint32_t	randn;
 static void
 seedrand(void)
 {
+	Proc *up = externup();
 	if(!waserror()){
 		randomread((void*)&randn, sizeof(randn));
 		poperror();

+ 1 - 1
sys/src/9/port/devdup.c

@@ -19,7 +19,7 @@
 static int
 dupgen(Chan *c, char *d, Dirtab* dir, int mm, int s, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Fgrp *fgrp = up->fgrp;
 	Chan *f;
 	static int perm[] = { 0400, 0200, 0600, 0 };

+ 4 - 2
sys/src/9/port/devenv.c

@@ -41,7 +41,7 @@ envlookup(Egrp *eg, char *name, uint32_t qidpath)
 static int
 envgen(Chan *c, char *name, Dirtab* dir, int i, int s, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Egrp *eg;
 	Evalue *e;
 
@@ -150,6 +150,7 @@ envopen(Chan *c, int omode)
 static void
 envcreate(Chan *c, char *name, int omode, int i)
 {
+	Proc *up = externup();
 	Egrp *eg;
 	Evalue *e;
 	Evalue **ent;
@@ -377,7 +378,7 @@ closeegrp(Egrp *eg)
 static Egrp*
 envgrp(Chan *c)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if(c->aux == nil)
 		return up->egrp;
 	return c->aux;
@@ -412,6 +413,7 @@ ksetenv(char *ename, char *eval, int conf)
 char *
 getconfenv(void)
 {
+	Proc *up = externup();
 	Egrp *eg = &confegrp;
 	Evalue *e;
 	char *p, *q;

+ 2 - 1
sys/src/9/port/devkexec.c

@@ -48,7 +48,7 @@ kexeclookup(Kexecgrp *kg, uintptr_t addr, uint32_t qidpath)
 static int
 kexecgen(Chan *c, char *name, Dirtab* dir, int i, int s, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Kexecgrp *kg;
 	Kvalue *e;
 	uintptr_t addr;
@@ -170,6 +170,7 @@ kexecopen(Chan *c, int omode)
 static void
 kexeccreate(Chan *c, char *name, int omode, int i)
 {
+	Proc *up = externup();
 	Kexecgrp *kg;
 	Kvalue *e;
 	Kvalue **ent;

+ 13 - 7
sys/src/9/port/devmnt.c

@@ -107,6 +107,7 @@ mntreset(void)
 usize
 mntversion(Chan *c, uint32_t msize, char *version, usize returnlen)
 {
+	Proc *up = externup();
 	Fcall f;
 	uint8_t *msg;
 	Mnt *mnt;
@@ -257,7 +258,7 @@ mntversion(Chan *c, uint32_t msize, char *version, usize returnlen)
 Chan*
 mntauth(Chan *c, char *spec)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Mnt *mnt;
 	Mntrpc *r;
 
@@ -310,7 +311,7 @@ mntauth(Chan *c, char *spec)
 static Chan*
 mntattach(char *muxattach)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Mnt *mnt;
 	Chan *c;
 	Mntrpc *r;
@@ -392,6 +393,7 @@ mntchan(void)
 static Walkqid*
 mntwalk(Chan *c, Chan *nc, char **name, int nname)
 {
+	Proc *up = externup();
 	int i, alloc;
 	Mnt *mnt;
 	Mntrpc *r;
@@ -475,6 +477,7 @@ mntwalk(Chan *c, Chan *nc, char **name, int nname)
 static int32_t
 mntstat(Chan *c, uint8_t *dp, int32_t n)
 {
+	Proc *up = externup();
 	Mnt *mnt;
 	Mntrpc *r;
 	usize nstat;
@@ -509,6 +512,7 @@ mntstat(Chan *c, uint8_t *dp, int32_t n)
 static Chan*
 mntopencreate(int type, Chan *c, char *name, int omode, int perm)
 {
+	Proc *up = externup();
 	Mnt *mnt;
 	Mntrpc *r;
 
@@ -558,6 +562,7 @@ mntcreate(Chan *c, char *name, int omode, int perm)
 static void
 mntclunk(Chan *c, int t)
 {
+	Proc *up = externup();
 	Mnt *mnt;
 	Mntrpc *r;
 
@@ -628,6 +633,7 @@ mntremove(Chan *c)
 static int32_t
 mntwstat(Chan *c, uint8_t *dp, int32_t n)
 {
+	Proc *up = externup();
 	Mnt *mnt;
 	Mntrpc *r;
 
@@ -700,7 +706,7 @@ mntwrite(Chan *c, void *buf, int32_t n, int64_t off)
 int32_t
 mntrdwr(int type, Chan *c, void *buf, int32_t n, int64_t off)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Mnt *mnt;
  	Mntrpc *r;
 	char *uba;
@@ -753,7 +759,7 @@ mntrdwr(int type, Chan *c, void *buf, int32_t n, int64_t off)
 static void
 mntvalidreply(Mnt *mnt, Mntrpc *r)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *sn, *cn;
 	int t;
 
@@ -806,7 +812,7 @@ xmitrpc(Mnt *mnt, Mntrpc *r)
 static void
 recvrpc(Mnt *mnt, Mntrpc *r)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/* Gate readers onto the mount point one at a time */
 	for(;;) {
 		lock(mnt);
@@ -834,7 +840,7 @@ recvrpc(Mnt *mnt, Mntrpc *r)
 void
 mountiostart(Mnt *mnt, Mntrpc *r)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int gotintr;
 
 	r->reply.tag = 0;
@@ -864,7 +870,7 @@ mountiostart(Mnt *mnt, Mntrpc *r)
 void
 mountiofinish(Mnt *mnt, Mntrpc *r)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int gotintr;
 
 	gotintr = 0;

+ 2 - 2
sys/src/9/port/devpci.c

@@ -36,7 +36,7 @@ extern Dev pcidevtab;
 static int
 pcidirgen(Chan *c, int t, int tbdf, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qid q;
 
 	q = (Qid){BUSBDF(tbdf)|t, 0, 0};
@@ -58,7 +58,7 @@ pcidirgen(Chan *c, int t, int tbdf, Dir *dp)
 static int
 pcigen(Chan *c, char *d, Dirtab* dir, int i, int s, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int tbdf;
 	Pcidev *p;
 	Qid q;

+ 2 - 2
sys/src/9/port/devpipe.c

@@ -319,7 +319,7 @@ pipebread(Chan *c, int32_t n, int64_t offset)
 static int32_t
 pipewrite(Chan *c, void *va, int32_t n, int64_t mm)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Pipe *p;
 
 	if(0)if(!islo())
@@ -354,7 +354,7 @@ pipewrite(Chan *c, void *va, int32_t n, int64_t mm)
 static int32_t
 pipebwrite(Chan *c, Block *bp, int64_t mm)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int32_t n;
 	Pipe *p;
 

+ 4 - 3
sys/src/9/port/devpmc.c

@@ -216,6 +216,7 @@ pmcclose(Chan *c)
 static int32_t
 pmcread(Chan *c, void *a, int32_t n, int64_t offset)
 {
+	Proc *up = externup();
 	uint32_t type, id;
 	PmcCtl p;
 	char *s;
@@ -305,7 +306,7 @@ struct AcCtrArg {
 void
 acpmcsetctl(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	AcPmcArg p;
 	Mach *mp;
 
@@ -319,7 +320,7 @@ acpmcsetctl(void)
 void
 acpmcsetctr(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	AcCtrArg ctr;
 	Mach *mp;
 
@@ -334,7 +335,7 @@ acpmcsetctr(void)
 static int32_t
 pmcwrite(Chan *c, void *a, int32_t n, int64_t mm)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Cmdbuf *cb;
 	Cmdtab *ct;
 	uint32_t type;

+ 12 - 8
sys/src/9/port/devproc.c

@@ -186,7 +186,7 @@ void (*proctrace)(Proc*, int, int64_t) = notrace;
 static void
 profclock(Ureg *ur, Timer *ti)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Tos *tos;
 
 	if(up == nil || up->state != Running)
@@ -203,7 +203,7 @@ profclock(Ureg *ur, Timer *ti)
 static int
 procgen(Chan *c, char *name, Dirtab *tab, int j, int s, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qid qid;
 	Proc *p;
 	char *ename;
@@ -385,7 +385,7 @@ procstat(Chan *c, uint8_t *db, int32_t n)
 static void
 nonone(Proc *p)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	if(p == up)
 		return;
 	if(strcmp(up->user, "none") != 0)
@@ -398,7 +398,7 @@ nonone(Proc *p)
 static Chan*
 procopen(Chan *c, int omode)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Proc *p;
 	Pgrp *pg;
 	Chan *tc;
@@ -569,7 +569,7 @@ procopen(Chan *c, int omode)
 static int32_t
 procwstat(Chan *c, uint8_t *db, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Proc *p;
 	Dir *d;
 
@@ -661,6 +661,7 @@ procfdprint(Chan *c, int fd, int w, char *s, int ns)
 static int
 procfds(Proc *p, char *va, int count, int32_t offset)
 {
+	Proc *up = externup();
 	Fgrp *f;
 	Chan *c;
 	char buf[256];
@@ -787,7 +788,7 @@ eventsavailable(void *v)
 static int32_t
 procread(Chan *c, void *va, int32_t n, int64_t off)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Proc *p;
 	Mach *ac, *wired;
 	int32_t l, r;
@@ -1251,6 +1252,7 @@ mntscan(Mntwalk *mw, Proc *p)
 static int32_t
 procwrite(Chan *c, void *va, int32_t n, int64_t off)
 {
+	Proc *up = externup();
 	Proc *p, *t;
 	int i, id, l;
 	char *args, buf[ERRMAX];
@@ -1420,6 +1422,7 @@ Dev procdevtab = {
 static Chan*
 proctext(Chan *c, Proc *p)
 {
+	Proc *up = externup();
 	Chan *tc;
 	Image *i;
 	Segment *s;
@@ -1473,7 +1476,7 @@ proctext(Chan *c, Proc *p)
 void
 procstopwait(Proc *p, int ctl)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int pid;
 
 	if(p->pdbg)
@@ -1572,7 +1575,7 @@ parsetime(int64_t *rt, char *s)
 static void
 procctlreq(Proc *p, char *va, int n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Segment *s;
 	int npc, pri, core, sno;
 	Cmdbuf *cb;
@@ -1785,6 +1788,7 @@ procstopped(void *a)
 static int
 procctlmemio(Proc *p, uintptr_t offset, int n, void *va, int read)
 {
+	Proc *up = externup();
 	KMap *k;
 	Pte *pte;
 	Page *pg;

+ 1 - 1
sys/src/9/port/devregress.c

@@ -76,7 +76,7 @@ regressread(Chan *c, void *a, int32_t n, int64_t offset)
 static int32_t
 regresswrite(Chan *c, void *a, int32_t n, int64_t offset)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *p;
 	unsigned long amt;
 

+ 8 - 4
sys/src/9/port/devsd.c

@@ -147,7 +147,7 @@ sdaddpart(SDunit* unit, char* name, uint64_t start, uint64_t end)
 static void
 sddelpart(SDunit* unit, char* name)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	SDpart *pp;
 	/*
@@ -489,7 +489,7 @@ sd1gen(Chan* c, int i, Dir* dp)
 static int
 sdgen(Chan* c, char* d, Dirtab* dir, int j, int s, Dir* dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qid q;
 	int64_t l;
 	int i, r;
@@ -673,6 +673,7 @@ sdstat(Chan* c, uint8_t* db, int32_t n)
 static Chan*
 sdopen(Chan* c, int omode)
 {
+	Proc *up = externup();
 	SDpart *pp;
 	SDunit *unit;
 	SDev *sdev;
@@ -747,7 +748,7 @@ sdclose(Chan* c)
 static int32_t
 sdbio(Chan* c, int write, char* a, int32_t len, int64_t off)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int nchange;
 	uint8_t *b;
 	SDpart *pp;
@@ -873,6 +874,7 @@ sdbio(Chan* c, int write, char* a, int32_t len, int64_t off)
 static int32_t
 sdrio(SDreq* r, void* a, int32_t n)
 {
+	Proc *up = externup();
 	void *data;
 
 	if(n >= SDmaxio || n < 0)
@@ -1101,6 +1103,7 @@ sdfakescsi(SDreq *r, void *info, int ilen)
 static int32_t
 sdread(Chan *c, void *a, int32_t n, int64_t off)
 {
+	Proc *up = externup();
 	char *p, *e, *buf;
 	SDpart *pp;
 	SDunit *unit;
@@ -1214,6 +1217,7 @@ static void legacytopctl(Cmdbuf*);
 static int32_t
 sdwrite(Chan* c, void* a, int32_t n, int64_t off)
 {
+	Proc *up = externup();
 	char *f0;
 	int i;
 	uint64_t end, start;
@@ -1382,7 +1386,7 @@ sdwrite(Chan* c, void* a, int32_t n, int64_t off)
 static int32_t
 sdwstat(Chan* c, uint8_t* dp, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Dir *d;
 	SDpart *pp;
 	SDperm *perm;

+ 9 - 3
sys/src/9/port/devsegment.c

@@ -117,6 +117,7 @@ putgseg(Globalseg *g)
 static int
 segmentgen(Chan *c, char* d, Dirtab* dir, int i, int s, Dir *dp)
 {
+	Proc *up = externup();
 	Qid q;
 	Globalseg *g;
 	uint32_t size;
@@ -231,6 +232,7 @@ cmddone(void *arg)
 static Chan*
 segmentopen(Chan *c, int omode)
 {
+	Proc *up = externup();
 	Globalseg *g;
 
 	switch(TYPE(c)){
@@ -298,7 +300,7 @@ segmentclose(Chan *c)
 static void
 segmentcreate(Chan *c, char *name, int omode, int perm)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int x, xfree;
 	Globalseg *g;
 	char *ep;
@@ -385,6 +387,7 @@ znotempty(void *x)
 static int32_t
 segmentread(Chan *c, void *a, int32_t n, int64_t voff)
 {
+	Proc *up = externup();
 	Globalseg *g;
 	Zseg *zs;
 	uintptr_t va;
@@ -494,6 +497,7 @@ placeseg(uintptr_t len)
 static int32_t
 segmentwrite(Chan *c, void *a, int32_t n, int64_t voff)
 {
+	Proc *up = externup();
 	Cmdbuf *cb;
 	Globalseg *g;
 	uintptr_t va, len, top;
@@ -595,7 +599,7 @@ segmentwrite(Chan *c, void *a, int32_t n, int64_t voff)
 static int32_t
 segmentwstat(Chan *c, uint8_t *dp, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Globalseg *g;
 	Dir *d;
 
@@ -652,6 +656,7 @@ segmentremove(Chan *c)
 static Segment*
 globalsegattach(Proc *p, char *name)
 {
+	Proc *up = externup();
 	int x;
 	Globalseg *g;
 	Segment *s;
@@ -687,6 +692,7 @@ globalsegattach(Proc *p, char *name)
 static void
 docmd(Globalseg *g, int cmd)
 {
+	Proc *up = externup();
 	g->err[0] = 0;
 	g->cmd = cmd;
 	wakeup(&g->cmdwait);
@@ -714,7 +720,7 @@ cmdready(void *arg)
 static void
 segmentkproc(void *arg)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Globalseg *g = arg;
 	int done;
 	int sno;

+ 7 - 4
sys/src/9/port/devsrv.c

@@ -33,7 +33,7 @@ static int	qidpath;
 static int
 srvgen(Chan *c, char* d, Dirtab* dir, int i, int s, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Srv *sp;
 	Qid q;
 
@@ -111,6 +111,7 @@ srvname(Chan *c)
 static Chan*
 srvopen(Chan *c, int omode)
 {
+	Proc *up = externup();
 	Srv *sp;
 
 	if(c->qid.type == QTDIR){
@@ -149,7 +150,7 @@ srvopen(Chan *c, int omode)
 static void
 srvcreate(Chan *c, char *name, int omode, int perm)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Srv *sp;
 	char *sname;
 
@@ -194,7 +195,7 @@ srvcreate(Chan *c, char *name, int omode, int perm)
 static void
 srvremove(Chan *c)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Srv *sp, **l;
 
 	if(c->qid.type == QTDIR)
@@ -244,7 +245,7 @@ srvremove(Chan *c)
 static int32_t
 srvwstat(Chan *c, uint8_t *dp, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Dir d;
 	Srv *sp;
 	char *strs;
@@ -290,6 +291,7 @@ srvwstat(Chan *c, uint8_t *dp, int32_t n)
 static void
 srvclose(Chan *c)
 {
+	Proc *up = externup();
 	/*
 	 * in theory we need to override any changes in removability
 	 * since open, but since all that's checked is the owner,
@@ -313,6 +315,7 @@ srvread(Chan *c, void *va, int32_t n, int64_t m)
 static int32_t
 srvwrite(Chan *c, void *va, int32_t n, int64_t mm)
 {
+	Proc *up = externup();
 	Srv *sp;
 	Chan *c1;
 	int fd;

+ 1 - 0
sys/src/9/port/devtab.c

@@ -73,6 +73,7 @@ devtabget(int dc, int user)
 int32_t
 devtabread(Chan* c, void* buf, int32_t n, int64_t off)
 {
+	Proc *up = externup();
 	int i;
 	Dev *dev;
 	char *alloc, *e, *p;

+ 4 - 2
sys/src/9/port/devtrace.c

@@ -349,7 +349,7 @@ newpl(void)
 void
 tracein(void* pc, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	struct Tracelog *pl;
 
 	/* if we are here, tracing is active. Turn it off. */
@@ -397,7 +397,7 @@ tracein(void* pc, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4)
 void
 traceout(void* pc, uintptr_t retval)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	struct Tracelog *pl;
 	/* if we are here, tracing is active. Turn it off. */
 	traceactive = 0;
@@ -514,6 +514,7 @@ traceclose(Chan *c)
 static int32_t
 traceread(Chan *c, void *a, int32_t n, int64_t offset)
 {
+	Proc *up = externup();
 	char *buf;
 	char *cp = a;
 	struct Tracelog *pl;
@@ -665,6 +666,7 @@ traceread(Chan *c, void *a, int32_t n, int64_t offset)
 static int32_t
 tracewrite(Chan *c, void *a, int32_t n, int64_t mm)
 {
+	Proc *up = externup();
 	char *tok[6]; //changed this so "tracein" works with the new 4th arg
 	char *ep, *s = nil;
 	Trace *p, **pp, *foo;

+ 3 - 0
sys/src/9/port/devuart.c

@@ -274,6 +274,7 @@ uartdrained(void* arg)
 static void
 uartdrainoutput(Uart *p)
 {
+	Proc *up = externup();
 	if(!p->enabled)
 		return;
 
@@ -289,6 +290,7 @@ uartdrainoutput(Uart *p)
 static void
 uartclose(Chan *c)
 {
+	Proc *up = externup();
 	Uart *p;
 
 	if(c->qid.type & QTDIR)
@@ -464,6 +466,7 @@ uartctl(Uart *p, char *cmd)
 static int32_t
 uartwrite(Chan *c, void *buf, int32_t n, int64_t mm)
 {
+	Proc *up = externup();
 	Uart *p;
 	char *cmd;
 

+ 3 - 0
sys/src/9/port/devzp.c

@@ -105,6 +105,7 @@ zqdump(Zq *q)
 static int
 zqread(Zq *q, Kzio io[], int nio, usize count)
 {
+	Proc *up = externup();
 	int i;
 	int32_t tot, nr;
 	Kzio *qio;
@@ -172,6 +173,7 @@ zqread(Zq *q, Kzio io[], int nio, usize count)
 static int32_t
 zqwrite(Zq *q, Kzio io[], int nio)
 {
+	Proc *up = externup();
 	int i, ei, ri, wi, awake;
 
 	lock(q);
@@ -508,6 +510,7 @@ zpzread(Chan *c, Kzio io[], int nio, usize n, int64_t offset)
 static int32_t
 zpwrite(Chan *c, void *va, int32_t n, int64_t mm)
 {
+	Proc *up = externup();
 	ZPipe *p;
 	Kzio io;	/* might write less than we could */
 	int32_t tot, nw;

+ 5 - 5
sys/src/9/port/edf.c

@@ -139,7 +139,7 @@ edfinit(Proc*p)
 static void
 deadlineintr(Ureg* ureg, Timer *t)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/* Proc reached deadline */
 	extern int panicking;
 	Sched *sch;
@@ -216,7 +216,7 @@ release(Proc *p)
 static void
 releaseintr(Ureg* ureg, Timer *t)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Proc *p;
 	extern int panicking;
 	Sched *sch;
@@ -349,7 +349,7 @@ edfrun(Proc *p, int edfpri)
 char *
 edfadmit(Proc *p)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *err;
 	Edf *e;
 	int i;
@@ -463,7 +463,7 @@ edfstop(Proc *p)
 static int
 yfn(void *v)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	now = ms();
 	return up->trend == nil || now - up->edf->r >= 0;
 }
@@ -471,7 +471,7 @@ yfn(void *v)
 void
 edfyield(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	/* sleep until next release */
 	Edf *e;
 	int32_t n;

+ 1 - 0
sys/src/9/port/elf64.c

@@ -292,6 +292,7 @@ overlap(uintptr_t a0, uintptr_t aend, uintptr_t b0, uintptr_t bend)
 int
 elf64ldseg(Chan *c, uintptr_t *entryp, Ldseg **rp, char *mach, uint32_t minpgsz)
 {
+	Proc *up = externup();
 	Elf64_Ehdr ehdr;
 	uint16_t (*get16)(uint8_t *);
 	uint32_t (*get32)(uint8_t *);

+ 5 - 5
sys/src/9/port/fault.c

@@ -34,7 +34,7 @@ char *faulttypes[] = {
 int
 fault(uintptr_t addr, uintptr_t pc, int ftype)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Segment *s;
 	char *sps;
 	int i, color;
@@ -101,7 +101,7 @@ fail:
 static void
 faulterror(char *s, Chan *c, int freemem)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char buf[ERRMAX];
 
 	if(c && c->path){
@@ -120,7 +120,7 @@ faulterror(char *s, Chan *c, int freemem)
 int
 fixfault(Segment *s, uintptr_t addr, int ftype, int dommuput, int color)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int stype;
 	int ref;
 	Pte **p, *etp;
@@ -291,7 +291,7 @@ fixfault(Segment *s, uintptr_t addr, int ftype, int dommuput, int color)
 void
 pio(Segment *s, uintptr_t addr, uint32_t soff, Page **p, int color)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Page *newpg;
 	KMap *k;
 	Chan *c;
@@ -401,7 +401,7 @@ pio(Segment *s, uintptr_t addr, uint32_t soff, Page **p, int color)
 int
 okaddr(uintptr_t addr, int32_t len, int write)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Segment *s;
 
 	if(len >= 0) {

+ 1 - 0
sys/src/9/port/image.c

@@ -215,6 +215,7 @@ imagechanreclaim(void)
 Image*
 attachimage(int type, Chan *c, int color, uintptr_t base, usize len)
 {
+	Proc *up = externup();
 	Image *i, **l;
 
 	/* reclaim any free channels from reclaimed segments */

+ 1 - 1
sys/src/9/port/kdebug.c

@@ -16,7 +16,7 @@ static int tab_depth = 0;
 
 static void __iprint_hdr(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 //	struct per_cpu_info *pcpui = &per_cpu_info[core_id()];
 	iprint("Core %2d ", 0); //core_id());	/* may help with multicore output */
 	if (! islo()) {

+ 1 - 1
sys/src/9/port/kexec.c

@@ -44,7 +44,7 @@ enum {
 Proc*
 setupseg(int core)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Segment *s;
 	uintptr_t  ka;
 	Proc *p;

+ 6 - 5
sys/src/9/port/netif.c

@@ -44,7 +44,7 @@ netifinit(Netif *nif, char *name, int nfile, uint32_t limit)
 static int
 netifgen(Chan *c, char* j, Dirtab *vp, int n, int i, Dir *dp)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Qid q;
 	Netif *nif = (Netif*)vp;
 	Netfile *f;
@@ -173,7 +173,7 @@ netifwalk(Netif *nif, Chan *c, Chan *nc, char **name, int nname)
 Chan*
 netifopen(Netif *nif, Chan *c, int omode)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int id;
 	Netfile *f;
 
@@ -217,7 +217,7 @@ netifopen(Netif *nif, Chan *c, int omode)
 int32_t
 netifread(Netif *nif, Chan *c, void *a, int32_t n, int64_t off)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i, j;
 	Netfile *f;
 	char *p;
@@ -313,6 +313,7 @@ typeinuse(Netif *nif, int type)
 int32_t
 netifwrite(Netif *nif, Chan *c, void *a, int32_t n)
 {
+	Proc *up = externup();
 	Netfile *f;
 	int type, mtu;
 	char *p, buf[64];
@@ -401,7 +402,7 @@ netifwrite(Netif *nif, Chan *c, void *a, int32_t n)
 int32_t
 netifwstat(Netif *nif, Chan *c, uint8_t *db, int32_t n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Dir *dir;
 	Netfile *f;
 	int l;
@@ -529,7 +530,7 @@ netown(Netfile *p, char *o, int omode)
 static int
 openfile(Netif *nif, int id)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Netfile *f, **fp, **efp;
 
 	if(id >= 0){

+ 1 - 1
sys/src/9/port/page.c

@@ -400,7 +400,7 @@ static int dupretries = 15000;
 int
 duppage(Page *p)				/* Always call with p locked */
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Pgsza *pa;
 	Page *np;
 	int color;

+ 3 - 2
sys/src/9/port/pager.c

@@ -91,6 +91,7 @@ canflush(Proc *p, Segment *s)
 static int
 pageout(Proc *p, Segment *s)
 {
+	Proc *up = externup();
 	int i, size, n;
 	Pte *l;
 	Page **pg, *entry;
@@ -195,7 +196,7 @@ Again:
 static void
 freepages(int si, int once)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Pgsza *pa;
 	Page *p;
 
@@ -261,7 +262,7 @@ hascolor(Page *pl, int color)
 void
 kickpager(int pgszi, int color)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Pgsza *pa;
 
 	if(DBGFLG>1)

+ 2 - 2
sys/src/9/port/parse.c

@@ -45,7 +45,7 @@ ncmdfield(char *p, int n)
 Cmdbuf*
 parsecmd(char *p, int n)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	Cmdbuf *volatile cb;
 	int nf;
 	char *sp;
@@ -83,7 +83,7 @@ parsecmd(char *p, int n)
 void
 cmderror(Cmdbuf *cb, char *s)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	char *p, *e;
 

+ 4 - 4
sys/src/9/port/pgrp.c

@@ -20,7 +20,7 @@ static Ref mountid;
 void
 pgrpnote(uint32_t noteid, char *a, int32_t n, int flag)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	Proc *p;
 	char buf[ERRMAX];
@@ -213,7 +213,7 @@ dupfgrp(Fgrp *f)
 void
 closefgrp(Fgrp *f)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	Chan *c;
 
@@ -253,7 +253,7 @@ closefgrp(Fgrp *f)
 void
 forceclosefgrp(void)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	int i;
 	Chan *c;
 	Fgrp *f;
@@ -307,7 +307,7 @@ mountfree(Mount *mount)
 void
 resrcwait(char *reason)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	char *p;
 
 	if(up == nil)

+ 1 - 1
sys/src/9/port/portclock.c

@@ -153,7 +153,7 @@ timerdel(Timer *dt)
 void
 hzclock(Ureg *ur)
 {
-	Proc *up = machp()->externup;
+	Proc *up = externup();
 	uintptr_t pc;
 
 	machp()->ticks++;

Some files were not shown because too many files changed in this diff