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::ClearFlags() { this->Value.raw = 0; }
|
||||||
void PageDirectoryEntry::SetFlag(uint64_t Flag, bool Enabled)
|
void PageDirectoryEntry::SetFlag(uint64_t Flag, bool Enabled)
|
||||||
{
|
{
|
||||||
this->Value.raw = 0;
|
this->Value.raw &= ~Flag;
|
||||||
if (Enabled)
|
if (Enabled)
|
||||||
this->Value.raw |= Flag;
|
this->Value.raw |= Flag;
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,7 @@ namespace Memory
|
|||||||
{
|
{
|
||||||
PDP = (PageTable *)KernelAllocator.RequestPage();
|
PDP = (PageTable *)KernelAllocator.RequestPage();
|
||||||
memset(PDP, 0, PAGE_SIZE);
|
memset(PDP, 0, PAGE_SIZE);
|
||||||
|
PDE.ClearFlags();
|
||||||
PDE.SetFlag(PTFlag::P, true);
|
PDE.SetFlag(PTFlag::P, true);
|
||||||
PDE.AddFlag(Flags);
|
PDE.AddFlag(Flags);
|
||||||
PDE.SetAddress((uint64_t)PDP >> 12);
|
PDE.SetAddress((uint64_t)PDP >> 12);
|
||||||
@ -71,6 +72,7 @@ namespace Memory
|
|||||||
{
|
{
|
||||||
PD = (PageTable *)KernelAllocator.RequestPage();
|
PD = (PageTable *)KernelAllocator.RequestPage();
|
||||||
memset(PD, 0, PAGE_SIZE);
|
memset(PD, 0, PAGE_SIZE);
|
||||||
|
PDE.ClearFlags();
|
||||||
PDE.SetFlag(PTFlag::P, true);
|
PDE.SetFlag(PTFlag::P, true);
|
||||||
PDE.AddFlag(Flags);
|
PDE.AddFlag(Flags);
|
||||||
PDE.SetAddress((uint64_t)PD >> 12);
|
PDE.SetAddress((uint64_t)PD >> 12);
|
||||||
@ -85,6 +87,7 @@ namespace Memory
|
|||||||
{
|
{
|
||||||
PT = (PageTable *)KernelAllocator.RequestPage();
|
PT = (PageTable *)KernelAllocator.RequestPage();
|
||||||
memset(PT, 0, PAGE_SIZE);
|
memset(PT, 0, PAGE_SIZE);
|
||||||
|
PDE.ClearFlags();
|
||||||
PDE.SetFlag(PTFlag::P, true);
|
PDE.SetFlag(PTFlag::P, true);
|
||||||
PDE.AddFlag(Flags);
|
PDE.AddFlag(Flags);
|
||||||
PDE.SetAddress((uint64_t)PT >> 12);
|
PDE.SetAddress((uint64_t)PT >> 12);
|
||||||
@ -94,6 +97,7 @@ namespace Memory
|
|||||||
PT = (PageTable *)((uint64_t)PDE.GetAddress() << 12);
|
PT = (PageTable *)((uint64_t)PDE.GetAddress() << 12);
|
||||||
|
|
||||||
PDE = PT->Entries[Index.PIndex];
|
PDE = PT->Entries[Index.PIndex];
|
||||||
|
PDE.ClearFlags();
|
||||||
PDE.SetFlag(PTFlag::P, true);
|
PDE.SetFlag(PTFlag::P, true);
|
||||||
PDE.AddFlag(Flags);
|
PDE.AddFlag(Flags);
|
||||||
PDE.SetAddress((uint64_t)PhysicalAddress >> 12);
|
PDE.SetAddress((uint64_t)PhysicalAddress >> 12);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user