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

Record type names of kalloc'd memory

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