cleanup in response to some good comments.
authorRon Minnich <rminnich@google.com>
Tue, 6 Jan 2015 23:19:38 +0000 (15:19 -0800)
committerRon Minnich <rminnich@google.com>
Wed, 7 Jan 2015 00:38:54 +0000 (16:38 -0800)
Signed-off-by: Ron Minnich <rminnich@gmail.com>
kern/arch/x86/nix.h [deleted file]
kern/drivers/dev/nix.c

diff --git a/kern/arch/x86/nix.h b/kern/arch/x86/nix.h
deleted file mode 100644 (file)
index 0dbd0dc..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef __NIX_H
-#define __NIX_H
-#include <page_alloc.h>
-#include <sys/queue.h>
-#include <pmap.h>
-
-struct nix_cpu {
-       qlock_t mutex;
-       int cpu;
-       int launched;
-};
-
-struct nix_memory_slot {
-       gfn_t base_gfn;
-       unsigned long npages;
-       unsigned long flags;
-       struct page **phys_mem;
-//#warning "bitmap is u8. "
-       /*unsigned long */ uint8_t *dirty_bitmap;
-};
-
-#if 0
-struct nix {
-       spinlock_t lock;                        /* protects everything except vcpus */
-       int nmemslots;
-       struct nix_memory_slot memslots[NIX_MEMORY_SLOTS];
-       //struct list_head active_mmu_pages;
-       struct nix_cpu cpus[LITEVM_MAX_VCPUS];
-       int memory_config_version;
-       int busy;
-};
-#endif
-
-struct nix_stat {
-       uint32_t pf_fixed;
-       uint32_t pf_guest;
-       uint32_t tlb_flush;
-       uint32_t invlpg;
-
-       uint32_t exits;
-       uint32_t io_exits;
-       uint32_t mmio_exits;
-       uint32_t signal_exits;
-       uint32_t irq_exits;
-};
-
-extern struct nix_stat nix_stat;
-
-#define nix_printf(litevm, fmt ...) printd(fmt)
-#define cpu_printf(vcpu, fmt...) nix_printf(vcpu->litevm, fmt)
-
-//hpa_t gpa_to_hpa(struct litevm_vcpu *vcpu, gpa_t gpa);
-#endif // _NIX_H
index a3269ba..db10440 100644 (file)
@@ -6,6 +6,8 @@
  *
  * devnix/#t: a device for NIX mode
  *
+ * FOR THE MOMENT, this is only intended to run one NIX at a time.
+ * Too many sharp edges for any other mode.
  */
 
 #include <kmalloc.h>
@@ -23,7 +25,6 @@
 #include <umem.h>
 #include <devalarm.h>
 #include <arch/types.h>
-#include <arch/nix.h>
 #include <arch/emulate.h>
 #include <arch/vmdebug.h>
 #include <kdebug.h>
@@ -64,8 +65,7 @@ static int npages;
 // only 4 gig for now.
 static page_t *nixpages[1048576];
 
-static spinlock_t nixidlock[1];
-static struct kref nixid[1] = { {(void *)1, fake_release} };
+static atomic_t nixid;
 
 //int nix_run(struct nix *nix, struct nix_run *nix_run);
 
@@ -137,11 +137,7 @@ static void nix_release(struct kref *kref)
 static int newnixid(void)
 {
        print_func_entry();
-       int id;
-       spin_lock_irqsave(nixidlock);
-       id = kref_refcnt(nixid);
-       kref_get(nixid, 1);
-       spin_unlock(nixidlock);
+       int id = atomic_fetch_and_add(&nixid, 1);
        print_func_exit();
        return id - 1;
 }
@@ -255,8 +251,7 @@ static void nixinit(void)
        //error_t kpage_alloc_specific(page_t** page, size_t ppn)
        print_func_entry();
        uint64_t ppn = GiB/4096;
-       spinlock_init_irqsave(&nixlock);
-       spinlock_init_irqsave(nixidlock);
+       spinlock_init_irqsave(nixid);
        while (1) {
                if (!page_is_free(ppn)) {
                        printk("%s: got a non-free page@ppn %p\n", __func__, ppn);
@@ -393,7 +388,8 @@ static void nixclose(struct chan *c)
                return;
        }
        switch (TYPE(c->qid)) {
-               /* for now, leave the NIX active even when we close ctl */
+               /* the idea of 'stopping' a nix is tricky. 
+                * for now, leave the NIX active even when we close ctl */
        case Qctl:
                break;
        case Qimage:
@@ -441,7 +437,7 @@ static long nixwrite(struct chan *c, void *ubuf, long n, int64_t off)
 {
        struct nix *v = c->aux;
        print_func_entry();
-       ERRSTACK(3);
+       ERRSTACK(1);
        char buf[32];
        struct cmdbuf *cb;
        struct nix *nix;