mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 22:17:42 +00:00
Kernel: Add MemoryManager::set_page_writable_direct()
This helper function goes directly to the page tables and makes a virtual address writable or non-writable.
This commit is contained in:
parent
40f2abf7c3
commit
96fb3d4a11
2 changed files with 14 additions and 0 deletions
|
@ -915,4 +915,16 @@ void MemoryManager::dump_kernel_regions()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MemoryManager::set_page_writable_direct(VirtualAddress vaddr, bool writable)
|
||||||
|
{
|
||||||
|
ScopedSpinLock lock(s_mm_lock);
|
||||||
|
ScopedSpinLock page_lock(kernel_page_directory().get_lock());
|
||||||
|
auto* pte = ensure_pte(kernel_page_directory(), vaddr);
|
||||||
|
VERIFY(pte);
|
||||||
|
if (pte->is_writable() == writable)
|
||||||
|
return;
|
||||||
|
pte->set_writable(writable);
|
||||||
|
flush_tlb(&kernel_page_directory(), vaddr);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,6 +139,8 @@ public:
|
||||||
|
|
||||||
PageFaultResponse handle_page_fault(const PageFault&);
|
PageFaultResponse handle_page_fault(const PageFault&);
|
||||||
|
|
||||||
|
void set_page_writable_direct(VirtualAddress, bool);
|
||||||
|
|
||||||
void protect_readonly_after_init_memory();
|
void protect_readonly_after_init_memory();
|
||||||
void unmap_memory_after_init();
|
void unmap_memory_after_init();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue