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

fix sporadic kernel panic

上级 acd87eba
#define KBASE 0xFFFFFF0000000000ull
#define KBASEEND 0xFFFFFF2000000000ull // 128GB
#define KCODE 0xFFFFFFFFC0000000ull
#define KSHARED 0xFFFFF00000000000ull
#define USERWQ 0xFFFFF00100000000ull
......
......@@ -70,7 +70,7 @@ initpg(void)
u64 va = KBASE;
paddr pa = 0;
while (va < (KBASE+(128ull<<30))) {
while (va < KBASEEND) {
auto pdp = descend(&kpml4, va, 0, 1, 3);
auto pd = descend(pdp, va, 0, 1, 2);
atomic<pme_t> *sp = &pd->e[PX(1,va)];
......
......@@ -275,7 +275,8 @@ getcallerpcs(void *v, uptr pcs[], int n)
rbp = (uptr*)v;
for(i = 0; i < n; i++){
if(rbp == 0 || rbp < (uptr*)KBASE || rbp == (uptr*)(~0UL))
if(rbp == 0 || rbp < (uptr*)KBASE || rbp == (uptr*)(~0UL) ||
(rbp >= (uptr*)KBASEEND && rbp < (uptr*)KCODE))
break;
pcs[i] = rbp[1]; // saved %rip
rbp = (uptr*)rbp[0]; // saved %rbp
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论