feat: SMP stage 1 (4 harts, per-hart guarded stacks, home-core affinity, IPIs, TLB shootdown, one temporary kernel lock), 4-core storm
This commit is contained in:
@@ -47,6 +47,23 @@ impl MultiCoreScheduler {
|
||||
self.placements.get(thread.raw() as usize)?.as_ref()
|
||||
}
|
||||
|
||||
pub fn num_cores(&self) -> u8 {
|
||||
self.num_cores
|
||||
}
|
||||
|
||||
/// The highest priority waiting in `core`'s run queue.
|
||||
pub fn highest_waiting(&self, core: CoreId) -> Option<Priority> {
|
||||
self.core(core)?.highest_waiting_priority()
|
||||
}
|
||||
|
||||
/// The core whose run queue holds `thread`, if any.
|
||||
pub fn queued_on(&self, thread: ThreadId) -> Option<CoreId> {
|
||||
self.active()
|
||||
.iter()
|
||||
.find(|c| c.is_queued(thread))
|
||||
.map(|c| c.core())
|
||||
}
|
||||
|
||||
/// Whether `thread` waits in some core's run queue.
|
||||
pub fn is_queued(&self, thread: ThreadId) -> bool {
|
||||
self.active().iter().any(|c| c.is_queued(thread))
|
||||
|
||||
@@ -306,6 +306,14 @@ impl ThreadTable {
|
||||
Ok(id)
|
||||
}
|
||||
|
||||
/// Every live thread with its id.
|
||||
pub fn iter(&self) -> impl Iterator<Item = (ThreadId, &Thread)> {
|
||||
self.threads
|
||||
.iter()
|
||||
.enumerate()
|
||||
.filter_map(|(i, t)| Some((ThreadId::from_raw(i as u16), t.as_ref()?)))
|
||||
}
|
||||
|
||||
pub fn get(&self, id: ThreadId) -> Result<&Thread, KernelError> {
|
||||
let idx = id.raw() as usize;
|
||||
self.threads
|
||||
|
||||
Reference in New Issue
Block a user