/kernel/trunk/arch/amd64/src/ddi/ddi.c |
34,6 → 34,7 |
#include <mm/slab.h> |
#include <arch/pm.h> |
#include <errno.h> |
#include <arch/cpu.h> |
|
/** Enable I/O space range for task. |
* |
90,3 → 91,17 |
|
return 0; |
} |
|
/** Enable/disable interrupts form syscall |
* |
* @param enable If non-zero, interrupts are enabled, otherwise disabled |
* @param flags CP0 flags register |
*/ |
__native ddi_int_control_arch(__native enable, __native *flags) |
{ |
if (enable) |
*flags |= RFLAGS_IF; |
else |
*flags &= ~RFLAGS_IF; |
return 0; |
} |
/kernel/trunk/arch/amd64/src/asm_utils.S |
243,7 → 243,12 |
|
sti |
movq %r9, %rcx # Exchange last parameter as a third |
|
cmp $2, %r8 # Is this SYS_INT_CONTROL |
je sys_int_ctrl |
|
call syscall_handler |
sys_end: |
cli # We will be touching stack pointer |
|
popq %r11 |
251,6 → 256,12 |
movq 0(%rsp), %rsp |
sysretq |
|
sys_int_ctrl: |
mov %rsp, %rsi # Pointer to flags |
call ddi_int_control |
jmp sys_end |
|
|
.data |
.global interrupt_handler_size |
|
/kernel/trunk/arch/amd64/src/mm/page.c |
168,7 → 168,7 |
page = read_cr2(); |
if (!as_page_fault(page)) { |
print_info_errcode(n, istate); |
printf("Page fault address: %Q\n", page); |
printf("Page fault address: %llX\n", page); |
panic("page fault\n"); |
} |
} |