summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/heap.c2
-rw-r--r--src/core/malloc.c11
-rw-r--r--src/include/gpxe/malloc.h (renamed from src/include/malloc.h)12
-rw-r--r--src/net/pkbuff.c2
4 files changed, 19 insertions, 8 deletions
diff --git a/src/core/heap.c b/src/core/heap.c
index f2c7e80b6..4afd270b1 100644
--- a/src/core/heap.c
+++ b/src/core/heap.c
@@ -1,4 +1,4 @@
-#include <malloc.h>
+#include <gpxe/malloc.h>
#include <gpxe/heap.h>
/**
diff --git a/src/core/malloc.c b/src/core/malloc.c
index db2b500c9..448080b4f 100644
--- a/src/core/malloc.c
+++ b/src/core/malloc.c
@@ -22,7 +22,7 @@
#include <strings.h>
#include <io.h>
#include <gpxe/list.h>
-#include <malloc.h>
+#include <gpxe/malloc.h>
/** @file
*
@@ -69,6 +69,9 @@ struct autosized_block {
/** List of free memory blocks */
static LIST_HEAD ( free_blocks );
+/** Total amount of free memory */
+size_t freemem;
+
/**
* Allocate a memory block
*
@@ -134,6 +137,9 @@ void * alloc_memblock ( size_t size, size_t align ) {
*/
if ( pre_size < MIN_MEMBLOCK_SIZE )
list_del ( &pre->list );
+ /* Update total free memory */
+ freemem -= size;
+ /* Return allocated block */
DBG ( "Allocated [%p,%p)\n", block,
( ( ( void * ) block ) + size ) );
return block;
@@ -206,6 +212,9 @@ void free_memblock ( void *ptr, size_t size ) {
freeing->size += block->size;
list_del ( &block->list );
}
+
+ /* Update free memory counter */
+ freemem += size;
}
/**
diff --git a/src/include/malloc.h b/src/include/gpxe/malloc.h
index b14ec78c8..0e18f6a35 100644
--- a/src/include/malloc.h
+++ b/src/include/gpxe/malloc.h
@@ -1,5 +1,5 @@
-#ifndef _MALLOC_H
-#define _MALLOC_H
+#ifndef _GPXE_MALLOC_H
+#define _GPXE_MALLOC_H
#include <stdint.h>
@@ -11,12 +11,14 @@
/*
* Prototypes for the standard functions (malloc() et al) are in
- * stdlib.h. Include <malloc.h> only if you need the non-standard
- * functions, such as malloc_dma().
+ * stdlib.h. Include <gpxe/malloc.h> only if you need the
+ * non-standard functions, such as malloc_dma().
*
*/
#include <stdlib.h>
+extern size_t freemem;
+
extern void * alloc_memblock ( size_t size, size_t align );
extern void free_memblock ( void *ptr, size_t size );
extern void mpopulate ( void *start, size_t len );
@@ -52,4 +54,4 @@ static inline void free_dma ( void *ptr, size_t size ) {
free_memblock ( ptr, size );
}
-#endif /* _MALLOC_H */
+#endif /* _GPXE_MALLOC_H */
diff --git a/src/net/pkbuff.c b/src/net/pkbuff.c
index ac3088301..63bc95f0f 100644
--- a/src/net/pkbuff.c
+++ b/src/net/pkbuff.c
@@ -17,7 +17,7 @@
*/
#include <stdint.h>
-#include <malloc.h>
+#include <gpxe/malloc.h>
#include <gpxe/pkbuff.h>
/** @file