Run a NIX guest.
authorRon Minnich <rminnich@gmail.com>
Thu, 5 Mar 2015 22:29:03 +0000 (14:29 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 10 Mar 2015 20:55:10 +0000 (16:55 -0400)
This works. Basically, when a NIX is cloned, we put a simple program in it to test.

When that NIX is started, it puts a
0
on 3f8, and return.

We've seen this work.

In this case, I did this:
cat '#t/clone'
echo reserve 5 > '#t/nix0/ctl'
echo run 5 0xffff800040000000 > '#t/nix0/ctl'

Signed-off-by: Ron Minnich <rminnich@gmail.com>
kern/drivers/dev/nix.c
scripts/RUN

index a50bcef..47cc0fa 100644 (file)
@@ -113,6 +113,24 @@ static size_t img_size = CONFIG_NIX_IMG_SIZE;
 
 static atomic_t nixid = 0;
 
+/* initial guest program. */
+/*
+.code64
+       pushq   %rax
+       pushq   %rdx
+       movb    $0x30, %al
+       movw    $0x3f8, %dx
+       outb    %al, %dx
+       popq    %rdx
+       popq    %rax
+       ret
+*/
+unsigned char it[] = {
+  0x50, 0x52, 0xb0, 0x30, 0x66, 0xba, 0xf8, 0x03, 0xee, 0x5a, 0x58, 0xc3
+};
+unsigned int it_len = 12;
+
+
 /* The index is not the id, for now.  The index is the spot in nixs[].  The id
  * is an increasing integer, regardless of struct nix* reuse. */
 static inline struct nix *QID2NIX(struct qid q)
@@ -326,6 +344,7 @@ static struct chan *nixopen(struct chan *c, int omode)
                printk("nix image is %p with %d bytes\n", v->image, v->imagesize);
                c->aux = v;
                bitmap_zero(v->cpus, MAX_NUM_CPUS);
+               memcpy(v->image, it, sizeof(it));
                break;
        case Qstat:
                break;
@@ -417,6 +436,7 @@ static long nixwrite(struct chan *c, void *ubuf, long n, int64_t off)
        struct cmdbuf *cb;
        struct nix *nix;
        uint64_t hexval;
+
        switch (TYPE(c->qid)) {
        case Qtopdir:
        case Qnixdir:
index e817aa3..76148a6 100644 (file)
@@ -1,5 +1,5 @@
 #sudo qemu-system-x86_64 -s -cpu core2duo,+hypervisor,+vmx -smp 3 -m 2048 -nographic  \
-sudo qemu-system-x86_64 -s -cpu kvm64,+vmx -smp 8 -m 2048 -nographic  \
+sudo qemu-system-x86_64 -s -cpu kvm64,+vmx -smp 8 -m 4096 -nographic  \
 --machine pc,accel=kvm \
 -net nic,model=rtl8139 \
 -net user,hostfwd=tcp::5555-:23 \