[kernel] Remove last of old allocator interface

Removing the `allocator.h` file defining the `kutil::allocator`
interface, now that explicit allocators are not being passed around.
Also removed the unused `frame_allocator::raw_allocator` class and
`kutil::invalid_allocator` object.

Tags: memory
This commit is contained in:
Justin C. Miller
2020-06-01 23:40:19 -07:00
parent a5f72edf82
commit b881b2639d
8 changed files with 5 additions and 97 deletions

View File

@@ -1,3 +1,4 @@
#include "kernel_memory.h"
#include "kutil/assert.h" #include "kutil/assert.h"
#include "kutil/memory.h" #include "kutil/memory.h"
#include "frame_allocator.h" #include "frame_allocator.h"
@@ -17,30 +18,7 @@ frame_block::compare(const frame_block *rhs) const
} }
frame_allocator::raw_alloc::raw_alloc(frame_allocator &fa) : m_fa(fa) {} frame_allocator::frame_allocator() {}
void *
frame_allocator::raw_alloc::allocate(size_t size)
{
kassert(size <= frame_size, "Raw allocator only allocates a single page");
uintptr_t addr = 0;
if (size <= frame_size)
m_fa.allocate(1, &addr);
return reinterpret_cast<void*>(addr + page_offset);
}
void
frame_allocator::raw_alloc::free(void *p)
{
m_fa.free(reinterpret_cast<uintptr_t>(p), 1);
}
frame_allocator::frame_allocator() :
m_raw_alloc(*this)
{
}
size_t size_t
frame_allocator::allocate(size_t count, uintptr_t *address) frame_allocator::allocate(size_t count, uintptr_t *address)

View File

@@ -4,7 +4,6 @@
#include <stdint.h> #include <stdint.h>
#include "kutil/allocator.h"
#include "kutil/linked_list.h" #include "kutil/linked_list.h"
struct frame_block; struct frame_block;
@@ -30,23 +29,7 @@ public:
/// \arg count The number of frames to be freed /// \arg count The number of frames to be freed
void free(uintptr_t address, size_t count); void free(uintptr_t address, size_t count);
/// Get a memory allocator that allocates raw pages
/// \returns The allocator ojbect
kutil::allocator & raw_allocator() { return m_raw_alloc; }
private: private:
class raw_alloc :
public kutil::allocator
{
public:
raw_alloc(frame_allocator &fa);
virtual void * allocate(size_t size) override;
virtual void free(void *p) override;
private:
frame_allocator &m_fa;
};
raw_alloc m_raw_alloc;
frame_block_list m_free; ///< Free frames list frame_block_list m_free; ///< Free frames list
frame_allocator(const frame_allocator &) = delete; frame_allocator(const frame_allocator &) = delete;

View File

@@ -3,7 +3,6 @@
/// The task scheduler and related definitions /// The task scheduler and related definitions
#include <stdint.h> #include <stdint.h>
#include "kutil/allocator.h"
#include "process.h" #include "process.h"
class lapic; class lapic;

View File

@@ -157,21 +157,4 @@ heap_allocator::pop_free(unsigned size)
return block; return block;
} }
class invalid_allocator :
public allocator
{
public:
virtual void * allocate(size_t) override {
kassert(false, "Attempting to allocate from allocator::invalid");
return nullptr;
}
virtual void free(void *) override {
kassert(false, "Attempting to free from allocator::invalid");
}
} _invalid_allocator;
allocator &allocator::invalid = _invalid_allocator;
} // namespace kutil } // namespace kutil

View File

@@ -1,31 +0,0 @@
#pragma once
/// \file allocator.h
/// Allocator interface
#include <stdint.h>
#include "kernel_memory.h"
namespace kutil {
class allocator
{
public:
/// Allocate memory.
/// \arg length The amount of memory to allocate, in bytes
/// \returns A pointer to the allocated memory, or nullptr if
/// allocation failed.
virtual void * allocate(size_t size) = 0;
/// Free a previous allocation.
/// \arg p A pointer previously retuned by allocate()
virtual void free(void *p) = 0;
template <typename T>
inline T * allocate(unsigned count) {
return reinterpret_cast<T*>(allocate(count * sizeof(T)));
}
static allocator &invalid;
};
} // namespace kutil

View File

@@ -3,14 +3,12 @@
/// A buddy allocator for a memory heap /// A buddy allocator for a memory heap
#include <stddef.h> #include <stddef.h>
#include "kutil/allocator.h"
namespace kutil { namespace kutil {
/// Allocator for a given heap range /// Allocator for a given heap range
class heap_allocator : class heap_allocator
public allocator
{ {
public: public:
/// Default constructor creates a valid but empty heap. /// Default constructor creates a valid but empty heap.
@@ -25,11 +23,11 @@ public:
/// \arg length The amount of memory to allocate, in bytes /// \arg length The amount of memory to allocate, in bytes
/// \returns A pointer to the allocated memory, or nullptr if /// \returns A pointer to the allocated memory, or nullptr if
/// allocation failed. /// allocation failed.
virtual void * allocate(size_t length) override; virtual void * allocate(size_t length);
/// Free a previous allocation. /// Free a previous allocation.
/// \arg p A pointer previously retuned by allocate() /// \arg p A pointer previously retuned by allocate()
virtual void free(void *p) override; virtual void free(void *p);
/// Minimum block size is (2^min_size). Must be at least 6. /// Minimum block size is (2^min_size). Must be at least 6.
static const unsigned min_size = 6; static const unsigned min_size = 6;

View File

@@ -4,7 +4,6 @@
#include <algorithm> #include <algorithm>
#include <utility> #include <utility>
#include "kutil/allocator.h"
#include "kutil/memory.h" #include "kutil/memory.h"
namespace kutil { namespace kutil {

View File

@@ -3,7 +3,6 @@
/// Structure for tracking a range of virtual memory addresses /// Structure for tracking a range of virtual memory addresses
#include <stdint.h> #include <stdint.h>
#include "kutil/allocator.h"
#include "kutil/avl_tree.h" #include "kutil/avl_tree.h"
namespace kutil { namespace kutil {