Messages in this thread | | | Date | Wed, 29 Jun 2005 01:18:55 +0300 | From | eliad lubovsky <> | Subject | Handle kernel page faults using task gate |
| |
I am trying to handle page faults exceptions in the kernel using the task gate mechanism. I succeeded to transfer the execution to my page fault handler using a new TSS and updates to the GDT and IDT tables (similar to the double fault mechanism in 2.6). After handling the fault and allocating the physical page I use the iret instruction to switch back to the previous task. The problem is that I got a double fault with the same address that cause the fault (although the physical page is allocated and mapped). Any clues?
The new page fault TSS: struct tss_struct pagefault_tss __cacheline_aligned = { .esp0 = STACK_START, .ss0 = __KERNEL_DS, .ldt = 0, .io_bitmap_base = INVALID_IO_BITMAP_OFFSET, .eip = (unsigned long) pagefault_fn, .eflags = X86_EFLAGS_SF|0x2,/* 0x2 bit is always set */ .esp = STACK_START, .es = __USER_DS, .cs = __KERNEL_CS, .ss = __KERNEL_DS, .ds = __USER_DS, .__cr3 = __pa(swapper_pg_dir) };
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |