diff --git a/kernel/main.c b/kernel/main.c index f0d3171d4e..e9c2bda358 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -10,12 +10,13 @@ volatile static int started = 0; void main() { + // Initialize an array to hold a waitcycle count per cpu. + uint waitcycle[NCPU]; + if(cpuid() == 0){ consoleinit(); printfinit(); - printf("\n"); - printf("xv6 kernel is booting\n"); - printf("\n"); + printf("\nxv6 kernel is booting\n\n"); kinit(); // physical page allocator kvminit(); // create kernel page table kvminithart(); // turn on paging @@ -29,13 +30,17 @@ main() fileinit(); // file table virtio_disk_init(); // emulated hard disk userinit(); // first user process + printf("\n"); + printf("hart %d started\n", cpuid()); __sync_synchronize(); started = 1; } else { - while(started == 0) - ; + waitcycle[cpuid()]=0; + while(started == 0){ + waitcycle[cpuid()]= waitcycle[cpuid()] + 1; //count the waitcylce per hart + } __sync_synchronize(); - printf("hart %d starting\n", cpuid()); + printf("hart %d starting: wait cycle %d\n", cpuid(), waitcycle[cpuid()] ); kvminithart(); // turn on paging trapinithart(); // install kernel trap vector plicinithart(); // ask PLIC for device interrupts