diff options
Diffstat (limited to 'Kernel/Memory/VMObject.cpp')
-rw-r--r-- | Kernel/Memory/VMObject.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/Kernel/Memory/VMObject.cpp b/Kernel/Memory/VMObject.cpp new file mode 100644 index 0000000000..b5e0459d48 --- /dev/null +++ b/Kernel/Memory/VMObject.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <Kernel/Memory/MemoryManager.h> +#include <Kernel/Memory/VMObject.h> + +namespace Kernel { + +VMObject::VMObject(VMObject const& other) + : m_physical_pages(other.m_physical_pages) +{ + MM.register_vmobject(*this); +} + +VMObject::VMObject(size_t size) + : m_physical_pages(ceil_div(size, static_cast<size_t>(PAGE_SIZE))) +{ + MM.register_vmobject(*this); +} + +VMObject::~VMObject() +{ + { + ScopedSpinLock lock(m_on_deleted_lock); + for (auto& it : m_on_deleted) + it->vmobject_deleted(*this); + m_on_deleted.clear(); + } + + MM.unregister_vmobject(*this); + VERIFY(m_regions.is_empty()); +} + +} |