From 8f36730a274745c63bc6e0f4727c0542b2cc33fc Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Thu, 3 Aug 2023 09:01:51 +0200 Subject: [PATCH] disable network interrupts in polling mode --- src/executor/network.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/executor/network.rs b/src/executor/network.rs index 50b56095dc..3b700a33d8 100644 --- a/src/executor/network.rs +++ b/src/executor/network.rs @@ -334,6 +334,9 @@ where // be sure that we are not interrupted by a timer, which is able // to call `reschedule` without_interrupts(|| { + // avoid network interrupts + get_network_driver().unwrap().lock().set_polling_mode(true); + let start = now(); let waker = core::task::Waker::noop(); let mut cx = Context::from_waker(&waker); @@ -349,6 +352,9 @@ where .map(|d| crate::arch::processor::get_timer_ticks() + d.total_micros()); core_scheduler().add_network_timer(wakeup_time); + // allow network interrupts + get_network_driver().unwrap().lock().set_polling_mode(false); + return t; } @@ -358,6 +364,9 @@ where .map(|d| crate::arch::processor::get_timer_ticks() + d.total_micros()); core_scheduler().add_network_timer(wakeup_time); + // allow network interrupts + get_network_driver().unwrap().lock().set_polling_mode(false); + return Err(-crate::errno::ETIME); } }