diff --git a/src/cpu/smp.rs b/src/cpu/smp.rs index 7c70e1a01..4c4efd577 100644 --- a/src/cpu/smp.rs +++ b/src/cpu/smp.rs @@ -7,9 +7,10 @@ extern crate alloc; use crate::acpi::tables::ACPICPUInfo; -use crate::cpu::percpu::{this_cpu_mut, PerCpu}; +use crate::cpu::percpu::{this_cpu, this_cpu_mut, PerCpu}; use crate::cpu::vmsa::init_svsm_vmsa; use crate::requests::request_loop; +use crate::task::{create_task, TASK_FLAG_SHARE_PT}; fn start_cpu(apic_id: u32) { unsafe { @@ -66,8 +67,17 @@ fn start_ap() { // Set CPU online so that BSP can proceed this_cpu_mut().set_online(); - // Loop for now - request_loop(); + // Create the task making sure the task only runs on this new AP + create_task( + ap_request_loop, + TASK_FLAG_SHARE_PT, + Some(this_cpu().get_apic_id()), + ) + .expect("Failed to create AP initial task"); +} +#[no_mangle] +pub extern "C" fn ap_request_loop() { + request_loop(); panic!("Returned from request_loop!"); }