fix tos issues. Fix exploding issue with a  hack in sched.c - vx32 - Local 9vx git repository for patches.
git clone git://r-36.net/vx32
Log
Files
Refs
---
commit 5e41c6d8e3c51b4e017979c96e554c37f8c7892e
parent 037fe6d6643e0364dc831360649d437e030def44
Author: rminnich@gmail.com 
Date:   Thu,  2 Sep 2010 22:58:07 -0700

fix tos issues. Fix exploding issue with a  hack in sched.c

Diffstat:
  M src/9vx/a/tos.h                     |      21 +++++++++++++++++++++
  M src/9vx/nogui.c                     |       2 +-
  M src/9vx/sched.c                     |       2 ++
  M src/9vx/stub.c                      |      16 ++++++++++++++++

4 files changed, 40 insertions(+), 1 deletion(-)
---
diff --git a/src/9vx/a/tos.h b/src/9vx/a/tos.h
@@ -1,6 +1,7 @@
 typedef struct Tos Tos;
 typedef struct Plink Plink;
 
+#if 0
 
 struct Tos {
         struct                        /* Per process profiling */
@@ -19,5 +20,25 @@ struct Tos {
         ulong        clock;
         /* top of stack is here */
 };
+#else
+
+struct Tos {
+        struct                        /* Per process profiling */
+        {
+                uint32_t pp;        /* known to be 0(ptr) */
+                uint32_t next;        /* known to be 4(ptr) */
+                uint32_t last;
+                uint32_t first;
+                uint32_t        pid;
+                uint32_t        what;
+        } prof;
+        uvlong        cyclefreq;        /* cycle clock frequency if there is one, 0 otherwise */
+        vlong        kcycles;        /* cycles spent in kernel */
+        vlong        pcycles;        /* cycles spent in process (kernel + user) */
+        uint32_t        pid;                /* might as well put the pid here */
+        uint32_t        clock;
+        /* top of stack is here */
+};
+#endif
 
 extern Tos *_tos;
diff --git a/src/9vx/nogui.c b/src/9vx/nogui.c
@@ -77,7 +77,7 @@ unloadmemimage(Memimage *i, Rectangle r, uchar *data, int ndata)
         return _unloadmemimage(i, r, data, ndata);
 }
 
-ulong
+uint32
 pixelbits(Memimage *m, Point p)
 {
         return _pixelbits(m, p);
diff --git a/src/9vx/sched.c b/src/9vx/sched.c
@@ -158,6 +158,8 @@ runproc(void)
                         m->machno, p->pid, p->text, kprocq.n, nrunproc);
         unlock(&kprocq.lk);
         punlock(&run);
+        while (p->mach)
+                sched_yield();
         return p;
 }
 
diff --git a/src/9vx/stub.c b/src/9vx/stub.c
@@ -508,6 +508,21 @@ iprint(char *fmt, ...)
         return n;
 }
 
+void 
+talktome(void)
+{
+        int i;
+        static char cmd[512];
+        while (fgets(cmd, sizeof(cmd), stdin)) {
+                if (! strcmp(cmd, "mach")) {
+                        for(i = 0; i < MAXMACH; i++) {
+                                fprintf(stderr, "%d ", MACHP(i)->splpc);
+                        }
+                        
+                }
+        }
+        fprintf(stderr, "We're done talking\n");
+}
 /*
  * Panics go to standard error.
  */
@@ -536,6 +551,7 @@ panic(char *fmt, ...)
                         microdelay(1000000);
 #else
                 fprint(2, "aborting, to dump core.\n");
+                talktome();
                 abort();
 #endif
         }