summaryrefslogtreecommitdiff
path: root/src/kernel/malloc.c
diff options
context:
space:
mode:
authordzwdz2024-07-16 23:55:32 +0200
committerdzwdz2024-07-17 00:01:15 +0200
commit473112b1541cf81fa3670e0d1cb6de1c4a3281de (patch)
tree4df8f777e2150468e8866f4496e1de32b309ccda /src/kernel/malloc.c
parente29f0e294ac841e2036fe514df4ed66f5d0ec46f (diff)
kernel: make kmalloc accept a numeric "tag" instead of a freeform description
This will both let me save space in the allocation header, and make the debugprint more readable.
Diffstat (limited to 'src/kernel/malloc.c')
-rw-r--r--src/kernel/malloc.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/kernel/malloc.c b/src/kernel/malloc.c
index 3c10108..ca44cfe 100644
--- a/src/kernel/malloc.c
+++ b/src/kernel/malloc.c
@@ -11,6 +11,27 @@
#define SCMIN 6 /* 1<<6 == 64 */
#define SCMAX 12 /* 1<<11 == 2048 */
+const char *tagnames[] = {
+ "TagInvalid",
+ "TagKernelFs",
+ "TagProcFs",
+ "TagUserFs",
+ "TagOpenPath",
+ "TagMountPath",
+ "TagMountUser",
+ "TagMountRoot",
+ "TagExecbuf",
+ "TagVfsReq",
+ "TagHandleset",
+ "TagHandle",
+ "TagProcess",
+ "TagProcessHandle",
+ "TagDevTime",
+ "TagRootCache",
+ "TagPageRefcount",
+};
+static_assert(sizeof(tagnames) == sizeof(const char *) * TagLast);
+
typedef struct Slab Slab;
struct Slab {
/* The slab is divided up into 1<<sizeclass sized regions.
@@ -108,13 +129,16 @@ getheader(void *addr)
}
void *
-kmalloc(size_t len, const char *desc)
+kmalloc(size_t len, enum MallocTag tag)
{
Slab *al;
void *ret;
int sizeclass, regsize;
uint64_t idx;
+ assert(tag != TagInvalid && tag < TagLast);
+ const char *desc = tagnames[tag] + 3; // very temporary
+
assert(len <= KMALLOC_MAX);
len += DESCLEN;
sizeclass = getsizeclass(len);