mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-26 06:18:59 +00:00
Kernel: Store kernel memory regions in a RedBlackTree
We were already doing this for userspace memory regions (in the Memory::AddressSpace class), so let's do it for kernel regions as well. This gives a nice speed-up on test-js and probably basically everything else as well. :^)
This commit is contained in:
parent
6d9a1d3c93
commit
a23edd42b8
Notes:
sideshowbarker
2024-07-17 22:59:05 +09:00
Author: https://github.com/awesomekling
Commit: a23edd42b8
2 changed files with 10 additions and 9 deletions
|
@ -620,11 +620,10 @@ UNMAP_AFTER_INIT void MemoryManager::initialize(u32 cpu)
|
|||
Region* MemoryManager::kernel_region_from_vaddr(VirtualAddress vaddr)
|
||||
{
|
||||
SpinlockLocker lock(s_mm_lock);
|
||||
for (auto& region : MM.m_kernel_regions) {
|
||||
if (region.contains(vaddr))
|
||||
return ®ion;
|
||||
}
|
||||
return nullptr;
|
||||
auto* region_ptr = MM.m_kernel_regions.find_largest_not_above(vaddr.get());
|
||||
if (!region_ptr)
|
||||
return nullptr;
|
||||
return *region_ptr;
|
||||
}
|
||||
|
||||
Region* MemoryManager::find_user_region_from_vaddr_no_lock(AddressSpace& space, VirtualAddress vaddr)
|
||||
|
@ -1051,14 +1050,14 @@ void MemoryManager::register_region(Region& region)
|
|||
{
|
||||
SpinlockLocker lock(s_mm_lock);
|
||||
if (region.is_kernel())
|
||||
m_kernel_regions.append(region);
|
||||
m_kernel_regions.insert(region.vaddr().get(), ®ion);
|
||||
}
|
||||
|
||||
void MemoryManager::unregister_region(Region& region)
|
||||
{
|
||||
SpinlockLocker lock(s_mm_lock);
|
||||
if (region.is_kernel())
|
||||
m_kernel_regions.remove(region);
|
||||
m_kernel_regions.remove(region.vaddr().get());
|
||||
}
|
||||
|
||||
void MemoryManager::dump_kernel_regions()
|
||||
|
@ -1072,7 +1071,8 @@ void MemoryManager::dump_kernel_regions()
|
|||
dbgln("BEGIN{} END{} SIZE{} ACCESS NAME",
|
||||
addr_padding, addr_padding, addr_padding);
|
||||
SpinlockLocker lock(s_mm_lock);
|
||||
for (auto& region : m_kernel_regions) {
|
||||
for (auto* region_ptr : m_kernel_regions) {
|
||||
auto& region = *region_ptr;
|
||||
dbgln("{:p} -- {:p} {:p} {:c}{:c}{:c}{:c}{:c}{:c} {}",
|
||||
region.vaddr().get(),
|
||||
region.vaddr().offset(region.size() - 1).get(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue