Forward declared memrar_allocator in memrar_allocator.h and moved it
to memrar_allocator.c file. Implemented memrar_allocator_capacity() and
memrar_allocator_largest_free_area().
Signed-off-by: Henri Häkkinen <henuxd@gmail.com>
---
drivers/staging/memrar/memrar_allocator.c | 42 +++++++++++++++++++++++++
drivers/staging/memrar/memrar_allocator.h | 48 ++++++++++++-----------------
2 files changed, 62 insertions(+), 28 deletions(-)
diff --git a/drivers/staging/memrar/memrar_allocator.c b/drivers/staging/memrar/memrar_allocator.c
index a4f8c58..00703c2 100644
--- a/drivers/staging/memrar/memrar_allocator.c
+++ b/drivers/staging/memrar/memrar_allocator.c
@@ -41,6 +41,36 @@
#include <linux/kernel.h>
+/**
+ * struct memrar_allocator - encapsulation of the memory allocator state
+ * @lock: Lock used to synchronize access to the memory
+ * allocator state.
+ * @base: Base (start) address of the allocator memory
+ * space.
+ * @capacity: Size of the allocator memory space in bytes.
+ * @block_size: The size in bytes of individual blocks within
+ * the allocator memory space.
+ * @largest_free_area: Largest free area of memory in the allocator
+ * in bytes.
+ * @allocated_list: List of allocated memory block address
+ * ranges.
+ * @free_list: List of free address ranges.
+ *
+ * This structure contains all memory allocator state, including the
+ * base address, capacity, free list, lock, etc.
+ */
+struct memrar_allocator {
+/* private: internal use only */
+ struct mutex lock;
+ unsigned long base;
+ size_t capacity;
+ size_t block_size;
+ size_t largest_free_area;
+ struct memrar_address_ranges allocated_list;
+ struct memrar_address_ranges free_list;
+};
+
+
struct memrar_allocator *memrar_create_allocator(unsigned long base,
size_t capacity,
size_t block_size)
@@ -423,7 +453,19 @@ exit_memrar_free:
return 0;
}
+size_t memrar_allocator_largest_free_area(struct memrar_allocator *allocator)
+{
+ if (allocator ...