ladybird/Kernel/VM
Andreas Kling 082ed6f417 Kernel: Simplify VMObject locking & page fault handlers
This patch greatly simplifies VMObject locking by doing two things:

1. Giving VMObject an IntrusiveList of all its mapping Region objects.
2. Removing VMObject::m_paging_lock in favor of VMObject::m_lock

Before (1), VMObject::for_each_region() was forced to acquire the
global MM lock (since it worked by walking MemoryManager's list of
all regions and checking for regions that pointed to itself.)

With each VMObject having its own list of Regions, VMObject's own
m_lock is all we need.

Before (2), page fault handlers used a separate mutex for preventing
overlapping work. This design required multiple temporary unlocks
and was generally extremely hard to reason about.

Instead, page fault handlers now use VMObject's own m_lock as well.
2021-07-23 03:24:44 +02:00
..
AllocationStrategy.h Everywhere: Use "the SerenityOS developers." in copyright headers 2021-04-29 00:59:26 +02:00
AnonymousVMObject.cpp Kernel: Simplify VMObject locking & page fault handlers 2021-07-23 03:24:44 +02:00
AnonymousVMObject.h Kernel: Simplify VMObject locking & page fault handlers 2021-07-23 03:24:44 +02:00
ContiguousVMObject.cpp Kernel: Convert VMObject & subclasses to east-const style 2021-07-22 09:17:02 +02:00
ContiguousVMObject.h Kernel: Convert VMObject & subclasses to east-const style 2021-07-22 09:17:02 +02:00
InodeVMObject.cpp Kernel: Simplify VMObject locking & page fault handlers 2021-07-23 03:24:44 +02:00
InodeVMObject.h Kernel: Simplify VMObject locking & page fault handlers 2021-07-23 03:24:44 +02:00
MappedROM.h Kernel: Pull apart CPU.h 2021-06-24 00:38:23 +02:00
MemoryManager.cpp Kernel: Simplify VMObject locking & page fault handlers 2021-07-23 03:24:44 +02:00
MemoryManager.h Kernel: Simplify VMObject locking & page fault handlers 2021-07-23 03:24:44 +02:00
PageDirectory.cpp Kernel: Fix the variable declaration for some linker script symbols 2021-07-22 22:27:11 +02:00
PageDirectory.h Kernel: Fix 64-bit address truncation in MemoryManager::ensure_pte() 2021-07-18 17:31:13 +02:00
PageFaultResponse.h Everywhere: Use "the SerenityOS developers." in copyright headers 2021-04-29 00:59:26 +02:00
PhysicalPage.cpp Kernel: Convert the PhysicalPage bool parameter to an enum 2021-07-17 18:38:28 +04:30
PhysicalPage.h Kernel: Convert the PhysicalPage bool parameter to an enum 2021-07-17 18:38:28 +04:30
PhysicalRegion.cpp Kernel: Remove debug spam when PhysicalRegion::take_free_page() fails 2021-07-14 01:37:31 +02:00
PhysicalRegion.h Kernel: Fix logic error in PhysicalRegion::contains() 2021-07-14 01:37:19 +02:00
PhysicalZone.cpp Kernel: Cut allocation size for physical buddy bitmaps in half 2021-07-13 23:47:49 +02:00
PhysicalZone.h Kernel: Remove some friendships and make some classes non-copy/moveable 2021-07-13 23:19:00 +02:00
PrivateInodeVMObject.cpp Kernel: Convert VMObject & subclasses to east-const style 2021-07-22 09:17:02 +02:00
PrivateInodeVMObject.h Kernel: Convert VMObject & subclasses to east-const style 2021-07-22 09:17:02 +02:00
ProcessPagingScope.cpp Kernel: Remove unused header includes in VM subtree 2021-07-11 21:37:38 +02:00
ProcessPagingScope.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
PurgeablePageRanges.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
PurgeablePageRanges.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Range.cpp Kernel: Move special sections into Sections.h 2021-06-24 00:38:23 +02:00
Range.h Everywhere: Prefix hexadecimal numbers with 0x 2021-07-22 08:57:01 +02:00
RangeAllocator.cpp Kernel: Make allocate_randomized() work for 64-bit addresses 2021-07-18 17:31:13 +02:00
RangeAllocator.h Kernel: Declare VM/RangeAllocator trivial destructor as default 2021-07-17 13:02:09 +02:00
Region.cpp Kernel: Simplify VMObject locking & page fault handlers 2021-07-23 03:24:44 +02:00
Region.h Kernel: Simplify VMObject locking & page fault handlers 2021-07-23 03:24:44 +02:00
RingBuffer.cpp Kernel: Add support for reading from VirtIOConsole 2021-07-09 13:19:21 +04:30
RingBuffer.h Kernel: Support multiport for VirtIOConsole 2021-07-09 13:19:21 +04:30
ScatterGatherList.cpp Kernel: Consolidate API for creating AnonymousVMObject with given pages 2021-07-22 09:17:02 +02:00
ScatterGatherList.h Kernel: Consolidate API for creating AnonymousVMObject with given pages 2021-07-22 09:17:02 +02:00
SharedInodeVMObject.cpp Kernel: Convert VMObject & subclasses to east-const style 2021-07-22 09:17:02 +02:00
SharedInodeVMObject.h Kernel: Convert VMObject & subclasses to east-const style 2021-07-22 09:17:02 +02:00
Space.cpp Kernel: Make sure crash dumps are properly aligned on x86_64 2021-07-22 08:57:01 +02:00
Space.h Kernel: Remove double RedBlackTree lookup in VM/Space region removal 2021-07-17 16:22:59 +02:00
TypedMapping.h Kernel/TypedMapping: Round up length with offset_in_page 2021-07-02 13:16:12 +02:00
VMObject.cpp Kernel: Convert VMObject & subclasses to east-const style 2021-07-22 09:17:02 +02:00
VMObject.h Kernel: Simplify VMObject locking & page fault handlers 2021-07-23 03:24:44 +02:00