Scheduler will now set a timer interrupt deadline for when it should get interrupted next. This fixes a big issue I've had for a long time where sleeping on an idle core would have to wait for the next periodic interrupt to wake up. This could cause 1 ms sleeps to be close to 10 ms. This currently only supports lapic timers and will still fallback to periodic interrupts when running with PIC. I should add deadline support to PIT/HPET but why would you run with APIC disabled ;)
26 lines
351 B
ArmAsm
26 lines
351 B
ArmAsm
.global asm_yield_trampoline
|
|
asm_yield_trampoline:
|
|
leal 4(%esp), %ecx
|
|
movl 4(%esp), %esp
|
|
|
|
pushl -4(%ecx)
|
|
pushl %ecx
|
|
pushl %eax
|
|
pushl %ebx
|
|
pushl %esi
|
|
pushl %edi
|
|
pushl %ebp
|
|
|
|
pushl %esp
|
|
call scheduler_on_yield_trampoline
|
|
addl $4, %esp
|
|
|
|
popl %ebp
|
|
popl %edi
|
|
popl %esi
|
|
popl %ebx
|
|
popl %eax
|
|
movl 4(%esp), %ecx
|
|
movl 0(%esp), %esp
|
|
jmp *%ecx
|