diff --git a/Cargo.toml b/Cargo.toml index c58a7ec9a62339f8e7079db7e15f66a3d28379ac..65a724eb9902aa2bc568fb08c279b7fb01a264e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,13 +42,15 @@ raw-cpuid = "8.0.0" x86 = { version = "0.32.0", default-features = false } [features] -default = ["acpi", "multi_core", "serial_debug"] +default = ["acpi", "multi_core", "no_threaded_syscalls", "serial_debug"] acpi = [] doc = [] graphical_debug = [] live = [] lpss_debug = [] multi_core = ["acpi"] +#TODO: remove when threading issues are fixed +no_threaded_syscalls = [] pti = [] qemu_debug = [] serial_debug = [] diff --git a/src/syscall/mod.rs b/src/syscall/mod.rs index 3955af57029288c75a757512a1095adf7957fc2b..5afa381dc7f18650d0f0c368015eaf6b16f8a351 100644 --- a/src/syscall/mod.rs +++ b/src/syscall/mod.rs @@ -253,8 +253,17 @@ pub fn syscall(a: usize, b: usize, c: usize, d: usize, e: usize, f: usize, bp: u } } + #[cfg(feature = "no_threaded_syscalls")] + let syscall_lock = { + static SYSCALL_LOCK: spin::Mutex<()> = spin::Mutex::new(()); + SYSCALL_LOCK.lock(); + }; + let result = inner(a, b, c, d, e, f, bp, stack); + #[cfg(feature = "no_threaded_syscalls")] + drop(syscall_lock); + { let contexts = crate::context::contexts(); if let Some(context_lock) = contexts.current() {