Use generated OBJSIZE_* constants instead of hard-coded values.
authorMoritz Hoffmann <moritz.hoffmann@inf.ethz.ch>
Thu, 13 Oct 2016 12:41:44 +0000 (14:41 +0200)
committerMoritz Hoffmann <moritz.hoffmann@inf.ethz.ch>
Thu, 13 Oct 2016 12:42:28 +0000 (14:42 +0200)
This requires more cleanup of code that still requires sizes in bits, e.g.
the memory server.

Signed-off-by: Moritz Hoffmann <moritz.hoffmann@inf.ethz.ch>

include/barrelfish_kpi/capabilities.h
kernel/cap_delete.c
kernel/capabilities.c
kernel/startup.c
lib/barrelfish/capabilities.c
tools/asmoffsets/asmoffsets.c
usr/drivers/cpuboot/common.c
usr/init/mem_alloc.c
usr/mem_serv/mem_serv.c
usr/mem_serv_dist/mem_serv.h

index 0fd00ef..f338e8c 100644 (file)
 #define L2_CNODE_BITS           8
 /// Number of entries in L2 CNode
 #define L2_CNODE_SLOTS          (1UL << L2_CNODE_BITS)
-/// Size of L2 CNode table in bytes
-#define OBJSIZE_L2CNODE         (L2_CNODE_SLOTS  * (1UL << OBJBITS_CTE))
-
-// Size of dispatcher
-#define OBJBITS_DISPATCHER     10
-
-// Size of kernel control block
-#define OBJBITS_KCB            16
 
 #ifndef __ASSEMBLER__
 
@@ -60,6 +52,9 @@ struct dcb;
 // capbits needs CapRights and dcb;
 #include <barrelfish_kpi/capbits.h>
 
