summaryrefslogtreecommitdiff
path: root/Kernel/Memory/VMObject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/Memory/VMObject.cpp')
-rw-r--r--Kernel/Memory/VMObject.cpp37
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());
+}
+
+}