X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/474a5dd282586c31abfefc7953f148acdc226731..9461d582084ab8c0d85e8dca1df276945366a84b:/lunaix-os/kernel/asm/x86/interrupt.S diff --git a/lunaix-os/kernel/asm/x86/interrupt.S b/lunaix-os/kernel/asm/x86/interrupt.S index 48dff2f..b4ce936 100644 --- a/lunaix-os/kernel/asm/x86/interrupt.S +++ b/lunaix-os/kernel/asm/x86/interrupt.S @@ -36,13 +36,16 @@ isr_template LUNAIX_SYS_PANIC isr_template LUNAIX_SYS_CALL + isr_template LUNAIX_SCHED isr_template APIC_ERROR_IV isr_template APIC_LINT0_IV isr_template APIC_TIMER_IV isr_template APIC_SPIV_IV isr_template RTC_TIMER_IV + isr_template PC_KBD_IV + isr_template AHCI_HBA_IV interrupt_wrapper: /* @@ -117,6 +120,12 @@ soft_iret: movl %eax, %esp +#ifdef __ASM_INTR_DIAGNOSIS + movl %eax, (debug_resv + 8) + movl 56(%esp), %eax + movl %eax, (debug_resv + 4) +#endif + popl %eax popl %ebx popl %ecx @@ -157,17 +166,17 @@ # 约定 # arg1: 目标进程PCB地址 (next - popl %ecx # next + popl %ebx # next movl __current, %eax - movl 88(%eax), %ebx # __current->pagetable - movl 88(%ecx), %eax # next->pagetable + movl 88(%eax), %ecx # __current->pagetable + movl 88(%ebx), %eax # next->pagetable - cmpl %ebx, %eax # if(next->pagtable != __current->pagetable) { + cmpl %ecx, %eax # if(next->pagtable != __current->pagetable) { jz 1f movl %eax, %cr3 # cpu_lcr3(next->pagetable) # } 1: - movl %ecx, __current # __current = next + movl %ebx, __current # __current = next # 我们已经处在了新的地址空间,为了避免影响其先前的栈布局 # 需要使用一个临时的栈空间 @@ -178,7 +187,7 @@ jz 1f jmp handle_signal 1: - leal 8(%ecx), %eax + leal 8(%ebx), %eax jmp soft_iret .global handle_signal