schedule tasks across all cores
Per-core GDT/TSS and AP scheduler entry; fix AP SSE + single_threaded.
This commit is contained in:
@@ -114,11 +114,18 @@ pub fn prepareSecondaries(tramp_phys: u64) void {
|
||||
smp.prepare(tramp_phys);
|
||||
}
|
||||
|
||||
/// Wake the core with Local APIC id `apic_id`, giving it `stack_top` and its per-CPU
|
||||
/// pointer `percpu`; it adopts the current (kernel) page tables. Returns false if it
|
||||
/// doesn't come online within the timeout. Blocks until the core reports in.
|
||||
pub fn startSecondary(apic_id: u32, stack_top: usize, percpu: usize) bool {
|
||||
return smp.startAp(apic_id, stack_top, percpu, readCr3());
|
||||
/// Wake the core with Local APIC id `apic_id` as dense CPU `index`, giving it
|
||||
/// `stack_top` and its per-CPU pointer `percpu`; it adopts the current (kernel) page
|
||||
/// tables. Returns false if it doesn't come online within the timeout. Blocks until
|
||||
/// the core reports in.
|
||||
pub fn startSecondary(apic_id: u32, stack_top: usize, percpu: usize, index: usize) bool {
|
||||
return smp.startAp(apic_id, stack_top, percpu, index, readCr3());
|
||||
}
|
||||
|
||||
/// Register the generic entry a woken AP jumps to once its arch state is up (its own
|
||||
/// descriptor tables, LAPIC, and timer). The kernel passes its scheduler entry here.
|
||||
pub fn setSecondaryEntry(entry: *const fn () callconv(.c) noreturn) void {
|
||||
smp.setSecondaryEntry(entry);
|
||||
}
|
||||
|
||||
/// Kernel tick rate: 1000 Hz (1 ms), the scheduler's time quantum.
|
||||
|
||||
Reference in New Issue
Block a user