ref: d10ef0f597a7e45379e4ad142033cf7bc9ab0de7
parent: 9a256a3c01eb9757e59d4249599dd9bc1ac5de3c
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Thu Jun 18 22:45:58 EDT 2015
kernel: ignore last page at the top of virtual kernel address space for xalloc() avoding kernel address -BY2PG because of end pointer wrapping to zero.
--- a/sys/src/9/port/xalloc.c
+++ b/sys/src/9/port/xalloc.c
@@ -71,8 +71,10 @@
/* first give to kernel */
if(n > 0){m->kbase = (uintptr)KADDR(m->base);
- m->klimit = (uintptr)KADDR(m->base+size-1)+1;
- xhole(m->base, size);
+ m->klimit = (uintptr)m->kbase+size;
+ if(m->klimit == 0)
+ m->klimit = (uintptr)-BY2PG;
+ xhole(m->base, m->klimit - m->kbase);
kpages -= n;
}
/* if anything left over, give to user */
--
⑨