Selaa lähdekoodia

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 vuotta sitten
vanhempi
commit
7ef9c703d2
1 muutettua tiedostoa jossa 6 lisäystä ja 5 poistoa
  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*)];
     };
 
-    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);
 };