first round of updates to a/*.ed files - vx32 - Local 9vx git repository for patches.
Log
Files
Refs
---
commit a693733fd50bf95ba59c6eb9a4e1cf59bb6803d5
parent 9ed785bcfd6fb893a6c55a00e2b82e208028af4c
Author: yiyus 
Date:   Fri, 16 Jul 2010 20:53:56 +0200

first round of updates to a/*.ed files

Diffstat:
  src/9vx/a/alarm.ed                  |       2 --
  src/9vx/a/allocb.c                  |      30 ++++++++++++++++++------------
  src/9vx/a/allocb.ed                 |       4 ++++
  src/9vx/a/chan.c                    |      29 +++++++++++++++--------------
  src/9vx/a/chan.ed                   |      19 ++++++++++++++++++-
  src/9vx/a/dat.ed                    |      78 +++++++++++++++++++++++++------
  src/9vx/a/dat.h                     |       7 ++++---
  src/9vx/a/dev.c                     |       2 +-
  src/9vx/a/dev.ed                    |       1 +
  src/9vx/a/devcap.c                  |       2 +-
  src/9vx/a/devcap.ed                 |      35 +++++++------------------------
  src/9vx/a/devcons.c                 |      17 +++++++----------
  src/9vx/a/devcons.ed                |      11 +++++------

13 files changed, 145 insertions(+), 92 deletions(-)
---
diff --git a/src/9vx/a/alarm.ed b/src/9vx/a/alarm.ed
@@ -1,2 +0,0 @@
-,s;alarmkproc(void\*);alarmkproc(void *v);
-,s;lock(\&alarms);lock(\&alarms.lk);g
diff --git a/src/9vx/a/allocb.c b/src/9vx/a/allocb.c
@@ -30,6 +30,7 @@ _allocb(int size)
         b->list = nil;
         b->free = 0;
         b->flag = 0;
+        b->ref = 0;
 
         /* align start of data portion by rounding up */
         addr = (ulong)b;
@@ -61,11 +62,11 @@ allocb(int size)
          * Can still error out of here, though.
          */
         if(up == nil)
-                panic("allocb without up: %luX\n", getcallerpc(&size));
+                panic("allocb without up: %#p", getcallerpc(&size));
         if((b = _allocb(size)) == nil){
                 xsummary();
                 mallocsummary();
-                panic("allocb: no memory for %d bytes\n", size);
+                panic("allocb: no memory for %d bytes", size);
         }
         setmalloctag(b, getcallerpc(&size));
 
