From 5313689d6fa91596f4bc52bf6fb866bf6a7a706f Mon Sep 17 00:00:00 2001 From: Ruize Tang <1466040111@qq.com> Date: Tue, 26 Nov 2024 21:04:11 +0800 Subject: [PATCH] Fix deadlock in FLUSH_OPS by disabling IRQ --- ostd/src/mm/tlb.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ostd/src/mm/tlb.rs b/ostd/src/mm/tlb.rs index 4ec58e091..b50d7d0bb 100644 --- a/ostd/src/mm/tlb.rs +++ b/ostd/src/mm/tlb.rs @@ -9,7 +9,7 @@ use super::{page::DynPage, Vaddr, PAGE_SIZE}; use crate::{ cpu::{CpuSet, PinCurrentCpu}, cpu_local, - sync::SpinLock, + sync::{LocalIrqDisabled, SpinLock}, task::disable_preempt, }; @@ -155,8 +155,8 @@ impl TlbFlushOp { // // Lock ordering: lock FLUSH_OPS before PAGE_KEEPER. cpu_local! { - static FLUSH_OPS: SpinLock = SpinLock::new(OpsStack::new()); - static PAGE_KEEPER: SpinLock> = SpinLock::new(Vec::new()); + static FLUSH_OPS: SpinLock = SpinLock::new(OpsStack::new()); + static PAGE_KEEPER: SpinLock, LocalIrqDisabled> = SpinLock::new(Vec::new()); } fn do_remote_flush() {