提交 9fc24f92 创建 作者: Austin Clements's avatar Austin Clements

Record type names of kalloc'd memory

上级 44c215b1
......@@ -125,7 +125,7 @@ void idlezombie(struct proc*);
void ioapicenable(int irq, int cpu);
// kalloc.c
char* kalloc(void);
char* kalloc(const char *name);
void kfree(void*);
void* ksalloc(int slabtype);
void ksfree(int slabtype, void*);
......
......@@ -13,6 +13,10 @@
using namespace std;
static const char *levelnames[] = {
"PT", "PD", "PDP", "PML4"
};
static pgmap*
descend(pgmap *dir, u64 va, u64 flags, int create, int level)
{
......@@ -28,7 +32,7 @@ retry:
} else {
if (!create)
return nullptr;
next = (pgmap*) kalloc();
next = (pgmap*) kalloc(levelnames[level-1]);
if (!next)
return nullptr;
memset(next, 0, PGSIZE);
......@@ -83,7 +87,7 @@ setupkvm(void)
pgmap *pml4;
int k;
if((pml4 = (pgmap*)kalloc()) == 0)
if((pml4 = (pgmap*)kalloc("PML4")) == 0)
return 0;
k = PX(3, KBASE);
memset(&pml4->e[0], 0, 8*k);
......
......@@ -160,7 +160,7 @@ kmemprint()
}
static char*
kalloc_pool(struct kmem *km)
kalloc_pool(struct kmem *km, const char *name)
{
struct run *r = 0;
struct kmem *m;
......@@ -196,7 +196,8 @@ kalloc_pool(struct kmem *km)
return 0;
}
mtlabel(mtrace_label_block, r, m->size, "kalloc", sizeof("kalloc"));
if (name)
mtlabel(mtrace_label_block, r, m->size, name, strlen(name));
if (ALLOC_MEMSET && m->size <= 16384)
memset(r, 2, m->size);
......@@ -207,17 +208,17 @@ kalloc_pool(struct kmem *km)
// Returns a pointer that the kernel can use.
// Returns 0 if the memory cannot be allocated.
char*
kalloc(void)
kalloc(const char *name)
{
if (!kinited)
return pgalloc();
return kalloc_pool(kmems);
return kalloc_pool(kmems, name);
}
void *
ksalloc(int slab)
{
return kalloc_pool(slabmem[slab]);
return kalloc_pool(slabmem[slab], slabmem[slab]->name);
}
void
......
......@@ -34,10 +34,10 @@ kminit(void)
}
// get more space for freelists[c].buckets[b]
int
static int
morecore(int c, int b)
{
char *p = kalloc();
char *p = kalloc(nullptr);
if(p == 0)
return -1;
......@@ -103,10 +103,11 @@ kmalloc(u64 nbytes, const char *name)
}
}
mtlabel(mtrace_label_heap, (void*) h, nbytes, name, strlen(name));
if (ALLOC_MEMSET)
memset(h, 4, (1<<b));
mtlabel(mtrace_label_heap, (void*) h, nbytes, name, strlen(name));
return h;
}
......
......@@ -32,7 +32,7 @@ netfree(void *va)
void *
netalloc(void)
{
return kalloc();
return kalloc("(netalloc)");
}
int
......@@ -352,7 +352,7 @@ netwrite(int sock, char *ubuf, int len)
int cc;
int r;
kbuf = kalloc();
kbuf = kalloc("(netwrite)");
if (kbuf == nullptr)
return -1;
......@@ -375,7 +375,7 @@ netread(int sock, char *ubuf, int len)
int cc;
int r;
kbuf = kalloc();
kbuf = kalloc("(netread)");
if (kbuf == nullptr)
return -1;
......
......@@ -56,7 +56,7 @@ vmnode::allocpg()
if (page[i])
continue;
char *p = kalloc();
char *p = kalloc("(vmnode::allocpg)");
if (!p) {
cprintf("allocpg: out of memory, leaving half-filled vmnode\n");
return -1;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论