From ba6d56042aeffbb783af5aff592d6bca376cbe4b Mon Sep 17 00:00:00 2001 From: Joerg Roedel Date: Fri, 19 Jan 2024 13:18:50 +0100 Subject: [PATCH] SVSM/percpu: Add Request Processing WaitQueue Add a waitqueue which will be used to start and stop a separate task for request processing. Signed-off-by: Joerg Roedel --- src/cpu/percpu.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/cpu/percpu.rs b/src/cpu/percpu.rs index d98de652f..0dea387b0 100644 --- a/src/cpu/percpu.rs +++ b/src/cpu/percpu.rs @@ -26,7 +26,7 @@ use crate::mm::{ use crate::sev::ghcb::GHCB; use crate::sev::utils::RMPFlags; use crate::sev::vmsa::allocate_new_vmsa; -use crate::task::{RunQueue, TaskPointer}; +use crate::task::{RunQueue, TaskPointer, WaitQueue}; use crate::types::{PAGE_SHIFT, PAGE_SHIFT_2M, PAGE_SIZE, PAGE_SIZE_2M, SVSM_TR_FLAGS, SVSM_TSS}; use alloc::sync::Arc; use alloc::vec::Vec; @@ -238,9 +238,20 @@ pub struct PerCpu { /// Task list that has been assigned for scheduling on this CPU runqueue: RWLock, + + /// WaitQueue for request processing + request_waitqueue: WaitQueue, } impl PerCpu { + pub fn wait_for_requests(&mut self) { + self.request_waitqueue.wait_for_event(); + } + + pub fn process_requests(&mut self) { + self.request_waitqueue.wakeup(); + } + fn new(apic_id: u32, shared: &'static PerCpuShared) -> Self { PerCpu { shared, @@ -257,6 +268,7 @@ impl PerCpu { vrange_4k: VirtualRange::new(), vrange_2m: VirtualRange::new(), runqueue: RWLock::new(RunQueue::new()), + request_waitqueue: WaitQueue::new(), } }