@@ -115,10 +116,16 @@ void
 freeb(Block *b)
 {
         void *dead = (void*)Bdead;
+        long ref;
 
         if(b == nil)
                 return;
 
+        if(0){
+                dumpstack();
+                panic("freeb: ref %ld; caller pc %#p", ref, getcallerpc(&b));
+        }
+
         /*
          * drivers which perform non cache coherent DMA manage their own buffer
          * pool of uncached buffers and provide their own free routine.
@@ -149,26 +156,25 @@ checkb(Block *b, char *msg)
         void *dead = (void*)Bdead;
 
         if(b == dead)
-                panic("checkb b %s %lux", msg, b);
+                panic("checkb b %s %#p", msg, b);
         if(b->base == dead || b->lim == dead || b->next == dead
           || b->rp == dead || b->wp == dead){
-                print("checkb: base 0x%8.8luX lim 0x%8.8luX next 0x%8.8luX\n",
+                print("checkb: base %#p lim %#p next %#p\n",
                         b->base, b->lim, b->next);
-                print("checkb: rp 0x%8.8luX wp 0x%8.8luX\n", b->rp, b->wp);
-                panic("checkb dead: %s\n", msg);
+                print("checkb: rp %#p wp %#p\n", b->rp, b->wp);
+                panic("checkb dead: %s", msg);
         }
 
         if(b->base > b->lim)
-                panic("checkb 0 %s %lux %lux", msg, b->base, b->lim);
+                panic("checkb 0 %s %#p %#p", msg, b->base, b->lim);
         if(b->rp < b->base)
-                panic("checkb 1 %s %lux %lux", msg, b->base, b->rp);
+                panic("checkb 1 %s %#p %#p", msg, b->base, b->rp);
         if(b->wp < b->base)
-                panic("checkb 2 %s %lux %lux", msg, b->base, b->wp);
+                panic("checkb 2 %s %#p %#p", msg, b->base, b->wp);
         if(b->rp > b->lim)
-                panic("checkb 3 %s %lux %lux", msg, b->rp, b->lim);
+                panic("checkb 3 %s %#p %#p", msg, b->rp, b->lim);
         if(b->wp > b->lim)
-                panic("checkb 4 %s %lux %lux", msg, b->wp, b->lim);
-
+                panic("checkb 4 %s %#p %#p", msg, b->wp, b->lim);
 }
 
 void
diff --git a/src/9vx/a/allocb.ed b/src/9vx/a/allocb.ed
@@ -1,4 +1,8 @@
+,s!"\.\./port/lib\.h"!"lib.h"!
 ,s!Lock;!Lock lk;!
 ,s!lock(&ialloc)!lock(\&ialloc.lk)!g
 ,s!msize(b)!sizeof(Block)+size+Hdrspc!
 ,s/exit(0)/panic("iallocb")/
+/_xinc/d
+/_xdec/s/ ||.*0//
+,s/ref < 0/0/
diff --git a/src/9vx/a/chan.c b/src/9vx/a/chan.c
@@ -28,7 +28,7 @@ struct Elemlist
 {
         char        *aname;        /* original name */
         char        *name;        /* copy of name, so '/' can be overwritten */
-        uint        nelems;
+        int        nelems;
         char        **elems;
         int        *off;
         int        mustbedir;
@@ -63,12 +63,12 @@ dumpmount(void)                /* DEBUGGING */
         he = &pg->mnthash[MNTHASH];
         for(h = pg->mnthash; h < he; h++){
                 for(f = *h; f; f = f->hash){
-                        print("head: %p: %s 0x%llux.%lud %C %lud -> \n", f,
+                        print("head: %#p: %s %#llux.%lud %C %lud -> \n", f,
                                 f->from->path->s, f->from->qid.path,
                                 f->from->qid.vers, devtab[f->from->type]->dc,
                                 f->from->dev);
                         for(t = f->mount; t; t = t->next)
-                                print("\t%p: %s (umh %p) (path %.8llux dev %C %lud)\n", t, t->to->path->s, t->to->umh, t->to->qid.path, devtab[t->to->type]->dc, t->to->dev);
+                                print("\t%#p: %s (umh %#p) (path %#.8llux dev %C %lud)\n", t, t->to->path->s, t->to->umh, t->to->qid.path, devtab[t->to->type]->dc, t->to->dev);
                 }
         }
         poperror();
@@ -113,7 +113,7 @@ decref(Ref *r)
         x = --r->ref;
         unlock(&r->lk);
         if(x < 0)
-                panic("decref pc=0x%lux", getcallerpc(&r));
+                panic("decref pc=%#p", getcallerpc(&r));
 
         return x;
 }
@@ -190,6 +190,7 @@ chandevreset(void)
 {
         int i;
 
+        todinit();        /* avoid later reentry causing infinite recursion */
         for(i=0; devtab[i] != nil; i++)
                 devtab[i]->reset();
 }
@@ -281,7 +282,7 @@ newpath(char *s)
          * allowed, but other names with / in them draw warnings.
          */
         if(strchr(s, '/') && strcmp(s, "#/") != 0 && strcmp(s, "/") != 0)
-                print("newpath: %s from %lux\n", s, getcallerpc(&s));
+                print("newpath: %s from %#p\n", s, getcallerpc(&s));
 
         p->mlen = 1;
         p->malen = PATHMSLOP;
@@ -472,7 +473,7 @@ void
 cclose(Chan *c)
 {
         if(c->flag&CFREE)
-                panic("cclose %lux", getcallerpc(&c));
+                panic("cclose %#p", getcallerpc(&c));
 
         DBG("cclose %p name=%s ref=%ld\n", c, c->path->s, c->ref.ref);
         if(decref(&c->ref))
@@ -503,7 +504,7 @@ void
 ccloseq(Chan *c)
 {
         if(c->flag&CFREE)
-                panic("cclose %lux", getcallerpc(&c));
+                panic("cclose %#p", getcallerpc(&c));
 
         DBG("ccloseq %p name=%s ref=%ld\n", c, c->path->s, c->ref.ref);
 
@@ -637,7 +638,7 @@ cmount(Chan **newp, Chan *old, int flag, char *spec)
                 error(Emount);
 
         if(old->umh)
-                print("cmount: unexpected umh, caller %.8lux\n", getcallerpc(&newp));
+                print("cmount: unexpected umh, caller %#p\n", getcallerpc(&newp));
 
         order = flag&MORDER;
 
@@ -911,7 +912,7 @@ undomount(Chan *c, Path *path)
         Chan *nc;
 
         if(path->ref.ref != 1 || path->mlen == 0)
-                print("undomount: path %s ref %ld mlen %d caller %lux\n",
+                print("undomount: path %s ref %ld mlen %d caller %#p\n",
                         path->s, path->ref.ref, path->mlen, getcallerpc(&c));
 
         if(path->mlen>0 && (nc=path->mtpt[path->mlen-1]) != nil){
@@ -1313,9 +1314,8 @@ namec(char *aname, int amode, int omode, ulong perm)
                 free(aname);
                 nexterror();
         }
-if(tracesyscalls)
-        iprint("\tnamec %s\n", aname);
-
+        if(tracesyscalls)
+                iprint("\tnamec %s\n", aname);
         DBG("namec %s %d %d\n", aname, amode, omode);
         name = aname;
 
@@ -1682,8 +1682,7 @@ char isfrog[256]={
 static char*
 validname0(char *aname, int slashok, int dup, ulong pc)
 {
-        char *p, *ename, *name, *s;
-        uint t;
+        char *ename, *name, *s;
         int c, n;
         Rune r;
 
@@ -1691,6 +1690,8 @@ validname0(char *aname, int slashok, int dup, ulong pc)
         if(isuaddr(name)){
                 if(!dup)
                         print("warning: validname called from %lux with user pointer", pc);
+                char *p;
+                uint t;
                 p = name;
                 t = BY2PG-((ulong)p&(BY2PG-1));
                 while((ename=vmemchr(p, 0, t)) == nil){
diff --git a/src/9vx/a/chan.ed b/src/9vx/a/chan.ed
@@ -1,7 +1,8 @@
+,s!"\.\./port/lib\.h"!"lib.h"!
+,s!"\.\./port/error\.h"!"error.h"!
 ,s!Lock;!Lock lk;!g
 /dumpmount/-1 s!static !/*static*/ !
 ,s!lock(r)!lock(\&r->lk)!g
-/static Lock l/d
 ,s!lock(\&chanalloc)!lock(\&chanalloc.lk)!g
 ,s!->ref!->ref.ref!g
 ,s!r->ref.ref!r->ref!g
@@ -18,3 +19,19 @@ g/^cl/ s/(void\*)/(void *v)/
 ,s!ref(cnew)!ref(\&cnew->ref)!g
 ,s!ref(cnew->path)!ref(\&cnew->path->ref)!g
 /^addelem/-1 s;static;/*static*/;
+/DBG("namec/i
+        if(tracesyscalls)
+                iprint("\tnamec %s\n", aname);
+.
+,s/(ulong)name < KZERO/isuaddr(name)/
+/validaddr/d
+/ename = vmemchr(name, 0, (1<<16))/c
+                char *p;
+                uint t;
+                p = name;
+                t = BY2PG-((ulong)p&(BY2PG-1));
+                while((ename=vmemchr(p, 0, t)) == nil){
+                        p += t;
+                        t = BY2PG;
+                }
+.
diff --git a/src/9vx/a/dat.ed b/src/9vx/a/dat.ed
@@ -1,34 +1,43 @@
+,s!"\.\./port/portdat\.h"!"portdat.h"!
 /BIOS32ci/,/BIOS32ci;/d
 /^#define up/c
 #define up (machp[0]->externup)
 .
 v/typedef/ s!Lock;!Lock lk;!g
-/mmupdb/c
-        ulong lo;        // Plan 9 VX
-        ulong hi;        // Plan 9 VX
+/^struct PMMU/+2;/^}/-1c
         struct vxproc *vxproc;        // Plan 9 VX
-        struct vxmmap *vxmm;        // Plan 9 VX
-        void *sigstack;        // Plan 9 VX
+        struct vxmem vxmem;
+        struct vxmmap vxmm;        // Plan 9 VX
+        Uspace *us;
+        uchar *uzero;
 .
+g/^#pragma/d
 g/mmufree/d
 g/mmuused/d
 g/lastkmap/d
 g/kmaptable/d
 g/nkmap/d
-/^struct Label/+1a
-        ulong        bp;  // Plan 9 VX
-        ulong        bx;
-        ulong        si;
-        ulong        di;
+/        Mach        \*m/s/m/m_/
+/^struct Label/+2;/^}/-1c
+        uint64        bp;  // Plan 9 VX
+        uint64        bx;
+        uint64        si;
+        uint64        di;
+        uint64        sp;
+        uint64        pc;
+        uint64        r12;
+        uint64        r13;
+        uint64        r14;
+        uint64        r15;
 .
 g/BIOS32ci/d
 1i
 #include 
+#include "libvx32/vx32.h"
 
 .
-/        ulong\*        pbd/d
+/        ulong\*        pdb/d
 /        Tss\*        tss/d
-/        Segdesc\*        gdt/d
 /        Proc\*        externup/d
 /        ulong        ticks/d
 /        Lock        alarmlock/d
@@ -40,10 +49,29 @@ g/^        vlong        mtrr/d
         int        spl;        // Plan 9 VX
         void        *sigstack;
 .
-/^Mach\*        machp/ s/^/extern /
 /^extern Mach        \*m/c
-extern __thread Mach        *m;        // Plan 9 VX
-extern __thread Proc        *up;        // Plan 9 VX
+#ifdef TLS
+        extern __thread Mach        *m;        // Plan 9 VX
+        extern __thread Proc        *up;        // Plan 9 VX
+#        define thismach m
+#        define setmach(x) (m = (x))
+#else
+        extern Mach *getmach(void);
+        extern void setmach(Mach*);
+#        define up getmach()->externup
+#        ifdef WANT_M
+#                define m getmach()
+#        endif
+#endif
+.
+/^struct Mach/+1a
+#ifndef TLS
+        Proc*        externup;
+#endif
+        int        new;
+.
+/^struct PMMU/i
+ttypedef struct Uspace Uspace;
 .
 /^#define up/d
 $a
@@ -51,4 +79,24 @@ $a
 // Plan 9 VX
 extern int traceprocs;
 extern int tracesyscalls;
+extern int doabort;
+
+/* Pthreads-based sleep and wakeup. */
+ttypedef struct Psleep Psleep;
+ttypedef struct Pwaiter Pwaiter;
+struct Psleep
+{
+        int init;
+        pthread_mutex_t mutex;
+        Pwaiter *waiter;
+};
+
+struct Uspace
+{
+        Proc *p;        // proc currently mapped
+        uchar *uzero;
+        ulong lo;
+        ulong hi;
+};
 .
+g/^        u32int        e..;$/d
diff --git a/src/9vx/a/dat.h b/src/9vx/a/dat.h
@@ -23,6 +23,7 @@ typedef vlong                Tval;
 ttypedef struct Ureg        Ureg;
 ttypedef struct Vctl        Vctl;
 
+
 #define MAXSYSARG        5        /* for mount(fd, afd, mpt, flag, arg) */
 
 /*
@@ -180,10 +181,10 @@ struct Mach
 #ifndef TLS
         Proc*        externup;
 #endif
+        int        new;
         int        machno;                        /* physical id of processor (KNOWN TO ASSEMBLY) */
         ulong        splpc;                        /* pc of last caller to splhi */
 
-        ulong*        pdb;                        /* page directory base for this processor (va) */
         Segdesc        *gdt;                        /* gdt for this processor */
 
         Proc*        proc;                        /* current process on this processor */
@@ -199,7 +200,6 @@ struct Mach
         int        tlbfault;
         int        tlbpurge;
         int        pfault;
-        int        new;
         int        cs;
         int        syscall;
         int        load;
@@ -228,6 +228,7 @@ struct Mach
 
 
         int        spl;        // Plan 9 VX
+        void        *sigstack;
         int        stack[1];
 };
 
@@ -318,6 +319,7 @@ extern PCArch        *arch;                        /* PC architecture */
  * the clock which is only maintained by the bootstrap processor (0).
  */
 Mach* machp[MAXMACH];
+        
 #define        MACHP(n)        (machp[n])
 
 #ifdef TLS
@@ -373,4 +375,3 @@ struct Uspace
         ulong lo;
         ulong hi;
 };
-
diff --git a/src/9vx/a/dev.c b/src/9vx/a/dev.c
@@ -25,7 +25,7 @@ devno(int c, int user)
                         return i;
         }
         if(user == 0)
-                panic("devno %C 0x%ux", c, c);
+                panic("devno %C %#ux", c, c);
 
         return -1;
 }
diff --git a/src/9vx/a/dev.ed b/src/9vx/a/dev.ed
@@ -1,3 +1,4 @@
+,s!\.\./port/!!g
 g/^decreate/ s/(Chan\*, char\*, int, ulong)/(Chan *c, char *name, int mode, ulong perm)/
 g/^devremove/ s/(Chan\*)/(Chan *c)/
 g/^devwstat/ s/(Chan\*, uchar\*, int)/(Chan *c, uchar *stat, int nstat)/
diff --git a/src/9vx/a/devcap.c b/src/9vx/a/devcap.c
@@ -5,7 +5,7 @@
 #include        "fns.h"
 #include        "error.h"
 
-#include "libsec.h"
+#include        "libsec.h"
 
 enum
 {
diff --git a/src/9vx/a/devcap.ed b/src/9vx/a/devcap.ed
@@ -1,27 +1,8 @@
-197c
-capwrite(Chan *c, void *va, long n, vlong vl)
-.
-183c
-capread(Chan *c, void *va, long n, vlong vl)
-.
-178c
-capclose(Chan *c)
-.
-174c
-        qunlock(&capalloc.l);
-.
-156c
-        qlock(&capalloc.l);
-.
-154c
-        p->ticks = msec();
-.
-140c
-        qunlock(&capalloc.l);
-.
-126c
-        qlock(&capalloc.l);
-.
-30c
-        QLock l;
-.
+,s!\.\./port/!!g
+/libsec\.h/ s/[<>]/"/g
+/^capwrite/ s/vlong/vlong vl/
+/^capread/ s/vlong/vlong vl/
+/^capclose/ s/Chan\*/Chan *c/
+,s/m->ticks/msec()/
+,s/QLock/QLock l/
+g/lock/ s/capalloc/capalloc.l/
diff --git a/src/9vx/a/devcons.c b/src/9vx/a/devcons.c
@@ -5,7 +5,7 @@
 #include        "fns.h"
 #include        "error.h"
 
-#include "authsrv.h"
+#include        "authsrv.h"
 
 void        (*consdebug)(void) = nil;
 void        (*screenputs)(char*, int) = nil;
@@ -300,8 +300,7 @@ panic(char *fmt, ...)
         putstrn(buf, n+1);
         dumpstack();
 
-        restoretty();
-        exit(1);
+        restoretty(); exit(1);
 }
 
 /* libmp at least contains a few calls to sysfatal; simulate with panic */
@@ -320,7 +319,7 @@ sysfatal(char *fmt, ...)
 void
 _assert(char *fmt)
 {
-        panic("assert failed at 0x%lux: %s", getcallerpc(&fmt), fmt);
+        panic("assert failed at %#p: %s", getcallerpc(&fmt), fmt);
 }
 #endif
 
@@ -465,7 +464,7 @@ echo(char *buf, int n)
                                 consdebug = rdb;
                         else
                                 consdebug = nil;
-                        print("consdebug now 0x%p\n", consdebug);
+                        print("consdebug now %#p\n", consdebug);
                         return;
                 case 'D':
                         if(consdebug == nil)
@@ -484,8 +483,7 @@ echo(char *buf, int n)
                         killbig("^t ^t k");
                         return;
                 case 'r':
-                        restoretty();
-                        exit(0);
+                        restoretty(); exit(0);
                         return;
                 }
         }
@@ -786,7 +784,6 @@ consread(Chan *c, void *buf, long n, vlong off)
                 while(!qcanread(lineq)){
                         if(qread(kbdq, &ch, 1) == 0)
                                 continue;
-                        //XXX TODO: startup blocks here
                         send = 0;
                         if(ch == 0){
                                 /* flush output on rawoff -> rawon */
@@ -967,7 +964,7 @@ consread(Chan *c, void *buf, long n, vlong off)
                 return n;
 
         default:
-                print("consread 0x%llux\n", c->qid.path);
+                print("consread %#llux\n", c->qid.path);
                 error(Egreg);
         }
         return -1;                /* never reached */
@@ -1122,7 +1119,7 @@ conswrite(Chan *c, void *va, long n, vlong off)
                 break;
 
         default:
-                print("conswrite: 0x%llux\n", c->qid.path);
+                print("conswrite: %#llux\n", c->qid.path);
                 error(Egreg);
         }
         return n;
diff --git a/src/9vx/a/devcons.ed b/src/9vx/a/devcons.ed
@@ -1,3 +1,6 @@
+,s!\.\./port/!!g
+/authsrv\.h/ s/[<>]/"/g
+g/exit(/ s/exit/restoretty(); &/
 g/"pool.h"/d
 ,s!QLock;!QLock lk;!g
 /vlong        fasthz/ s!;! = 1000000000ULL;  // Plan 9 VX = nsecs!
@@ -7,14 +10,10 @@ g/^kbd/ s/Queue\*,/Queue *q,/
 ,s!(a = strchr(a, ' '))!(&)!g
 ,s!MACHP(0)->ticks!msec()!g
 /^long2le/-1 s!static!/*static*/!
-/fasthz == 0/,/fastticks/d
-/fasthz == 0/,/fastticks/d
 /static int ctrlt, pid/ s/, pid//
 /^                snprint(tmp/,/imagmem/c
                 tmp[0] = 0;
 .
-,s/\.0lud/lud/g
-,s/\.0llud/llud/g
 /^Queue\*        serialoq/d
 /^consactive/-1i
 #if 0 // Plan 9 VX
@@ -34,7 +33,7 @@ g/^kbd/ s/Queue\*,/Queue *q,/
 /^}/a
 #endif
 .
-/^putstrn0/
+/^putstrn0/ s;^;;
 /        int m/d
 /        char \*t/d
 /        if(serialoq == nil)/i
@@ -47,7 +46,7 @@ g/^kbd/ s/Queue\*,/Queue *q,/
 /^static Lock iprintlock/i
 #if 0 // Plan 9 VX
 .
-/^_assert/
+/^_assert/ s;^;;
 /^}/a
 #endif
 .