+STATIC_ASSERT((L2_CNODE_SLOTS  * (1UL << OBJBITS_CTE)) == OBJSIZE_L2CNODE,
+        "l2 cnode size doesn't match cte size");
+
 static inline bool type_is_vnode(enum objtype type)
 {
     STATIC_ASSERT(48 == ObjType_Num, "Check VNode definitions");
index 42d8cd9..747bf58 100644 (file)
@@ -237,7 +237,7 @@ cleanup_last(struct cte *cte, struct cte *ret_ram_cap)
         case ObjType_Dispatcher:
             // Convert to genpaddr
             ram.base = local_phys_to_gen_phys(mem_to_local_phys((lvaddr_t)cap->u.dispatcher.dcb));
-            ram.bytes = 1UL << OBJBITS_DISPATCHER;
+            ram.bytes = OBJSIZE_DISPATCHER;
             break;
 
         default:
index 6c1fe38..94b0815 100644 (file)
@@ -415,17 +415,17 @@ static size_t caps_max_numobjs(enum objtype type, gensize_t srcsize, gensize_t o
     }
 
     case ObjType_Dispatcher:
-        if (srcsize < 1UL << OBJBITS_DISPATCHER) {
+        if (srcsize < OBJSIZE_DISPATCHER) {
             return 0;
         } else {
-            return srcsize / (1UL << OBJBITS_DISPATCHER);
+            return srcsize / OBJSIZE_DISPATCHER;
         }
 
     case ObjType_KernelControlBlock:
-        if (srcsize < 1UL << OBJBITS_KCB) {
+        if (srcsize < OBJSIZE_KCB) {
             return 0;
         } else {
-            return srcsize / (1UL << OBJBITS_KCB);
+            return srcsize / OBJSIZE_KCB;
         }
 
     case ObjType_Kernel:
@@ -528,17 +528,17 @@ static errval_t caps_zero_objects(enum objtype type, lpaddr_t lpaddr,
 
     case ObjType_Dispatcher:
         debug(SUBSYS_CAPS, "Dispatcher: zeroing %zu bytes @%#"PRIxLPADDR"\n",
-                ((size_t)1 << OBJBITS_DISPATCHER) * count, lpaddr);
+                ((size_t) OBJSIZE_DISPATCHER) * count, lpaddr);
         TRACE(KERNEL, BZERO, 1);
-        memset((void*)lvaddr, 0, (1UL << OBJBITS_DISPATCHER) * count);
+        memset((void*)lvaddr, 0, OBJSIZE_DISPATCHER * count);
         TRACE(KERNEL, BZERO, 0);
         break;
 
     case ObjType_KernelControlBlock:
         debug(SUBSYS_CAPS, "KCB: zeroing %zu bytes @%#"PRIxLPADDR"\n",
-                ((size_t)1 << OBJBITS_KCB) * count, lpaddr);
+                ((size_t) OBJSIZE_KCB) * count, lpaddr);
         TRACE(KERNEL, BZERO, 1);
-        memset((void*)lvaddr, 0, (1UL << OBJBITS_KCB) * count);
+        memset((void*)lvaddr, 0, OBJSIZE_KCB * count);
         TRACE(KERNEL, BZERO, 0);
         break;
 
@@ -971,12 +971,12 @@ static errval_t caps_create(enum objtype type, lpaddr_t lpaddr, gensize_t size,
     }
 
     case ObjType_Dispatcher:
-        assert((1UL << OBJBITS_DISPATCHER) >= sizeof(struct dcb));
+        assert(OBJSIZE_DISPATCHER >= sizeof(struct dcb));
 
         for(dest_i = 0; dest_i < count; dest_i++) {
             // Initialize type specific fields
             temp_cap.u.dispatcher.dcb = (struct dcb *)
-                (lvaddr + dest_i * (1UL << OBJBITS_DISPATCHER));
+                (lvaddr + dest_i * OBJSIZE_DISPATCHER);
             // Insert the capability
             err = set_cap(&dest_caps[dest_i].cap, &temp_cap);
             if (err_is_fail(err)) {
@@ -1032,12 +1032,12 @@ static errval_t caps_create(enum objtype type, lpaddr_t lpaddr, gensize_t size,
         break;
 
     case ObjType_KernelControlBlock:
-        assert((1UL << OBJBITS_KCB) >= sizeof(struct kcb));
+        assert(OBJSIZE_KCB >= sizeof(struct kcb));
 
         for(size_t i = 0; i < count; i++) {
             // Initialize type specific fields
             temp_cap.u.kernelcontrolblock.kcb = (struct kcb *)
-                (lvaddr + i * (1UL << OBJBITS_KCB));
+                (lvaddr + i * OBJSIZE_KCB);
             // Insert the capability
             err = set_cap(&dest_caps[i].cap, &temp_cap);
             if (err_is_fail(err)) {
@@ -1355,14 +1355,14 @@ static bool check_caps_create_arguments(enum objtype type,
 
     /* special case Dispatcher which is 1kB right now */
     if (type == ObjType_Dispatcher) {
-        if (bytes & ((1UL << OBJBITS_DISPATCHER) - 1)) {
+        if (bytes & (OBJSIZE_DISPATCHER - 1)) {
             return false;
         }
-        if (objsize > 0 && objsize != 1UL << OBJBITS_DISPATCHER) {
+        if (objsize > 0 && objsize != OBJSIZE_DISPATCHER) {
             return false;
         }
 
-        if (exact && bytes % (1UL << OBJBITS_DISPATCHER)) {
+        if (exact && bytes % OBJSIZE_DISPATCHER) {
             return false;
         }
 
index 2b78b3f..fd23c85 100644 (file)
@@ -235,8 +235,8 @@ struct dcb *spawn_module(struct spawn_state *st,
     struct cte *init_dcb_cte = caps_locate_slot(CNODE(st->taskcn),
                                                 TASKCN_SLOT_DISPATCHER);
     err = caps_create_new(ObjType_Dispatcher,
-                          alloc_phys(1UL << OBJBITS_DISPATCHER),
-                          1UL << OBJBITS_DISPATCHER, 0, my_core_id, init_dcb_cte);
+                          alloc_phys(OBJSIZE_DISPATCHER),
+                          OBJSIZE_DISPATCHER, 0, my_core_id, init_dcb_cte);
     assert(err_is_ok(err));
     struct dcb *init_dcb = init_dcb_cte->cap.u.dispatcher.dcb;
 
index 45e7a1d..03d0073 100644 (file)
@@ -766,7 +766,8 @@ errval_t dispatcher_create(struct capref dest)
     errval_t err;
 
     struct capref ram;
-    err = ram_alloc(&ram, OBJBITS_DISPATCHER);
+    assert(1 << log2ceil(OBJSIZE_DISPATCHER) == OBJSIZE_DISPATCHER);
+    err = ram_alloc(&ram, log2ceil(OBJSIZE_DISPATCHER));
     if (err_is_fail(err)) {
         return err_push(err, LIB_ERR_RAM_ALLOC);
     }
index 80a4b98..bb2673f 100644 (file)
@@ -200,7 +200,7 @@ void dummy(void)
 #error "Define architecture"
 #endif
     ASSERT(sizeof(struct cte) <= (1UL << OBJBITS_CTE));
-    ASSERT(sizeof(struct dcb) <= (1UL << OBJBITS_DISPATCHER));
+    ASSERT(sizeof(struct dcb) <= OBJSIZE_DISPATCHER);
 
     union lmp_recv_header rcvheader;
     EMIT(SIZEOF_LMP_RECV_HEADER, sizeof(rcvheader));
index 3101bd7..7c41150 100644 (file)
@@ -95,7 +95,8 @@ errval_t create_or_get_kcb_cap(coreid_t coreid, struct capref* the_kcb)
     DEBUG("%s:%s:%d: Create a new kcb (new_kcb_flag = %d)\n",
           __FILE__, __FUNCTION__, __LINE__, new_kcb_flag);
 
-    err = ram_alloc(&kcb_mem, OBJBITS_KCB);
+    assert(1 << log2ceil(OBJSIZE_KCB) == OBJSIZE_KCB);
+    err = ram_alloc(&kcb_mem, log2ceil(OBJSIZE_KCB));
     if (err_is_fail(err)) {
         DEBUG_ERR(err, "frame alloc");
         return err;
@@ -109,7 +110,7 @@ errval_t create_or_get_kcb_cap(coreid_t coreid, struct capref* the_kcb)
 
     err = cap_retype(*the_kcb, kcb_mem, 0,
                      ObjType_KernelControlBlock,
-                     1UL << OBJBITS_KCB, 1);
+                     OBJSIZE_KCB, 1);
     if (err_is_fail(err)) {
         DEBUG_ERR(err, "Failure in cap_retype.");
     }
index 3734971..3e9544d 100644 (file)
@@ -16,6 +16,7 @@
 #include <mm/mm.h>
 
 /* parameters for local memory allocator used until we spawn mem_serv */
+#define OBJBITS_DISPATCHER (10)
 #define MM_REQUIREDBITS    24          ///< Required size of memory to boot (16MB)
 #define MM_REQUIREDBYTES   (1UL << MM_REQUIREDBITS)
 #define MM_MAXSIZEBITS     (MM_REQUIREDBITS + 3) ///< Max size of memory in allocator
@@ -116,6 +117,7 @@ errval_t initialize_ram_alloc(void)
     }
 
     /* give MM allocator enough static storage for its node allocator */
+    assert(1UL << OBJBITS_DISPATCHER == OBJSIZE_DISPATCHER);
     static char nodebuf[SLAB_STATIC_SIZE(MM_NNODES, MM_NODE_SIZE(MM_MAXCHILDBITS))];
     slab_grow(&mymm.slabs, nodebuf, sizeof(nodebuf));
 
index 2517717..3c4eb28 100644 (file)
@@ -46,6 +46,7 @@ size_t mem_total = 0, mem_avail = 0;
 #       error Unknown architecture
 #endif
 
+#define OBJBITS_DISPATCHER 10
 #define MINSIZEBITS     OBJBITS_DISPATCHER ///< Min size of each allocation
 #define MAXCHILDBITS    4               ///< Max branching of BTree nodes
 
index 3dea287..8e4882c 100644 (file)
@@ -47,6 +47,7 @@ typedef genpaddr_t memsize_t;
 #       error Unknown architecture
 #endif
 
+#define OBJBITS_DISPATCHER 10
 #define MINALLOCBITS    17 /// HACK: Min bits to alloc from mem_serv for local
                          /// percore memory. leaves some over for other uses
 #define MINSIZEBITS     OBJBITS_DISPATCHER ///< Min size of each allocation