提交 46127900 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

print stack trace for kalloc failures

上级 8cb54158
...@@ -17,6 +17,15 @@ struct kmem kmems[NCPU]; ...@@ -17,6 +17,15 @@ struct kmem kmems[NCPU];
extern char end[]; // first address after kernel loaded from ELF file extern char end[]; // first address after kernel loaded from ELF file
static void __attribute__((unused))
kmemprint(void)
{
cprintf("free pages: [ ");
for (uint i = 0; i < NCPU; i++)
cprintf("%d ", kmems[i].nfree);
cprintf("]\n");
}
// Initialize free list of physical pages. // Initialize free list of physical pages.
void void
kinit(void) kinit(void)
...@@ -94,9 +103,8 @@ kalloc(void) ...@@ -94,9 +103,8 @@ kalloc(void)
RET_EIP()); RET_EIP());
if (r == 0) { if (r == 0) {
cprintf("%d: kalloc out\n", cpunum()); kmemprint();
for (uint i = 0; i < NCPU; i++) panic("out of memory");
cprintf("cpu %d: %d free pages\n", i, kmems[i].nfree);
} }
memset(r, 2, PGSIZE); memset(r, 2, PGSIZE);
return (char*)r; return (char*)r;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论