adding of corecount to corectrl to support starting more than one core
authorReto Achermann <reto.achermann@inf.ethz.ch>
Fri, 28 Nov 2014 09:04:15 +0000 (10:04 +0100)
committerReto Achermann <reto.achermann@inf.ethz.ch>
Fri, 28 Nov 2014 09:04:15 +0000 (10:04 +0100)
usr/drivers/cpuboot/common.c
usr/drivers/cpuboot/init_ap_x86_64.S
usr/drivers/cpuboot/main.c

index 8a316a2..9f9fa07 100644 (file)
@@ -14,6 +14,8 @@
 #include "coreboot.h"
 
 extern bool done;
+extern coreid_t core_count;
+extern coreid_t core_max;
 extern struct capref kcb;
 
 char* get_binary_path(char* fmt, char* binary_name)
@@ -44,12 +46,15 @@ void boot_core_reply(struct monitor_binding *st, errval_t msgerr)
         USER_PANIC_ERR(msgerr, "msgerr in boot_core_reply, exiting\n");
     }
     DEBUG("%s:%d: got boot_core_reply.\n", __FILE__, __LINE__);
-    done = true;
+    core_count++;
+    if (core_count == core_max) {
+        done = true;
+    }
 }
 
 static errval_t add_kcb_record(uint32_t kcb_id, coreid_t core_id, char* kcb_key)
 {
-    errval_t err = oct_set("kcb.%d { kcb_id: %d, barrelfish_id: %"PRIuCOREID", cap_key: '%s' }", 
+    errval_t err = oct_set("kcb.%d { kcb_id: %d, barrelfish_id: %"PRIuCOREID", cap_key: '%s' }",
                             kcb_id, kcb_id, core_id, kcb_key);
     if (err_is_fail(err)) {
         DEBUG_ERR(err, "oct_set");
@@ -118,7 +123,7 @@ errval_t create_or_get_kcb_cap(coreid_t coreid, struct capref* the_kcb)
             DEBUG_ERR(err, "can not save the capability.");
             return err;
         }
-        
+
         err = add_kcb_record(coreid, coreid, kcb_key);
         if (err_is_fail(err)) {
             DEBUG_ERR(err, "add_kcb_record failed.");
index dc195e2..59d5fc4 100644 (file)
@@ -103,7 +103,7 @@ rep_fill:
  #ifdef __k1om__
         mov $0, %ecx
         mov $PAGE_BITS, %ebx
- ep_mmio:
+ rep_mmio:
         mov %ebx, init_ap_pdirMMIO - x86_64_start_ap + X86_64_REAL_MODE_LINEAR_OFFSET(%ecx)
         movl $0x8, init_ap_pdirMMIO - x86_64_start_ap + X86_64_REAL_MODE_LINEAR_OFFSET + 4(%ecx)
         add $0x200000, %ebx
index ca18ce8..428878e 100644 (file)
@@ -17,6 +17,8 @@
 coreid_t my_arch_id;
 struct capref ipi_cap;
 
+coreid_t core_count = 0;
+coreid_t core_max = 0;
 bool done = false;
 
 bool benchmark_flag = false;
@@ -193,8 +195,14 @@ static int boot_cpu(int argc, char **argv)
        USER_PANIC("invalid CPU ID: %s", argv[1]);
     }
 
+    core_count = 0;
+    if (core_step == 1) {
+        core_max = (core_to - core_from + 1);
+    } else {
+        core_max = (core_to - core_from + core_step) / core_step;
+    }
+
     for (coreid_t target_id = core_from; target_id<=core_to; target_id += core_step) {
-        //coreid_t target_id = (coreid_t) strtol(argv[1], NULL, 16);
         assert(target_id < MAX_COREID);
 
         archid_t target_apic_id;