Przeglądaj źródła

Kernel: Unbreak SlabAllocator after startup-time constructors

Now that the kernel supports startup-time constructors, we were first
doing slab_alloc_init(), and then the constructors ran later on,
zeroing out the freelist pointers.

This meant that all slab allocators thought they were completelty
exhausted and forwarded all requests to kmalloc() instead.
Andreas Kling 5 lat temu
rodzic
commit
7ef9c703d2
1 zmienionych plików z 6 dodań i 5 usunięć
  1. 6 5
      Kernel/Heap/SlabAllocator.cpp

+ 6 - 5
Kernel/Heap/SlabAllocator.cpp

@@ -61,11 +61,12 @@ private:
         char padding[templated_slab_size - sizeof(FreeSlab*)];
         char padding[templated_slab_size - sizeof(FreeSlab*)];
     };
     };
 
 
-    FreeSlab* m_freelist { nullptr };
-    size_t m_num_allocated { 0 };
-    size_t m_num_free { 0 };
-    void* m_base { nullptr };
-    void* m_end { nullptr };
+    // NOTE: These are not default-initialized to prevent an init-time constructor from overwriting them
+    FreeSlab* m_freelist;
+    size_t m_num_allocated;
+    size_t m_num_free;
+    void* m_base;
+    void* m_end;
 
 
     static_assert(sizeof(FreeSlab) == templated_slab_size);
     static_assert(sizeof(FreeSlab) == templated_slab_size);
 };
 };