[Zion] Move ProcessManager to map as well.
This commit is contained in:
parent
6e227e1cf6
commit
aa2d80b557
|
@ -28,6 +28,12 @@ void panic(const char* str, Args... args) {
|
||||||
asm volatile("cli; hlt;");
|
asm volatile("cli; hlt;");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define PANIC_ON_ERR(expr, str) \
|
||||||
|
{ \
|
||||||
|
if (expr != glcr::OK) { \
|
||||||
|
panic(str); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
#define UNREACHABLE \
|
#define UNREACHABLE \
|
||||||
panic("Unreachable {}, {}", __FILE__, __LINE__); \
|
panic("Unreachable {}, {}", __FILE__, __LINE__); \
|
||||||
__builtin_unreachable();
|
__builtin_unreachable();
|
||||||
|
|
|
@ -10,19 +10,12 @@ void ProcessManager::Init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessManager::InsertProcess(const glcr::RefPtr<Process>& proc) {
|
void ProcessManager::InsertProcess(const glcr::RefPtr<Process>& proc) {
|
||||||
proc_list_.PushBack(proc);
|
PANIC_ON_ERR(proc_map_.Insert(proc->id(), proc), "Reinserting process");
|
||||||
}
|
}
|
||||||
|
|
||||||
Process& ProcessManager::FromId(uint64_t pid) {
|
Process& ProcessManager::FromId(uint64_t pid) {
|
||||||
if (pid >= proc_list_.size()) {
|
if (!proc_map_.Contains(pid)) {
|
||||||
panic("Bad proc access {}, have {} processes", pid, proc_list_.size());
|
panic("Bad proc access {}, have {} processes", pid, proc_map_.size());
|
||||||
}
|
|
||||||
return *proc_list_[pid];
|
|
||||||
}
|
|
||||||
|
|
||||||
void ProcessManager::DumpProcessStates() {
|
|
||||||
dbgln("Process States: {}", proc_list_.size());
|
|
||||||
for (uint64_t i = 0; i < proc_list_.size(); i++) {
|
|
||||||
dbgln("{}: {}", proc_list_[i]->id(), (uint64_t)proc_list_[i]->GetState());
|
|
||||||
}
|
}
|
||||||
|
return *proc_map_.at(pid);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,8 @@ class ProcessManager {
|
||||||
void InsertProcess(const glcr::RefPtr<Process>& proc);
|
void InsertProcess(const glcr::RefPtr<Process>& proc);
|
||||||
Process& FromId(uint64_t id);
|
Process& FromId(uint64_t id);
|
||||||
|
|
||||||
void DumpProcessStates();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// TODO: This should be a hashmap.
|
glcr::HashMap<uint64_t, glcr::RefPtr<Process>> proc_map_;
|
||||||
glcr::Vector<glcr::RefPtr<Process>> proc_list_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern ProcessManager* gProcMan;
|
extern ProcessManager* gProcMan;
|
||||||
|
|
Loading…
Reference in New Issue