mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 15:34:33 +00:00
Oops, SetFlag() should not clear the entire data
This commit is contained in:
parent
2d1c42fbcd
commit
0116fd3b38
@ -7,7 +7,7 @@ namespace Memory
|
||||
void PageDirectoryEntry::ClearFlags() { this->Value.raw = 0; }
|
||||
void PageDirectoryEntry::SetFlag(uint64_t Flag, bool Enabled)
|
||||
{
|
||||
this->Value.raw = 0;
|
||||
this->Value.raw &= ~Flag;
|
||||
if (Enabled)
|
||||
this->Value.raw |= Flag;
|
||||
}
|
||||
|
@ -57,6 +57,7 @@ namespace Memory
|
||||
{
|
||||
PDP = (PageTable *)KernelAllocator.RequestPage();
|
||||
memset(PDP, 0, PAGE_SIZE);
|
||||
PDE.ClearFlags();
|
||||
PDE.SetFlag(PTFlag::P, true);
|
||||
PDE.AddFlag(Flags);
|
||||
PDE.SetAddress((uint64_t)PDP >> 12);
|
||||
@ -71,6 +72,7 @@ namespace Memory
|
||||
{
|
||||
PD = (PageTable *)KernelAllocator.RequestPage();
|
||||
memset(PD, 0, PAGE_SIZE);
|
||||
PDE.ClearFlags();
|
||||
PDE.SetFlag(PTFlag::P, true);
|
||||
PDE.AddFlag(Flags);
|
||||
PDE.SetAddress((uint64_t)PD >> 12);
|
||||
@ -85,6 +87,7 @@ namespace Memory
|
||||
{
|
||||
PT = (PageTable *)KernelAllocator.RequestPage();
|
||||
memset(PT, 0, PAGE_SIZE);
|
||||
PDE.ClearFlags();
|
||||
PDE.SetFlag(PTFlag::P, true);
|
||||
PDE.AddFlag(Flags);
|
||||
PDE.SetAddress((uint64_t)PT >> 12);
|
||||
@ -94,6 +97,7 @@ namespace Memory
|
||||
PT = (PageTable *)((uint64_t)PDE.GetAddress() << 12);
|
||||
|
||||
PDE = PT->Entries[Index.PIndex];
|
||||
PDE.ClearFlags();
|
||||
PDE.SetFlag(PTFlag::P, true);
|
||||
PDE.AddFlag(Flags);
|
||||
PDE.SetAddress((uint64_t)PhysicalAddress >> 12);
|
||||
|
Loading…
x
Reference in New Issue
Block a user