diff --git a/kernel/ap.c b/kernel/ap.c index 1da79aa1..426a1e70 100644 --- a/kernel/ap.c +++ b/kernel/ap.c @@ -4,6 +4,7 @@ #include #include #include +#include int num_processors = 1; static volatile int ap_stop = 1; @@ -21,10 +22,10 @@ static void ap_wait(void) barrier(); cpu_pause(); } - kprintf("ap started.\n"); kmalloc_init(); sched_init(); /* init_host_syscall_channel(); */ + pc_ap_init(); schedule(); } diff --git a/kernel/include/init.h b/kernel/include/init.h new file mode 100644 index 00000000..f29efd77 --- /dev/null +++ b/kernel/include/init.h @@ -0,0 +1,19 @@ +#ifndef INIT_H +#define INIT_H + +extern void arch_init(void); +extern void kmsg_init(void); +extern void mem_init(void); +extern void ikc_master_init(void); +extern void ap_init(void); +extern void arch_ready(void); +extern void mc_ikc_init(void); +extern void cpu_local_var_init(void); +extern void kmalloc_init(void); +extern void ap_start(void); +extern void aal_mc_dma_init(void); +extern void init_host_syscall_channel(void); +extern void sched_init(void); +extern void pc_ap_init(void); + +#endif diff --git a/kernel/init.c b/kernel/init.c index 68fe3c10..b4062e65 100644 --- a/kernel/init.c +++ b/kernel/init.c @@ -7,24 +7,11 @@ #include #include #include +#include #include extern struct aal_kmsg_buf kmsg_buf; -extern void arch_init(void); -extern void kmsg_init(void); -extern void mem_init(void); -extern void ikc_master_init(void); -extern void ap_init(void); -extern void arch_ready(void); -extern void mc_ikc_init(void); -extern void cpu_local_var_init(void); -extern void kmalloc_init(void); -extern void ap_start(void); -extern void aal_mc_dma_init(void); -extern void init_host_syscall_channel(void); -extern void sched_init(void); - extern long syscall(int, aal_mc_user_context_t *); static void handler_init(void) @@ -77,15 +64,16 @@ char *find_command_line(char *name) return strstr(cmdline, name); } -static void pc_test(void) +void pc_init(void) { int i; int kmode = PERFCTR_KERNEL_MODE; int imode = 1; char *p; - int x[2][4] = { { APT_TYPE_L1D_REQUEST, + + int x[2][4] = { { APT_TYPE_INSTRUCTIONS, APT_TYPE_L1D_MISS, - APT_TYPE_L2_MISS, APT_TYPE_INSTRUCTIONS, }, + APT_TYPE_L2_MISS, APT_TYPE_L1I_MISS, }, { APT_TYPE_L1I_MISS, APT_TYPE_LLC_MISS, APT_TYPE_STALL, APT_TYPE_CYCLE }, }; @@ -110,6 +98,29 @@ static void pc_test(void) aal_mc_perfctr_start(0xf); } +void pc_ap_init(void) +{ + pc_init(); +} + +static void pc_test(void) +{ + int i; + unsigned long st[4], ed[4]; + + pc_init(); + + aal_mc_perfctr_read_mask(0xf, st); + for (i = 0; i < sizeof(data) / sizeof(data[0]); i++) { + data[i] += i; + asm volatile ("" : : : "memory"); + } + aal_mc_perfctr_read_mask(0xf, ed); + + kprintf("perfctr:(%ld) %ld, %ld, %ld, %ld\n", st[0], ed[0] - st[0], + ed[1] - st[1], ed[2] - st[2], ed[3] - st[3]); +} + static void rest_init(void) { handler_init();