mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-15 12:23:15 +00:00
Kernel: Add RegionTree::remove(Region&)
This allows clients to remove a region from the tree without reaching into the RegionTree internals.
This commit is contained in:
parent
4b5a9bab34
commit
da7ea2556e
|
@ -229,9 +229,7 @@ void AddressSpace::deallocate_region(Region& region)
|
|||
|
||||
NonnullOwnPtr<Region> AddressSpace::take_region(Region& region)
|
||||
{
|
||||
SpinlockLocker lock(m_lock);
|
||||
SpinlockLocker tree_locker(m_region_tree.get_lock());
|
||||
auto did_remove = m_region_tree.regions().remove(region.vaddr().get());
|
||||
auto did_remove = m_region_tree.remove(region);
|
||||
VERIFY(did_remove);
|
||||
return NonnullOwnPtr { NonnullOwnPtr<Region>::Adopt, region };
|
||||
}
|
||||
|
|
|
@ -1168,9 +1168,7 @@ bool MemoryManager::validate_user_stack(AddressSpace& space, VirtualAddress vadd
|
|||
void MemoryManager::unregister_kernel_region(Region& region)
|
||||
{
|
||||
VERIFY(region.is_kernel());
|
||||
SpinlockLocker lock(s_mm_lock);
|
||||
SpinlockLocker tree_locker(m_region_tree.get_lock());
|
||||
m_region_tree.regions().remove(region.vaddr().get());
|
||||
m_region_tree.remove(region);
|
||||
}
|
||||
|
||||
void MemoryManager::dump_kernel_regions()
|
||||
|
|
|
@ -164,4 +164,10 @@ ErrorOr<NonnullOwnPtr<Memory::Region>> RegionTree::create_identity_mapped_region
|
|||
return region;
|
||||
}
|
||||
|
||||
bool RegionTree::remove(Region& region)
|
||||
{
|
||||
SpinlockLocker locker(m_lock);
|
||||
return m_regions.remove(region.range().base().get());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -52,6 +52,8 @@ public:
|
|||
// FIXME: Access the region tree through a SpinlockProtected or similar.
|
||||
RecursiveSpinlock& get_lock() const { return m_lock; }
|
||||
|
||||
bool remove(Region&);
|
||||
|
||||
private:
|
||||
ErrorOr<VirtualRange> allocate_range_anywhere(size_t size, size_t alignment = PAGE_SIZE);
|
||||
ErrorOr<VirtualRange> allocate_range_specific(VirtualAddress base, size_t size);
|
||||
|
|
Loading…
Reference in a new issue