1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 08:17:35 +00:00

Kernel: Switch singletons to use new Singleton class

Fixes #3226
This commit is contained in:
Tom 2020-08-20 09:36:06 -06:00 committed by Andreas Kling
parent 527c8047fe
commit f48feae0b2
44 changed files with 184 additions and 146 deletions

View file

@ -39,6 +39,7 @@
#include <Kernel/VM/PhysicalRegion.h>
#include <Kernel/VM/PurgeableVMObject.h>
#include <Kernel/VM/SharedInodeVMObject.h>
#include <Kernel/Singleton.h>
#include <Kernel/StdLib.h>
//#define MM_DEBUG
@ -50,7 +51,7 @@ extern FlatPtr end_of_kernel_bss;
namespace Kernel {
static MemoryManager* s_the;
static auto s_the = make_singleton<MemoryManager>();
RecursiveSpinLock s_mm_lock;
MemoryManager& MM
@ -60,6 +61,8 @@ MemoryManager& MM
MemoryManager::MemoryManager()
{
ASSERT(!s_the.is_initialized());
ScopedSpinLock lock(s_mm_lock);
m_kernel_page_directory = PageDirectory::create_kernel_page_directory();
parse_memory_map();
@ -217,7 +220,7 @@ void MemoryManager::initialize(u32 cpu)
Processor::current().set_mm_data(*mm_data);
if (cpu == 0)
s_the = new MemoryManager;
s_the.ensure_instance();
}
Region* MemoryManager::kernel_region_from_vaddr(VirtualAddress vaddr)

View file

@ -85,6 +85,7 @@ class MemoryManager {
friend Optional<KBuffer> procfs$memstat(InodeIdentifier);
public:
MemoryManager();
static MemoryManager& the();
static void initialize(u32 cpu);
@ -160,7 +161,6 @@ public:
PageDirectory& kernel_page_directory() { return *m_kernel_page_directory; }
private:
MemoryManager();
~MemoryManager();
enum class AccessSpace { Kernel,

View file

@ -27,6 +27,7 @@
#include <AK/Memory.h>
#include <Kernel/Process.h>
#include <Kernel/Random.h>
#include <Kernel/Singleton.h>
#include <Kernel/Thread.h>
#include <Kernel/VM/MemoryManager.h>
#include <Kernel/VM/PageDirectory.h>
@ -37,13 +38,12 @@ static const FlatPtr userspace_range_base = 0x00800000;
static const FlatPtr userspace_range_ceiling = 0xbe000000;
static const FlatPtr kernelspace_range_base = 0xc0800000;
static auto s_cr3_map = make_singleton<HashMap<u32, PageDirectory*>>();
static HashMap<u32, PageDirectory*>& cr3_map()
{
ASSERT_INTERRUPTS_DISABLED();
static HashMap<u32, PageDirectory*>* map;
if (!map)
map = new HashMap<u32, PageDirectory*>;
return *map;
return *s_cr3_map;
}
RefPtr<PageDirectory> PageDirectory::find_by_cr3(u32 cr3)