From 7f9a86b49599c31a872478d37e6886d095a71eae Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 25 Feb 2020 21:38:03 +0100 Subject: [PATCH] ProcFS: Expose the physical page map of each region in /proc/PID/vm You can now see the state of each underlying physical page slot in a VM region. --- Kernel/FileSystem/ProcFS.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Kernel/FileSystem/ProcFS.cpp b/Kernel/FileSystem/ProcFS.cpp index 78ea8efb9e3..12c74e8262d 100644 --- a/Kernel/FileSystem/ProcFS.cpp +++ b/Kernel/FileSystem/ProcFS.cpp @@ -315,6 +315,20 @@ Optional procfs$pid_vm(InodeIdentifier identifier) region_object.add("amount_dirty", (u32)region.amount_dirty()); region_object.add("cow_pages", region.cow_pages()); region_object.add("name", region.name()); + + StringBuilder pagemap_builder; + for (size_t i = 0; i < region.page_count(); ++i) { + auto page_index = region.first_page_index() + i; + auto& physical_page_slot = region.vmobject().physical_pages()[page_index]; + if (!physical_page_slot) + pagemap_builder.append('N'); + else if (physical_page_slot == MM.shared_zero_page()) + pagemap_builder.append('Z'); + else + pagemap_builder.append('P'); + } + region_object.add("pagemap", pagemap_builder.to_string()); + } array.finish(); return builder.build();