diff --git a/kernel/kdb/api/v4/thread.cc b/kernel/kdb/api/v4/thread.cc index 712d5ab5..b3a2718d 100644 --- a/kernel/kdb/api/v4/thread.cc +++ b/kernel/kdb/api/v4/thread.cc @@ -73,7 +73,7 @@ int print_tid (word_t val, word_t width, word_t precision, bool adjleft) addr_to_tcb((addr_t) val) == get_idle_tcb() || addr_to_tcb((addr_t) val) == get_kdebug_tcb()) { - tcb = addr_to_tcb ((addr_t) val); + tcb = addr_to_tcb ((addr_t) val); tid = tcb->get_global_id (); } else @@ -88,15 +88,12 @@ int print_tid (word_t val, word_t width, word_t precision, bool adjleft) threadid_t ktid; ktid.set_global_id (get_kip ()->thread_info.get_system_base (), 1); - if (tcb->get_global_id() == ktid) + if (tid == ktid) return print_string ("KRN_THRD", width, precision); - if (tcb == get_idle_tcb ()) + if (tid == IDLETHREAD) return print_string ("IDLETHRD", width, precision); - if (tcb == get_kdebug_tcb()) - return print_string ("KDBTHRD", width, precision); - if (tid.is_nilthread ()) return print_string ("NIL_THRD", width, precision); @@ -115,6 +112,10 @@ int print_tid (word_t val, word_t width, word_t precision, bool adjleft) const char *names[3] = { "SIGMA0", "SIGMA1", "ROOTTASK" }; return print_string (names[base_id], width, precision); } + + if (tcb == get_kdebug_tcb()) + return print_string ("KDBTHRD", width, precision); + } // We're dealing with something which is not a special thread ID. diff --git a/kernel/src/api/v4/schedule.cc b/kernel/src/api/v4/schedule.cc index 8458a636..06759437 100644 --- a/kernel/src/api/v4/schedule.cc +++ b/kernel/src/api/v4/schedule.cc @@ -382,7 +382,7 @@ typedef void (*func_ptr_t) (void); void SECTION(".init") scheduler_t::init( bool bootcpu ) { - TRACE_INIT ("\tInitializing threading CPU %d\n", get_current_cpu()); + TRACE_INIT ("\tInitializing threading (CPU %d)\n", get_current_cpu()); policy_scheduler_init(); diff --git a/kernel/src/generic/asid.h b/kernel/src/generic/asid.h index e8db187d..0f69f8cf 100644 --- a/kernel/src/generic/asid.h +++ b/kernel/src/generic/asid.h @@ -3,7 +3,7 @@ * Copyright (C) 1999-2010, Karlsruhe University * Copyright (C) 2008-2009, Volkmar Uhlig, IBM Corporation * - * File path: src/generic/asid.h + * File path: generic/asid.h * Description: * * Redistribution and use in source and binary forms, with or without @@ -83,8 +83,6 @@ public: void init(word_t start, word_t end) { - TRACE_INIT("asid_manager init %x -> %x\n", start, end); - free_list = NULL; timestamp = 0; diff --git a/kernel/src/glue/v4-powerpc/init.cc b/kernel/src/glue/v4-powerpc/init.cc index 017be755..09565c99 100644 --- a/kernel/src/glue/v4-powerpc/init.cc +++ b/kernel/src/glue/v4-powerpc/init.cc @@ -94,15 +94,15 @@ static void fatal( char *msg ) while( 1 ) ; } -SECTION(SEC_INIT) void timer_init( word_t cpu_hz, word_t bus_hz ) +SECTION(SEC_INIT) void timer_init( word_t cpu_hz, word_t bus_hz, word_t cpu ) { word_t decrementer_hz; decrementer_hz = bus_hz / 1; decrementer_interval = TIMER_TICK_LENGTH * (decrementer_hz / 1000) / 1000; - TRACE_INIT( "Decrementer %d (KHz), timer tick %d (us), " - "decrementer ticks %d\n", decrementer_hz/1000, - TIMER_TICK_LENGTH, decrementer_interval ); + TRACE_INIT( "\tDecrementer %d KHz, timer tick %d us\n" + "\tDecrementer ticks %d (CPU %d)\n", decrementer_hz/1000, + TIMER_TICK_LENGTH, decrementer_interval, cpu ); } /***************************************************************************** @@ -236,7 +236,8 @@ SECTION(SEC_INIT) static void kip_cpu_init( kernel_interface_page_t *kip ) // Invoked for each processor. { static word_t cpu_khz = 0, bus_khz = 0; - + word_t cpu = get_current_cpu(); + if( cpu_khz == 0 ) { word_t cpu_hz, bus_hz; @@ -251,10 +252,10 @@ SECTION(SEC_INIT) static void kip_cpu_init( kernel_interface_page_t *kip ) cpu_khz = cpu_hz / 1000; bus_khz = bus_hz / 1000; - TRACE_INIT( "PowerPC cpu speed: %d (KHz)\n", cpu_khz ); - TRACE_INIT( "Bus speed: %d (KHz)\n", bus_khz ); + TRACE_INIT( "\tPowerPC CPU speed: %d KHz (CPU %d)\n", cpu_khz, cpu); + TRACE_INIT( "\tBus speed: %d KHz (CPU %d)\n", bus_khz, cpu); - timer_init( cpu_hz, bus_hz ); + timer_init( cpu_hz, bus_hz, cpu ); } init_cpu( get_current_cpu(), bus_khz, cpu_khz ); @@ -314,7 +315,7 @@ SECTION(SEC_INIT) static void reclaim_cpu_kmem() } #endif -SECTION(SEC_INIT) static word_t do_kmem_init() +SECTION(SEC_INIT) static word_t init_bootmem() { word_t bootmem_low, bootmem_high; word_t tot, size; @@ -328,7 +329,6 @@ SECTION(SEC_INIT) static word_t do_kmem_init() #else bootmem_high = bootmem_low + KB(512); #endif - TRACE_INIT("kmem init %x-%x\n", bootmem_low, bootmem_high); kmem.init( (addr_t)bootmem_low, (addr_t)bootmem_high ); tot = bootmem_high - bootmem_low; @@ -341,21 +341,20 @@ SECTION(SEC_INIT) static word_t do_kmem_init() // Claim the memory between the end of the kernel data section and // the start of the cpu data page. size = cpu_phys_area(0) - (word_t)memcfg_end_data_phys(); - TRACE_INIT("kmem add %x/ %x\n", phys_to_virt(memcfg_end_data_phys()), size); if( size ) kmem.add( phys_to_virt(memcfg_end_data_phys()), size ); tot += size; - TRACE_INIT( "Kernel boot mem: %d bytes\n", tot ); return virt_to_phys(bootmem_high); } #elif defined(CONFIG_PPC_MMU_TLB) +#if defined(CONFIG_SMP) SECTION(SEC_INIT) static void reclaim_cpu_kmem() { } - -SECTION(SEC_INIT) static word_t do_kmem_init() +#endif +SECTION(SEC_INIT) static word_t init_bootmem() { addr_t bootmem_low, bootmem_high; word_t tot; @@ -365,11 +364,9 @@ SECTION(SEC_INIT) static word_t do_kmem_init() bootmem_low = phys_to_virt( memcfg_end_cpu_phys() ); bootmem_high = addr_offset(bootmem_low, KB(3584)); - TRACE_INIT("kmem init %p-%p\n", bootmem_low, bootmem_high); kmem.init( bootmem_low, bootmem_high ); tot = (word_t)bootmem_high - (word_t)bootmem_low; - TRACE_INIT( "Kernel boot mem: %d bytes\n", tot ); return virt_to_phys((word_t)bootmem_high); } #endif @@ -569,7 +566,6 @@ SECTION(SEC_INIT) static void finish_api_init( void ) cpu_t::add_cpu(0); #if defined(CONFIG_SMP) - reclaim_cpu_kmem(); start_all_cpus(); #endif @@ -694,7 +690,7 @@ extern "C" void SECTION(SEC_INIT) startup_system ( word_t r3, word_t r4, word_t /* Init all of our memory related stuff. */ - word_t bootmem_phys_high = do_kmem_init(); + word_t bootmem_phys_high = init_bootmem(); kip_mem_init( get_kip(), bootmem_phys_high ); TRACE_INIT("Initializing kernel space\n"); @@ -719,9 +715,11 @@ extern "C" void SECTION(SEC_INIT) startup_system ( word_t r3, word_t r4, word_t TRACE_INIT("Initializing mapping database\n"); init_mdb(); + /* Initialize the idle tcb, and push notify frames for starting * the idle thread. */ get_current_scheduler()->init( true ); + /* Push a notify frame for the second stage of initialization, which * executes in the context of the idle thread. This must execute * before the scheduler's notify frames. */ diff --git a/kernel/src/glue/v4-powerpc/space-swtlb.cc b/kernel/src/glue/v4-powerpc/space-swtlb.cc index 35c29f71..820e582c 100644 --- a/kernel/src/glue/v4-powerpc/space-swtlb.cc +++ b/kernel/src/glue/v4-powerpc/space-swtlb.cc @@ -146,9 +146,9 @@ void SECTION(".init.memory") space_t::init_cpu_mappings(cpuid_t cpu) memcpy(page, phys_to_virt(_cpu_phys), 1 << log2size); } - TRACE_INIT("mapping %p/%p -> %p, log2sz=%d, TLB entry: %d\n", + TRACE_INIT("\tMapping %p/%p -> %p, log2sz=%d, TLB entry: %d (CPU %d)\n", page, virt_to_phys(page), CPU_AREA_START, log2size, - swtlb_high_water); + swtlb_high_water, cpu); tlb0.init_vaddr_size(CPU_AREA_START, log2size); tlb1.init_paddr((paddr_t)virt_to_phys(page)); @@ -164,6 +164,7 @@ void SECTION(".init.memory") space_t::init_cpu_mappings(cpuid_t cpu) /* * CPU local mappings exist now */ + TRACE_INIT("\tASID manager init %x -> %x (CPU %d)\n", 1, CONFIG_MAX_NUM_ASIDS-1, cpu); asid_manager.init(1, CONFIG_MAX_NUM_ASIDS - 1); ASSERT(this == get_kernel_space()); this->cpu[cpu].asid.init_kernel(0); @@ -178,7 +179,7 @@ void SECTION(".init.memory") space_t::init_cpu_mappings(cpuid_t cpu) init_swtlb[idx].tlb0.read(idx); init_swtlb[idx].tlb1.read(idx); init_swtlb[idx].tlb2.read(idx); - TRACEF("TLB%d: %lx, %lx, %lx\n", idx, init_swtlb[idx].tlb0.raw, + TRACEF("\tTLB%d: %lx, %lx, %lx\n", idx, init_swtlb[idx].tlb0.raw, init_swtlb[idx].tlb1.raw, init_swtlb[idx].tlb2.raw); } } @@ -493,8 +494,8 @@ SECTION(".init") void setup_kernel_mappings( void ) ppc_tlbsx((u32_t)&init_paging, entry); tlb0.read(entry); - TRACE_INIT("flush boot mapping %x, vaddr=%x, size=%x (%x)\n", - entry, tlb0.get_vaddr(), tlb0.get_size(), tlb0.raw); + TRACE_INIT("Flush boot mapping %x, vaddr=%x, size=%x (%x)\n", + entry, tlb0.get_vaddr(), tlb0.get_size(), tlb0.raw); ppc_tlb0_t::invalid().write(entry); }