浏览代码

Kernel: Remove unnecessary weak pointer from Region to owning Process

This was previously used for a single debug logging statement during
memory purging. There are no remaining users of this weak pointer,
so let's get rid of it.
Andreas Kling 4 年之前
父节点
当前提交
4648bcd3d4
共有 4 个文件被更改,包括 10 次插入21 次删除
  1. 1 1
      Kernel/Syscalls/fork.cpp
  2. 4 11
      Kernel/VM/Region.cpp
  3. 2 6
      Kernel/VM/Region.h
  4. 3 3
      Kernel/VM/Space.cpp

+ 1 - 1
Kernel/Syscalls/fork.cpp

@@ -96,7 +96,7 @@ KResultOr<FlatPtr> Process::sys$fork(RegisterState& regs)
         ScopedSpinLock lock(space().get_lock());
         ScopedSpinLock lock(space().get_lock());
         for (auto& region : space().regions()) {
         for (auto& region : space().regions()) {
             dbgln_if(FORK_DEBUG, "fork: cloning Region({}) '{}' @ {}", region, region->name(), region->vaddr());
             dbgln_if(FORK_DEBUG, "fork: cloning Region({}) '{}' @ {}", region, region->name(), region->vaddr());
-            auto region_clone = region->clone(*child);
+            auto region_clone = region->clone();
             if (!region_clone) {
             if (!region_clone) {
                 dbgln("fork: Cannot clone region, insufficient memory");
                 dbgln("fork: Cannot clone region, insufficient memory");
                 // TODO: tear down new process?
                 // TODO: tear down new process?

+ 4 - 11
Kernel/VM/Region.cpp

@@ -52,7 +52,7 @@ Region::~Region()
     MM.unregister_region(*this);
     MM.unregister_region(*this);
 }
 }
 
 
-OwnPtr<Region> Region::clone(Process& new_owner)
+OwnPtr<Region> Region::clone()
 {
 {
     VERIFY(Process::current());
     VERIFY(Process::current());
 
 
@@ -65,7 +65,7 @@ OwnPtr<Region> Region::clone(Process& new_owner)
 
 
         // Create a new region backed by the same VMObject.
         // Create a new region backed by the same VMObject.
         auto region = Region::try_create_user_accessible(
         auto region = Region::try_create_user_accessible(
-            &new_owner, m_range, m_vmobject, m_offset_in_vmobject, m_name ? m_name->try_clone() : OwnPtr<KString> {}, access(), m_cacheable ? Cacheable::Yes : Cacheable::No, m_shared);
+            m_range, m_vmobject, m_offset_in_vmobject, m_name ? m_name->try_clone() : OwnPtr<KString> {}, access(), m_cacheable ? Cacheable::Yes : Cacheable::No, m_shared);
         if (!region) {
         if (!region) {
             dbgln("Region::clone: Unable to allocate new Region");
             dbgln("Region::clone: Unable to allocate new Region");
             return nullptr;
             return nullptr;
@@ -86,7 +86,7 @@ OwnPtr<Region> Region::clone(Process& new_owner)
     // Set up a COW region. The parent (this) region becomes COW as well!
     // Set up a COW region. The parent (this) region becomes COW as well!
     remap();
     remap();
     auto clone_region = Region::try_create_user_accessible(
     auto clone_region = Region::try_create_user_accessible(
-        &new_owner, m_range, vmobject_clone.release_nonnull(), m_offset_in_vmobject, m_name ? m_name->try_clone() : OwnPtr<KString> {}, access(), m_cacheable ? Cacheable::Yes : Cacheable::No, m_shared);
+        m_range, vmobject_clone.release_nonnull(), m_offset_in_vmobject, m_name ? m_name->try_clone() : OwnPtr<KString> {}, access(), m_cacheable ? Cacheable::Yes : Cacheable::No, m_shared);
     if (!clone_region) {
     if (!clone_region) {
         dbgln("Region::clone: Unable to allocate new Region for COW");
         dbgln("Region::clone: Unable to allocate new Region for COW");
         return nullptr;
         return nullptr;
@@ -147,13 +147,11 @@ size_t Region::amount_shared() const
     return bytes;
     return bytes;
 }
 }
 
 
-OwnPtr<Region> Region::try_create_user_accessible(Process* owner, Range const& range, NonnullRefPtr<VMObject> vmobject, size_t offset_in_vmobject, OwnPtr<KString> name, Region::Access access, Cacheable cacheable, bool shared)
+OwnPtr<Region> Region::try_create_user_accessible(Range const& range, NonnullRefPtr<VMObject> vmobject, size_t offset_in_vmobject, OwnPtr<KString> name, Region::Access access, Cacheable cacheable, bool shared)
 {
 {
     auto region = adopt_own_if_nonnull(new (nothrow) Region(range, move(vmobject), offset_in_vmobject, move(name), access, cacheable, shared));
     auto region = adopt_own_if_nonnull(new (nothrow) Region(range, move(vmobject), offset_in_vmobject, move(name), access, cacheable, shared));
     if (!region)
     if (!region)
         return nullptr;
         return nullptr;
-    if (owner)
-        region->m_owner = owner->make_weak_ptr();
     return region;
     return region;
 }
 }
 
 
@@ -463,9 +461,4 @@ PageFaultResponse Region::handle_inode_fault(size_t page_index_in_region)
     return PageFaultResponse::Continue;
     return PageFaultResponse::Continue;
 }
 }
 
 
-RefPtr<Process> Region::get_owner()
-{
-    return m_owner.strong_ref();
-}
-
 }
 }

+ 2 - 6
Kernel/VM/Region.h

@@ -8,7 +8,6 @@
 
 
 #include <AK/EnumBits.h>
 #include <AK/EnumBits.h>
 #include <AK/IntrusiveList.h>
 #include <AK/IntrusiveList.h>
-#include <AK/WeakPtr.h>
 #include <AK/Weakable.h>
 #include <AK/Weakable.h>
 #include <Kernel/Arch/x86/PageFault.h>
 #include <Kernel/Arch/x86/PageFault.h>
 #include <Kernel/Forward.h>
 #include <Kernel/Forward.h>
@@ -47,7 +46,7 @@ public:
         Yes,
         Yes,
     };
     };
 
 
-    static OwnPtr<Region> try_create_user_accessible(Process*, Range const&, NonnullRefPtr<VMObject>, size_t offset_in_vmobject, OwnPtr<KString> name, Region::Access access, Cacheable, bool shared);
+    static OwnPtr<Region> try_create_user_accessible(Range const&, NonnullRefPtr<VMObject>, size_t offset_in_vmobject, OwnPtr<KString> name, Region::Access access, Cacheable, bool shared);
     static OwnPtr<Region> try_create_kernel_only(Range const&, NonnullRefPtr<VMObject>, size_t offset_in_vmobject, OwnPtr<KString> name, Region::Access access, Cacheable = Cacheable::Yes);
     static OwnPtr<Region> try_create_kernel_only(Range const&, NonnullRefPtr<VMObject>, size_t offset_in_vmobject, OwnPtr<KString> name, Region::Access access, Cacheable = Cacheable::Yes);
 
 
     ~Region();
     ~Region();
@@ -88,7 +87,7 @@ public:
 
 
     PageFaultResponse handle_fault(PageFault const&);
     PageFaultResponse handle_fault(PageFault const&);
 
 
-    OwnPtr<Region> clone(Process&);
+    OwnPtr<Region> clone();
 
 
     bool contains(VirtualAddress vaddr) const
     bool contains(VirtualAddress vaddr) const
     {
     {
@@ -205,8 +204,6 @@ public:
         OutOfMemory
         OutOfMemory
     };
     };
 
 
-    RefPtr<Process> get_owner();
-
     bool is_syscall_region() const { return m_syscall_region; }
     bool is_syscall_region() const { return m_syscall_region; }
     void set_syscall_region(bool b) { m_syscall_region = b; }
     void set_syscall_region(bool b) { m_syscall_region = b; }
 
 
@@ -241,7 +238,6 @@ private:
     bool m_stack : 1 { false };
     bool m_stack : 1 { false };
     bool m_mmap : 1 { false };
     bool m_mmap : 1 { false };
     bool m_syscall_region : 1 { false };
     bool m_syscall_region : 1 { false };
-    WeakPtr<Process> m_owner;
     IntrusiveListNode<Region> m_memory_manager_list_node;
     IntrusiveListNode<Region> m_memory_manager_list_node;
     IntrusiveListNode<Region> m_vmobject_list_node;
     IntrusiveListNode<Region> m_vmobject_list_node;
 
 

+ 3 - 3
Kernel/VM/Space.cpp

@@ -149,7 +149,7 @@ Optional<Range> Space::allocate_range(VirtualAddress vaddr, size_t size, size_t
 KResultOr<Region*> Space::try_allocate_split_region(Region const& source_region, Range const& range, size_t offset_in_vmobject)
 KResultOr<Region*> Space::try_allocate_split_region(Region const& source_region, Range const& range, size_t offset_in_vmobject)
 {
 {
     auto new_region = Region::try_create_user_accessible(
     auto new_region = Region::try_create_user_accessible(
-        m_process, range, source_region.vmobject(), offset_in_vmobject, KString::try_create(source_region.name()), source_region.access(), source_region.is_cacheable() ? Region::Cacheable::Yes : Region::Cacheable::No, source_region.is_shared());
+        range, source_region.vmobject(), offset_in_vmobject, KString::try_create(source_region.name()), source_region.access(), source_region.is_cacheable() ? Region::Cacheable::Yes : Region::Cacheable::No, source_region.is_shared());
     if (!new_region)
     if (!new_region)
         return ENOMEM;
         return ENOMEM;
     auto* region = add_region(new_region.release_nonnull());
     auto* region = add_region(new_region.release_nonnull());
@@ -172,7 +172,7 @@ KResultOr<Region*> Space::allocate_region(Range const& range, StringView name, i
     auto vmobject = AnonymousVMObject::try_create_with_size(range.size(), strategy);
     auto vmobject = AnonymousVMObject::try_create_with_size(range.size(), strategy);
     if (!vmobject)
     if (!vmobject)
         return ENOMEM;
         return ENOMEM;
-    auto region = Region::try_create_user_accessible(m_process, range, vmobject.release_nonnull(), 0, KString::try_create(name), prot_to_region_access_flags(prot), Region::Cacheable::Yes, false);
+    auto region = Region::try_create_user_accessible(range, vmobject.release_nonnull(), 0, KString::try_create(name), prot_to_region_access_flags(prot), Region::Cacheable::Yes, false);
     if (!region)
     if (!region)
         return ENOMEM;
         return ENOMEM;
     if (!region->map(page_directory()))
     if (!region->map(page_directory()))
@@ -200,7 +200,7 @@ KResultOr<Region*> Space::allocate_region_with_vmobject(Range const& range, Nonn
         return EINVAL;
         return EINVAL;
     }
     }
     offset_in_vmobject &= PAGE_MASK;
     offset_in_vmobject &= PAGE_MASK;
-    auto region = Region::try_create_user_accessible(m_process, range, move(vmobject), offset_in_vmobject, KString::try_create(name), prot_to_region_access_flags(prot), Region::Cacheable::Yes, shared);
+    auto region = Region::try_create_user_accessible(range, move(vmobject), offset_in_vmobject, KString::try_create(name), prot_to_region_access_flags(prot), Region::Cacheable::Yes, shared);
     if (!region) {
     if (!region) {
         dbgln("allocate_region_with_vmobject: Unable to allocate Region");
         dbgln("allocate_region_with_vmobject: Unable to allocate Region");
         return ENOMEM;
         return ENOMEM;