From d330a67659624d208698c1aa2727108c6acb793e Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Mon, 2 Jan 2017 15:54:54 +0100 Subject: [PATCH] Create a new TaskStateSegment (that contains the double fault stack in its IST) --- src/interrupts/mod.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/interrupts/mod.rs b/src/interrupts/mod.rs index aad3b782..5c19c5c7 100644 --- a/src/interrupts/mod.rs +++ b/src/interrupts/mod.rs @@ -8,6 +8,7 @@ // except according to those terms. use memory::MemoryController; +use x86::bits64::task::TaskStateSegment; mod idt; @@ -102,10 +103,15 @@ lazy_static! { }; } +const DOUBLE_FAULT_IST_INDEX: usize = 0; + pub fn init(memory_controller: &mut MemoryController) { let double_fault_stack = memory_controller.alloc_stack(1) .expect("could not allocate double fault stack"); + let mut tss = TaskStateSegment::new(); + tss.ist[DOUBLE_FAULT_IST_INDEX] = double_fault_stack.top() as u64; + IDT.load(); }