summaryrefslogtreecommitdiff
path: root/Kernel/Memory
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2022-08-19 12:14:46 +0200
committerAndreas Kling <kling@serenityos.org>2022-08-19 12:14:57 +0200
commita84d893af862a40bd2c093a4b1d0eb6e7f1640da (patch)
tree27443eb5f57d097302c7fc537e54a66278d19db0 /Kernel/Memory
parent037f1ae9794222b11640eed9c9a26a19a58f5c8a (diff)
downloadserenity-a84d893af862a40bd2c093a4b1d0eb6e7f1640da.zip
Kernel/x86: Re-enable interrupts ASAP when handling page faults
As soon as we've saved CR2 (the faulting address), we can re-enable interrupt processing. This should make the kernel more responsive under heavy fault loads.
Diffstat (limited to 'Kernel/Memory')
-rw-r--r--Kernel/Memory/AnonymousVMObject.cpp1
-rw-r--r--Kernel/Memory/MemoryManager.cpp2
-rw-r--r--Kernel/Memory/Region.cpp3
3 files changed, 0 insertions, 6 deletions
diff --git a/Kernel/Memory/AnonymousVMObject.cpp b/Kernel/Memory/AnonymousVMObject.cpp
index 2ee446e81f..cfff86ff52 100644
--- a/Kernel/Memory/AnonymousVMObject.cpp
+++ b/Kernel/Memory/AnonymousVMObject.cpp
@@ -317,7 +317,6 @@ size_t AnonymousVMObject::cow_pages() const
PageFaultResponse AnonymousVMObject::handle_cow_fault(size_t page_index, VirtualAddress vaddr)
{
- VERIFY_INTERRUPTS_DISABLED();
SpinlockLocker lock(m_lock);
if (is_volatile()) {
diff --git a/Kernel/Memory/MemoryManager.cpp b/Kernel/Memory/MemoryManager.cpp
index b623c7ee94..d15a143c91 100644
--- a/Kernel/Memory/MemoryManager.cpp
+++ b/Kernel/Memory/MemoryManager.cpp
@@ -715,8 +715,6 @@ Region* MemoryManager::find_region_from_vaddr(VirtualAddress vaddr)
PageFaultResponse MemoryManager::handle_page_fault(PageFault const& fault)
{
- VERIFY_INTERRUPTS_DISABLED();
-
auto faulted_in_range = [&fault](auto const* start, auto const* end) {
return fault.vaddr() >= VirtualAddress { start } && fault.vaddr() < VirtualAddress { end };
};
diff --git a/Kernel/Memory/Region.cpp b/Kernel/Memory/Region.cpp
index 4e6e3ce68b..c69004b451 100644
--- a/Kernel/Memory/Region.cpp
+++ b/Kernel/Memory/Region.cpp
@@ -402,7 +402,6 @@ PageFaultResponse Region::handle_fault(PageFault const& fault)
PageFaultResponse Region::handle_zero_fault(size_t page_index_in_region)
{
- VERIFY_INTERRUPTS_DISABLED();
VERIFY(vmobject().is_anonymous());
SpinlockLocker locker(vmobject().m_lock);
@@ -444,7 +443,6 @@ PageFaultResponse Region::handle_zero_fault(size_t page_index_in_region)
PageFaultResponse Region::handle_cow_fault(size_t page_index_in_region)
{
- VERIFY_INTERRUPTS_DISABLED();
auto current_thread = Thread::current();
if (current_thread)
current_thread->did_cow_fault();
@@ -461,7 +459,6 @@ PageFaultResponse Region::handle_cow_fault(size_t page_index_in_region)
PageFaultResponse Region::handle_inode_fault(size_t page_index_in_region)
{
- VERIFY_INTERRUPTS_DISABLED();
VERIFY(vmobject().is_inode());
VERIFY(!s_mm_lock.is_locked_by_current_processor());
VERIFY(!g_scheduler_lock.is_locked_by_current_processor());