Skip to content

Commit f5697ee

Browse files
committed
Initialize TLS for idle task
1 parent 5c2373f commit f5697ee

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

src/arch/x86_64/kernel/scheduler.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ use crate::arch::x86_64::mm::paging::{
1616
use crate::config::*;
1717
use crate::env;
1818
use crate::mm::{FrameAlloc, PageAlloc, PageRangeAllocator};
19+
use crate::processor::writefs;
1920
use crate::scheduler::PerCoreSchedulerExt;
21+
use crate::scheduler::task::tls::Tls;
2022
use crate::scheduler::task::{Task, TaskFrame};
2123

2224
#[repr(C, packed)]
@@ -332,3 +334,8 @@ pub fn install_timer_handler() {
332334
}
333335
interrupts::add_irq_name(apic::TIMER_INTERRUPT_NUMBER - 32, "Timer");
334336
}
337+
338+
/// Initializes the TLS for the init/boot task and sets FS register to the respective value
339+
pub fn set_init_task_tls() -> Option<Tls> {
340+
Tls::from_env().inspect(|tls| writefs(tls.thread_ptr().addr()))
341+
}

src/scheduler/task/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use memory_addresses::VirtAddr;
1919
#[cfg(not(feature = "common-os"))]
2020
use self::tls::Tls;
2121
use crate::arch::core_local::*;
22-
use crate::arch::scheduler::TaskStacks;
22+
use crate::arch::scheduler::{TaskStacks, set_init_task_tls};
2323
use crate::fd::stdio::*;
2424
use crate::fd::{ObjectInterface, RawFd, STDERR_FILENO, STDIN_FILENO, STDOUT_FILENO};
2525
use crate::scheduler::CoreId;
@@ -488,7 +488,7 @@ impl Task {
488488
stacks: TaskStacks::from_boot_stacks(),
489489
object_map: OBJECT_MAP.get().unwrap().clone(),
490490
#[cfg(not(feature = "common-os"))]
491-
tls: None,
491+
tls: set_init_task_tls(),
492492
#[cfg(all(target_arch = "x86_64", feature = "common-os"))]
493493
root_page_table: *crate::scheduler::BOOT_ROOT_PAGE_TABLE.get().unwrap(),
494494
}

0 commit comments

Comments
 (0)