summaryrefslogtreecommitdiff
path: root/kern/kernel.c
diff options
context:
space:
mode:
authorHanjie Wu <hanjiew@andrew.cmu.edu>2023-04-24 03:51:54 -0400
committerHanjie Wu <hanjiew@andrew.cmu.edu>2023-04-24 03:55:02 -0400
commit6b13d5d9b1ff1cb38bb50e918e51a241a225f8da (patch)
tree90e8e5da37402975d769184aeb4b51fa13b610f3 /kern/kernel.c
parente021b8f12ad129c0bdbda3111bb93a170e21ae41 (diff)
timer
Diffstat (limited to 'kern/kernel.c')
-rw-r--r--kern/kernel.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/kern/kernel.c b/kern/kernel.c
index 057b6fe..bd675a5 100644
--- a/kern/kernel.c
+++ b/kern/kernel.c
@@ -55,6 +55,7 @@ static void kernel_smp_main();
int kernel_main(mbinfo_t* mbinfo, int argc, char** argv, char** envp) {
int smp_good = (smp_init(mbinfo) == 0);
paging_init();
+ setup_pts();
percpu_t percpu;
setup_percpu(&percpu);
thread_t kthread;
@@ -62,12 +63,12 @@ int kernel_main(mbinfo_t* mbinfo, int argc, char** argv, char** envp) {
setup_kth(&kthread, &kprocess);
set_mapped_phys_page(mapped_phys_pages);
set_mapped_phys_page_pte(mapped_phys_page_ptes);
- setup_pts();
idt_init();
mm_init();
- timer_init();
pv_init();
+ timer_init();
+
print_toad();
const char* init_args[] = {INIT_NAME};
@@ -76,11 +77,12 @@ int kernel_main(mbinfo_t* mbinfo, int argc, char** argv, char** envp) {
add_thread(init);
insert_ready_tail(init);
- if (smp_good && smp_num_cpus() > 1 && 0) {
- /* SMP not enabled */
+ if (smp_good && smp_num_cpus() > 1) {
+ set_cr3((pa_t)&kernel_pd);
smp_boot(kernel_smp_entry);
}
+ setup_lapic_timer();
kernel_smp_main();
return -1;
}
@@ -94,6 +96,7 @@ static void kernel_smp_entry(int cpuid) {
setup_kth(&kthread, &kprocess);
set_mapped_phys_page(mapped_phys_pages + cpuid * PAGE_SIZE);
set_mapped_phys_page_pte(mapped_phys_page_ptes + cpuid);
+ setup_lapic_timer();
kernel_smp_main();
}