From d2a3b186f2e8f3ddb286fce9cb3295c7bda7751b Mon Sep 17 00:00:00 2001 From: longjin Date: Sun, 21 Dec 2025 03:31:58 +0800 Subject: [PATCH] =?UTF-8?q?refactor(net):=20=E5=B0=86=20NapiManager=20?= =?UTF-8?q?=E7=9A=84=E9=94=81=E6=9C=BA=E5=88=B6=E6=94=B9=E4=B8=BA=20lock?= =?UTF-8?q?=5Firqsave?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复在中断上下文中调用 napi_schedule 可能导致的死锁问题 Signed-off-by: longjin --- kernel/src/driver/net/napi.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kernel/src/driver/net/napi.rs b/kernel/src/driver/net/napi.rs index a7e53f399..6357d7d2e 100644 --- a/kernel/src/driver/net/napi.rs +++ b/kernel/src/driver/net/napi.rs @@ -211,7 +211,9 @@ impl NapiManager { } pub fn inner(&self) -> SpinLockGuard<'_, NapiManagerInner> { - self.inner.lock() + // 必须使用 lock_irqsave() 关闭中断,因为 napi_schedule() 可能在中断上下文中被调用 + // 如果使用普通的 lock(),当内核线程持有锁时发生中断,中断处理程序试图获取同一把锁会死锁 + self.inner.lock_irqsave() } pub fn wait_queue(&self) -> &WaitQueue {