diff options
| author | Miguel <m.i@gmx.at> | 2018-09-06 01:58:10 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-09-06 01:58:10 +0200 |
| commit | ef4943053475cd8bf341c42dd0b538bc630b92a3 (patch) | |
| tree | b7f59c937797a0ce0603af9ef46a194d4a64ef22 /kernel/smp.c | |
| parent | f67ad595650954195ef064a8b91038dbd0e16842 (diff) | |
working on smp
Diffstat (limited to 'kernel/smp.c')
| -rw-r--r-- | kernel/smp.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/kernel/smp.c b/kernel/smp.c index 4aff013..ea926ca 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -20,29 +20,40 @@ volatile uint8_t proc; uint32_t cpu_counter[SMP_MAX_PROC]; uint32_t local_apic_addr; +extern uint32_t LLOCK; void smp_main() { + uint32_t ebp=kballoc(1); + asm volatile("mov %0, %%ebp"::"r"(ebp)); + asm volatile("mov %ebp, %esp"); + asm volatile("jmp kernel_ap"); +} -// klog("local apic_addr:0x%08X",local_apic_addr); +void kernel_ap() +{ + LLOCK=0; - // // uint32_t *reg=local_apic_addr+FOOLOS_APIC_ID; - //klog("local apic id: 0x%08X",(*reg)); + uint32_t *reg; + reg=local_apic_addr+FOOLOS_APIC_ID; + klog("smp local apic id: %d",(*reg)); // // // *reg=local_apic_addr+FOOLOS_APIC_SPUR_INT; // // // *reg|=0x100;//0xffffffff; // all bits 1 and interrupt 255 // *reg=0;//xffffffff; // all bits 1 and interrupt 255 int_install(); - + x86_sti(); - - - while(1)__asm__("hlt"); + while(1){ + klog("%d",*reg); + for(int i=0;i<1000000000;i++); + } // switch_to_user_mode(); // int x=1/0; + /* while(1); @@ -54,10 +65,11 @@ void smp_main() proc=c1=c2=c3=0; for(int i=0;i<SMP_MAX_PROC;i++)cpu_counter[i]=0; + */ } -void kernel_ap() +void kernel_ap_old() { proc++; uint8_t p=proc; |
