diff --git a/Cargo.lock b/Cargo.lock index c2aa1ffe5d..44debd659c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -339,16 +339,6 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" -[[package]] -name = "embedded-hal" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" -dependencies = [ - "nb 0.1.3", - "void", -] - [[package]] name = "errno" version = "0.3.2" @@ -530,17 +520,14 @@ dependencies = [ [[package]] name = "hermit-sync" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff009f072428c6d076906c6ae80b71d6e2adda8e4dc5edba81f3fdb0a74d4e57" +checksum = "c19aafa397bb46155c020076b61af57dcaa8ff10583dba7a797b3c9860193dac" dependencies = [ - "aarch64-cpu", "exclusive_cell", "generic_once_cell", + "interrupts", "lock_api", - "riscv", - "tock-registers", - "x86_64", ] [[package]] @@ -565,6 +552,12 @@ dependencies = [ "tempfile", ] +[[package]] +name = "interrupts" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09993c14860848a1e747a6a3360e5d63264fba4f50522ffb0d62c6047a370254" + [[package]] name = "js-sys" version = "0.3.64" @@ -653,21 +646,6 @@ dependencies = [ "paste", ] -[[package]] -name = "nb" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" -dependencies = [ - "nb 1.1.0", -] - -[[package]] -name = "nb" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" - [[package]] name = "nom" version = "7.1.3" @@ -998,17 +976,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "riscv" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa3145d2fae3778b1e31ec2e827b228bdc6abd9b74bb5705ba46dcb82069bc4f" -dependencies = [ - "bit_field", - "critical-section", - "embedded-hal", -] - [[package]] name = "rustc_version" version = "0.4.0" @@ -1371,12 +1338,6 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" - [[package]] name = "volatile" version = "0.4.6" diff --git a/src/syscalls/lwip.rs b/src/syscalls/lwip.rs index de889ad9f1..f41678c4a6 100644 --- a/src/syscalls/lwip.rs +++ b/src/syscalls/lwip.rs @@ -1,12 +1,11 @@ use hermit_sync::{InterruptTicketMutexGuard, SpinMutex}; +use lock_api::MutexGuard; use crate::arch::core_local::core_scheduler; use crate::{arch, console}; /// Enables lwIP's printf to print a whole string without being interrupted by /// a message from the kernel. -static CONSOLE_GUARD: SpinMutex>> = - SpinMutex::new(None); extern "C" fn __sys_lwip_get_errno() -> i32 { core_scheduler().get_lwip_errno() @@ -27,9 +26,9 @@ pub extern "C" fn sys_lwip_set_errno(errno: i32) { } extern "C" fn __sys_acquire_putchar_lock() { - let mut console_guard = CONSOLE_GUARD.lock(); - assert!(console_guard.is_none()); - *console_guard = Some(console::CONSOLE.lock()); + // FIXME: use core-local storage instead + // better yet: remove and replace all of this + MutexGuard::leak(console::CONSOLE.lock()); } #[no_mangle] @@ -47,9 +46,9 @@ pub extern "C" fn sys_putchar(character: u8) { } extern "C" fn __sys_release_putchar_lock() { - let mut console_guard = CONSOLE_GUARD.lock(); - assert!(console_guard.is_some()); - drop(console_guard.take()); + unsafe { + console::CONSOLE.force_unlock(); + } } #[no_mangle]