/kernel/trunk/arch/ia32/include/interrupt.h |
---|
59,7 → 59,6 |
#define VECTOR_SYSCALL (IVT_FREEBASE+0) |
#define VECTOR_TLB_SHOOTDOWN_IPI (IVT_FREEBASE+1) |
#define VECTOR_WAKEUP_IPI (IVT_FREEBASE+2) |
extern void (* disable_irqs_function)(__u16 irqmask); |
extern void (* enable_irqs_function)(__u16 irqmask); |
72,7 → 71,6 |
extern void page_fault(int n, void *stack); |
extern void syscall(int n, void *stack); |
extern void tlb_shootdown_ipi(int n, void *stack); |
extern void wakeup_ipi(int n, void *stack); |
extern void trap_virtual_enable_irqs(__u16 irqmask); |
extern void trap_virtual_disable_irqs(__u16 irqmask); |
/kernel/trunk/arch/ia32/include/mm/page.h |
---|
85,7 → 85,8 |
unsigned page_cache_disable : 1; |
unsigned accessed : 1; |
unsigned dirty : 1; |
unsigned : 2; |
unsigned pat : 1; |
unsigned global : 1; |
unsigned avl : 3; |
unsigned frame_address : 20; |
} __attribute__ ((packed)); |
100,7 → 101,8 |
p->uaccessible<<PAGE_USER_SHIFT | |
1<<PAGE_READ_SHIFT | |
p->writeable<<PAGE_WRITE_SHIFT | |
1<<PAGE_EXEC_SHIFT |
1<<PAGE_EXEC_SHIFT | |
p->global<<PAGE_GLOBAL_SHIFT |
); |
} |
112,6 → 114,7 |
p->present = !(flags & PAGE_NOT_PRESENT); |
p->uaccessible = (flags & PAGE_USER) != 0; |
p->writeable = (flags & PAGE_WRITE) != 0; |
p->global = (flags & PAGE_GLOBAL) != 0; |
} |
extern void page_arch_init(void); |
/kernel/trunk/arch/ia32/src/ia32.c |
---|
65,7 → 65,6 |
#ifdef CONFIG_SMP |
exc_register(VECTOR_TLB_SHOOTDOWN_IPI, "tlb_shootdown", |
tlb_shootdown_ipi); |
exc_register(VECTOR_WAKEUP_IPI, "wakeup_ipi", wakeup_ipi); |
#endif /* CONFIG_SMP */ |
} |
} |
/kernel/trunk/arch/ia32/src/mm/page.c |
---|
45,6 → 45,7 |
void page_arch_init(void) |
{ |
__address cur; |
int flags; |
if (config.cpu_active == 1) { |
page_mapping_operations = &pt_mapping_operations; |
52,8 → 53,12 |
/* |
* PA2KA(identity) mapping for all frames until last_frame. |
*/ |
for (cur = 0; cur < last_frame; cur += FRAME_SIZE) |
page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, PAGE_CACHEABLE); |
for (cur = 0; cur < last_frame; cur += FRAME_SIZE) { |
flags = PAGE_CACHEABLE; |
if ((PA2KA(cur) >= config.base) && (PA2KA(cur) < config.base + config.kernel_size)) |
flags |= PAGE_GLOBAL; |
page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags); |
} |
exc_register(14, "page_fault", page_fault); |
write_cr3((__address) AS_KERNEL->page_table); |
/kernel/trunk/arch/ia32/src/interrupt.c |
---|
127,11 → 127,6 |
tlb_shootdown_ipi_recv(); |
} |
void wakeup_ipi(int n, void *stack) |
{ |
trap_virtual_eoi(); |
} |
void trap_virtual_enable_irqs(__u16 irqmask) |
{ |
if (enable_irqs_function) |