Get things to build Ivy again. Turn off error db logging because it is slow.
authorZach Anderson <zra@zra-intrepid.(none)>
Tue, 27 Oct 2009 17:58:45 +0000 (10:58 -0700)
committerZach Anderson <zra@zra-intrepid.(none)>
Tue, 27 Oct 2009 17:58:45 +0000 (10:58 -0700)
13 files changed:
GNUmakefile
kern/include/kmalloc.h
kern/include/page_alloc.h
kern/include/process.h
kern/include/slab.h
kern/src/env.c
kern/src/kmalloc.c
kern/src/page_alloc.c
kern/src/process.c
kern/src/resource.c
kern/src/slab.c
kern/src/testing.c
user/apps/roslib/mhello.c

index f9f6bd3..88499ea 100644 (file)
@@ -51,12 +51,13 @@ endif
 # Default programs for compilation
 ifeq ($(COMPILER),IVY)
 KERN_CFLAGS := --deputy\
-                  --enable-error-db\
                   --no-rc-sharc\
                   --sc-dynamic-is-error\
                   --sc-ops=$(INCLUDE_DIR)/ivy/sharc.h\
                   --sc-all-in-thread\
-                  --enable-precompile
+                  --enable-precompile\
+#                  --enable-error-db\
+
 USER_CFLAGS := --deputy --enable-error-db
 CC         := ivycc --gcc=$(GCCPREFIX)gcc
 else
index c09e70c..f97dd3d 100644 (file)
@@ -30,8 +30,8 @@ void  (DFREE(addr) kfree)(void *addr);
 struct kmalloc_tag {
        int flags;
        union {
-               struct kmem_cache *my_cache;
-               size_t num_pages;
+               struct kmem_cache *my_cache WHEN(flags == KMALLOC_TAG_CACHE);
+               size_t num_pages WHEN(flags == KMALLOC_TAG_PAGES);
        };
 };
 
index 938f785..5094058 100644 (file)
@@ -39,7 +39,7 @@ extern page_list_t LCKD(&colored_page_free_list_lock) * RO CT(llc_num_colors)
 /*************** Functional Interface *******************/
 void page_alloc_init(void);
 error_t page_alloc(page_t *SAFE *page);
-void *get_cont_pages(size_t order, int flags);
+void *CT(1 << order) get_cont_pages(size_t order, int flags);
 void free_cont_pages(void *buf, size_t order);
 error_t page_alloc_specific(page_t *SAFE *page, size_t ppn);
 error_t l1_page_alloc(page_t *SAFE *page, size_t color);
index 85e36b0..48bbdbf 100644 (file)
@@ -83,11 +83,12 @@ void proc_yield(struct proc *SAFE p);
 error_t proc_give_cores(struct proc *SAFE p, uint32_t corelist[], size_t *num);
 /* Makes process p's coremap look like corelist (add, remove, etc) */
 error_t proc_set_allcores(struct proc *SAFE p, uint32_t corelist[], size_t *num,
-                          amr_t message);
+                          amr_t message,TV(a0t) arg0, TV(a1t) arg1, TV(a2t) arg2);
 /* Takes from process p the num cores listed in corelist */
 error_t proc_take_cores(struct proc *SAFE p, uint32_t corelist[], size_t *num,
-                        amr_t message);
-error_t proc_take_allcores(struct proc *SAFE p, amr_t message);
+                        amr_t message, TV(a0t) arg0, TV(a1t) arg1, TV(a2t) arg2);
+error_t proc_take_allcores(struct proc *SAFE p, amr_t message, TV(a0t) arg0,
+                           TV(a1t) arg1, TV(a2t) arg2);
 
 /* Arch Specific */
 void proc_init_trapframe(trapframe_t *SAFE tf);
index 79787e9..b89f49d 100644 (file)
@@ -59,8 +59,10 @@ struct kmem_slab {
        size_t num_busy_obj;
        size_t num_total_obj;
        union {
-               struct kmem_bufctl_list bufctl_freelist;
-               void *free_small_obj;
+               struct kmem_bufctl_list bufctl_freelist
+                   WHEN(obj_size > SLAB_LARGE_CUTOFF);
+               void *free_small_obj
+                   WHEN(obj_size <= SLAB_LARGE_CUTOFF);
        };
 };
 TAILQ_HEAD(kmem_slab_list, kmem_slab);
