mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 04:17:35 +00:00
Kernel: Add a quickmap region for each processor
Threads need to be able to concurrently quickmap things.
This commit is contained in:
parent
d249b5df8f
commit
2a38cc9a12
5 changed files with 56 additions and 22 deletions
|
@ -215,7 +215,7 @@ void page_fault_handler(TrapFrame* trap)
|
|||
|
||||
#ifdef PAGE_FAULT_DEBUG
|
||||
u32 fault_page_directory = read_cr3();
|
||||
dbg() << "Ring " << (regs.cs & 3)
|
||||
dbg() << "CPU #" << (Processor::is_initialized() ? Processor::current().id() : 0) << " ring " << (regs.cs & 3)
|
||||
<< " " << (regs.exception_code & 1 ? "PV" : "NP")
|
||||
<< " page fault in PD=" << String::format("%x", fault_page_directory) << ", "
|
||||
<< (regs.exception_code & 8 ? "reserved-bit " : "")
|
||||
|
@ -831,6 +831,7 @@ void Processor::initialize(u32 cpu)
|
|||
|
||||
m_idle_thread = nullptr;
|
||||
m_current_thread = nullptr;
|
||||
m_mm_data = nullptr;
|
||||
|
||||
gdt_init();
|
||||
if (cpu == 0)
|
||||
|
@ -859,7 +860,7 @@ void Processor::initialize(u32 cpu)
|
|||
(*s_processors)[cpu] = this;
|
||||
}
|
||||
|
||||
klog() << "CPU #" << cpu << " using Processor at " << VirtualAddress(FlatPtr(this));
|
||||
klog() << "CPU[" << cpu << "]: initialized Processor at " << VirtualAddress(FlatPtr(this));
|
||||
}
|
||||
|
||||
void Processor::write_raw_gdt_entry(u16 selector, u32 low, u32 high)
|
||||
|
|
|
@ -611,6 +611,7 @@ struct TrapFrame;
|
|||
#define GDT_SELECTOR_TSS 0x38
|
||||
|
||||
class ProcessorInfo;
|
||||
struct MemoryManagerData;
|
||||
|
||||
class Processor {
|
||||
Processor* m_self; // must be first field (%fs offset 0x0)
|
||||
|
@ -626,6 +627,7 @@ class Processor {
|
|||
static FPUState s_clean_fpu_state;
|
||||
|
||||
ProcessorInfo* m_info;
|
||||
MemoryManagerData* m_mm_data;
|
||||
Thread* m_current_thread;
|
||||
Thread* m_idle_thread;
|
||||
|
||||
|
@ -668,6 +670,16 @@ public:
|
|||
return get_fs() == GDT_SELECTOR_PROC && read_fs_u32(0) != 0;
|
||||
}
|
||||
|
||||
ALWAYS_INLINE void set_mm_data(MemoryManagerData& mm_data)
|
||||
{
|
||||
m_mm_data = &mm_data;
|
||||
}
|
||||
|
||||
ALWAYS_INLINE MemoryManagerData& get_mm_data() const
|
||||
{
|
||||
return *m_mm_data;
|
||||
}
|
||||
|
||||
ALWAYS_INLINE Thread* idle_thread() const
|
||||
{
|
||||
return m_idle_thread;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue