Kaynağa Gözat

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 yıl önce
ebeveyn
işleme
7ef9c703d2
1 değiştirilmiş dosya ile 6 ekleme ve 5 silme
  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);
 };