@@ -69,7 +71,7 @@ TAILQ_HEAD(kmem_slab_list, kmem_slab);
 struct kmem_cache {
        SLIST_ENTRY(kmem_cache) link;
        spinlock_t cache_lock;
-       const char *name;
+       const char *NTS name;
        size_t obj_size;
        int align;
        int flags;
@@ -85,7 +87,7 @@ SLIST_HEAD(kmem_cache_list, kmem_cache);
 extern struct kmem_cache_list kmem_caches;
 
 /* Cache management */
-struct kmem_cache *kmem_cache_create(const char *name, size_t obj_size,
+struct kmem_cache *kmem_cache_create(const char *NTS name, size_t obj_size,
                                      int align, int flags,
                                      void (*ctor)(void *, size_t),
                                      void (*dtor)(void *, size_t));
index ec270a6..7e728e2 100644 (file)
@@ -280,8 +280,9 @@ env_alloc(env_t **newenv_store, envid_t parent_id)
        e->env_flags = 0;
        e->env_entry = 0; // cheating.  this really gets set in load_icode
        e->num_vcores = 0;
-       for (int i = 0; i < MAX_NUM_CPUS; i++)
-               e->vcoremap[i] = -1;
+       memset(&e->vcoremap, -1, sizeof(e->vcoremap));
+       //for (int i = 0; i < MAX_NUM_CPUS; i++)
+               //e->vcoremap[i] = -1;
        memset(&e->resources, 0, sizeof(e->resources));
 
        memset(&e->env_ancillary_state, 0, sizeof(e->env_ancillary_state));
index 17fbc94..0aeae73 100644 (file)
 #define SINIT(x) x
 #endif
 
+#ifdef __DEPUTY__
+#pragma nodeputy
+#endif
+
 #include <ros/common.h>
 #include <ros/error.h>
 #include <pmap.h>
index 6dcba14..6be1bea 100644 (file)
@@ -14,9 +14,9 @@
 #include <pmap.h>
 #include <string.h>
 
-static void __page_decref(page_t *page);
+static void __page_decref(page_t *CT(1) page);
 static error_t __page_alloc_specific(page_t** page, size_t ppn);
-static error_t __page_free(page_t* page);
+static error_t __page_free(page_t *CT(1) page);
 
 /**
  * @brief Clear a Page structure.
index 0e55bbc..0108e2f 100644 (file)
@@ -325,7 +325,7 @@ void proc_destroy(struct proc *p)
                case PROC_RUNNABLE_M:
                        /* Need to reclaim any cores this proc might have, even though it's
                         * not running yet. */
-                       proc_take_allcores(p, 0);
+                       proc_take_allcores(p, NULL, NULL, NULL, NULL);
                        // fallthrough
                case PROC_RUNNABLE_S:
                        // Think about other lists, like WAITING, or better ways to do this
@@ -355,7 +355,8 @@ void proc_destroy(struct proc *p)
                         * deallocate the cores.
                         * The rule is that the vcoremap is set before proc_run, and reset
                         * within proc_destroy */
-                       proc_take_allcores(p, __death);
+                       proc_take_allcores(p, __death, (void *SNT)0, (void *SNT)0,
+                                          (void *SNT)0);
                        break;
                default:
                        // TODO: getting here if it's already dead and free (ENV_FREE).
@@ -496,8 +497,13 @@ void proc_yield(struct proc *SAFE p)
  * all of them, since it seems like an all or nothing deal right now.
  *
  * WARNING: You must hold the proc_lock before calling this!*/
+
+// zra: If corelist has *num elements, then it would be best if the value is
+// passed instead of a pointer to it. If in the future some way will be needed
+// to return the number of cores, then it might be best to use a separate
+// parameter for that.
 error_t proc_give_cores(struct proc *SAFE p, uint32_t corelist[], size_t *num)
-{
+{ TRUSTEDBLOCK
        uint32_t free_vcoreid = 0;
        switch (p->state) {
                case (PROC_RUNNABLE_S):
@@ -546,7 +552,8 @@ error_t proc_give_cores(struct proc *SAFE p, uint32_t corelist[], size_t *num)
                                                             (uint32_t)p, (uint32_t)&p->env_tf, 0);
                                else */
                                send_active_msg_sync(corelist[i], __startcore, p,
-                                                    (void*)0, (void*)free_vcoreid);
+                                                    (struct Trapframe *)0,
+                                                    (void*SNT)free_vcoreid);
                        }
                        break;
                default:
@@ -565,7 +572,7 @@ error_t proc_give_cores(struct proc *SAFE p, uint32_t corelist[], size_t *num)
  *
  * WARNING: You must hold the proc_lock before calling this!*/
 error_t proc_set_allcores(struct proc *SAFE p, uint32_t corelist[], size_t *num,
-                          amr_t message)
+                          amr_t message,TV(a0t) arg0, TV(a1t) arg1, TV(a2t) arg2)
 {
        panic("Set all cores not implemented.\n");
 }
@@ -579,8 +586,8 @@ error_t proc_set_allcores(struct proc *SAFE p, uint32_t corelist[], size_t *num,
  *
  * WARNING: You must hold the proc_lock before calling this!*/
 error_t proc_take_cores(struct proc *SAFE p, uint32_t corelist[], size_t *num,
-                        amr_t message)
-{
+                        amr_t message, TV(a0t) arg0, TV(a1t) arg1, TV(a2t) arg2)
+{ TRUSTEDBLOCK
        uint32_t vcoreid;
        switch (p->state) {
                case (PROC_RUNNABLE_M):
@@ -599,7 +606,7 @@ error_t proc_take_cores(struct proc *SAFE p, uint32_t corelist[], size_t *num,
                assert(p->vcoremap[vcoreid] == corelist[i]);
                if (message)
                        // TODO: careful of active message deadlock (AMDL)
-                       send_active_msg_sync(corelist[i], message, 0, 0, 0);
+                       send_active_msg_sync(corelist[i], message, arg0, arg1, arg2);
                // give the pcore back to the idlecoremap
                idlecoremap[num_idlecores++] = corelist[i];
                p->vcoremap[vcoreid] = -1;
@@ -614,7 +621,8 @@ error_t proc_take_cores(struct proc *SAFE p, uint32_t corelist[], size_t *num,
  * __preempt, it will be sent to the cores.
  *
  * WARNING: You must hold the proc_lock before calling this! */
-error_t proc_take_allcores(struct proc *SAFE p, amr_t message)
+error_t proc_take_allcores(struct proc *SAFE p, amr_t message,
+                           TV(a0t) arg0, TV(a1t) arg1, TV(a2t) arg2)
 {
        uint32_t active_vcoreid = 0;
        switch (p->state) {
@@ -635,7 +643,7 @@ error_t proc_take_allcores(struct proc *SAFE p, amr_t message)
                if (message)
                        // TODO: careful of active message deadlock (AMDL)
                        send_active_msg_sync(p->vcoremap[active_vcoreid], message,
-                                            (void *SNT)0, (void *SNT)0, (void *SNT)0);
+                                            arg0, arg1, arg2);
                // give the pcore back to the idlecoremap
                idlecoremap[num_idlecores++] = p->vcoremap[active_vcoreid];
                p->vcoremap[active_vcoreid] = -1;
index 6ccbdaf..29238cd 100644 (file)
@@ -6,6 +6,10 @@
  * Kernel resource management.
  */
 
+#ifdef __IVY__
+#pragma nosharc
+#endif
+
 #include <resource.h>
 #include <process.h>
 #include <stdio.h>
index e6d1ab4..ab7be03 100644 (file)
  * controlling bufctl at the top of the slab object.  Fix this with TODO (BUF).
  */
 
+#ifdef __IVY__
+#pragma nodeputy
+#pragma nosharc
+#endif
+
 #include <slab.h>
 #include <stdio.h>
 #include <assert.h>
index 916cd04..12154d5 100644 (file)
@@ -816,16 +816,17 @@ static void test_single_cache(int iters, size_t size, int align, int flags,
        printk("\n\n\n\n");
 }
 
+void a_ctor(void *buf, size_t size)
+{
+       printk("constructin tests\n");
+}
+void a_dtor(void *buf, size_t size)
+{
+       printk("destructin tests\n");
+}
+
 void test_slab(void)
 {
-       void a_ctor(void *buf, size_t size)
-       {
-               printk("constructin tests\n");
-       }
-       void a_dtor(void *buf, size_t size)
-       {
-               printk("destructin tests\n");
-       }
        test_single_cache(10, 128, 512, 0, 0, 0);
        test_single_cache(10, 128, 4, 0, a_ctor, a_dtor);
        test_single_cache(10, 1024, 16, 0, 0, 0);
index 33e5d73..0dc2061 100644 (file)
@@ -47,7 +47,7 @@ int main(int argc, char** argv)
                switch (test) {
                        case TEST_MMAP:
                                cprintf("Testing MMAP\n");
-                               void* addr;
+                               void*CT(8*PGSIZE) addr;
                                addr = sys_mmap((void*SNT)USTACKTOP - 20*PGSIZE, 8*PGSIZE, 3,
                                                MAP_FIXED, 0, 0);
                                cprintf("got addr = 0x%08x\n", addr);
@@ -58,7 +58,9 @@ int main(int argc, char** argv)
                                cprintf("reading addr+3pg: 0x%08x\n", *(int*)(addr + 3*PGSIZE));
                                // this should fault
                                cprintf("Should page fault and die now.\n");
+                               { TRUSTEDBLOCK
                                *(int*)(addr - 3*PGSIZE) = 0xdeadbeef;
+                               }
                                cprintf("Should not see me!!!!!!!!!!!!!!!!!!\n");
                                while(1);
                        case TEST_ONE_CORE: