From e2697c2dddd531c0ac7cad3fd6ca78e81d0d86da Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 1 Mar 2020 11:14:56 +0100 Subject: [PATCH] Kernel: Use PrivateInodeVMObject for loading program executables This will be a memory usage pessimization until we actually implement CoW sharing of the memory pages with SharedInodeVMObject. However, it's a huge architectural improvement, so let's take it and improve on this incrementally. fork() should still be neutral, since all private mappings are CoW'ed. --- Kernel/Process.cpp | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index e6d0931ad3..4a140fa547 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -67,6 +67,7 @@ #include #include #include +#include #include #include #include @@ -808,17 +809,8 @@ int Process::do_exec(NonnullRefPtr main_program_description, Ve if (parts.is_empty()) return -ENOENT; - RefPtr vmobject; - if (interpreter_description) { - vmobject = SharedInodeVMObject::create_with_inode(*interpreter_description->inode()); - } else { - vmobject = SharedInodeVMObject::create_with_inode(*main_program_description->inode()); - } - - if (static_cast(*vmobject).writable_mappings()) { - dbg() << "Refusing to execute a write-mapped program"; - return -ETXTBSY; - } + auto& inode = interpreter_description ? *interpreter_description->inode() : *main_program_description->inode(); + auto vmobject = PrivateInodeVMObject::create_with_inode(inode); // Disable profiling temporarily in case it's running on this process. bool was_profiling = is_profiling();