kernel support for nix calls is gone. it was an experiment. moving forward now. Reference: /n/patches.lsub.org/patch/noknixcalls Date: Sun Apr 15 14:10:45 CES 2012 Signed-off-by: nemo@lsub.org # rm /sys/src/nix/port/devtube.c # rm /sys/src/nix/port/nixcall.c # rm /sys/src/nix/port/tube.h --- /sys/src/nix/k10/k8cpufs Thu Apr 12 12:26:27 2012 +++ /sys/src/nix/k10/k8cpufs Sun Apr 15 13:06:59 2012 @@ -177,7 +177,6 @@ tod syssem syszio - nixcall # #dir --- /sys/src/nix/k10/mkfile Thu Apr 12 12:26:28 2012 +++ /sys/src/nix/k10/mkfile Sun Apr 15 14:08:25 2012 @@ -91,8 +91,6 @@ sdscsi.$O: ../port/error.h random.$O: ../port/error.h -devtube.$O: ../port/tube.h -syssem.$O: ../port/tube.h devacpi.$O: acpi.h physalloc.$O: acpi.h --- /sys/src/nix/k10/k8cpu Thu Apr 12 12:26:27 2012 +++ /sys/src/nix/k10/k8cpu Sun Apr 15 13:13:09 2012 @@ -12,10 +12,9 @@ ssl cap kprof -# pmc pmcio + pmc pmcio segment acpi - tube zp ws @@ -100,7 +99,6 @@ asm 'm' devacpi 'C' devsegment 'z' - devtube 'T' devzp 'z' hpet 'H' ht 'H' @@ -109,7 +107,6 @@ main 'x' memory 'm' mp 'M' - nixcall 'n' page 'p' pager 'p' physalloc 'm' @@ -162,7 +159,6 @@ fault image latin1 - nixcall page pager parse @@ -182,6 +178,7 @@ syssem systab taslock +# tcklock tod syszio syscallfmt --- /sys/src/nix/port/portfns.h Thu Apr 12 12:26:29 2012 +++ /sys/src/nix/port/portfns.h Sun Apr 15 13:08:27 2012 @@ -347,7 +347,6 @@ void* smalloc(ulong); char* srvname(Chan*); void startwaitstats(int); -void stopnixproc(void); int swapcount(ulong); void swapinit(void); void syscallfmt(int, va_list list); --- /sys/src/nix/port/proc.c Thu Apr 12 12:26:29 2012 +++ /sys/src/nix/port/proc.c Sun Apr 15 13:08:33 2012 @@ -438,6 +438,7 @@ /* * p->mach==0 only when process state is saved */ + if(p == 0 || p->mach){ unlock(sch); return nil; @@ -1417,7 +1418,6 @@ lock(&pga); stopac(); - stopnixproc(); edfstop(up); up->state = Moribund; sched(); --- /sys/src/nix/port/sysproc.c Thu Apr 12 12:26:29 2012 +++ /sys/src/nix/port/sysproc.c Sun Apr 15 13:10:41 2012 @@ -702,6 +702,12 @@ print("sysr1() called. recompile your binary\n"); } +void +sysnixsyscall(Ar0* , va_list ) +{ + print("nixsyscall() called. recompile your binary\n"); +} + int return0(void*) { --- /sys/src/nix/port/syssem.c Thu Apr 12 12:26:29 2012 +++ /sys/src/nix/port/syssem.c Sun Apr 15 13:12:20 2012 @@ -5,8 +5,6 @@ #include "fns.h" #include "../port/error.h" -#include "../port/tube.h" - static int semtrytimes = 100; @@ -307,150 +305,5 @@ if(downsem(ss[i], 1) != -1) return i; return semalt(ss, n); -} - -/* - * Tube entry points as seen by the kernel. - * They use Sem*, and not int* - */ - -enum{Doblock, Dontblock, Already}; /* xsend() nb argument */ - -/* - * Assuming t points to valid memory, - * create a KTube for the Tube pointed to by t. - * This is suitable for using following functions to operate - * on user tubes from the kernel. - */ -KTube* -u2ktube(Tube *t) -{ - KTube *kt; - Segment *sg; - - kt = smalloc(sizeof *kt); - kt->t = t; - if((sg = seg(up, PTR2UINT(&t->nhole), 0)) == nil) - panic("u2ktube: was the tube verified?"); - kt->hole = segmksem(sg, &t->nhole); - if(seg(up, PTR2UINT(&t->nmsg), 0) != sg) - panic("u2ktube: tricked user tube?"); - kt->msg = segmksem(sg, &t->nmsg); - return kt; -} - -static int -xsend(KTube *kt, void *p, int nb) -{ - int n; - uchar *c; - Tube *t; - - t = kt->t; - assert(t != nil && p != nil); - if(nb != Already && downsem(kt->hole, nb) < 0) - return -1; - n = ainc(&t->tl) - 1; - n %= t->tsz; - c = (uchar*)&t[1]; - c += (1+t->msz) * n; - memmove(c+1, p, t->msz); - coherence(); - *c = 1; - upsem(kt->msg); - return 0; -} - -static int -xrecv(KTube *kt, void *p, int nb) -{ - int n; - uchar *c; - Tube *t; - - t = kt->t; - assert(t != nil && p != nil); - if(nb != Already && downsem(kt->msg, nb) < 0) - return -1; - n = ainc(&t->hd) - 1; - n %= t->tsz; - c = (uchar*)&t[1]; - c += (1+t->msz) * n; - while(*c == 0) - yield(); - memmove(p, c+1, t->msz); - coherence(); - *c = 0; - upsem(kt->hole); - return 0; -} - -void -tsend(KTube *t, void *p) -{ - xsend(t, p, Doblock); -} - -void -trecv(KTube *t, void *p) -{ - xrecv(t, p, Doblock); -} - -int -nbtsend(KTube *t, void *p) -{ - return xsend(t, p, Dontblock); -} - -int -nbtrecv(KTube *t, void *p) -{ - return xrecv(t, p, Dontblock); -} - -int -talt(KTalt a[], int na) -{ - int i, n; - Sem **ss; - - assert(a != nil && na > 0); - ss = smalloc(sizeof(Sem*) * na); - n = 0; - for(i = 0; i < na; i++) - switch(a[i].op){ - case TSND: - ss[n++] = a[i].kt->hole; - break; - case TRCV: - ss[n++] = a[i].kt->msg; - break; - case TNBSND: - if(nbtsend(a[i].kt, a[i].m) != -1) - return i; - break; - case TNBRCV: - if(nbtrecv(a[i].kt, a[i].m) != -1) - return i; - break; - } - if(n == 0) - return -1; - i = altsems(ss, n); - free(ss); - if(i < 0) - return -1; - switch(a[i].op){ - case TSND: - xsend(a[i].kt, a[i].m, Already); - break; - case TRCV: - xrecv(a[i].kt, a[i].m, Already); - break; - default: - panic("talt"); - } - return i; }