kernel: fix pointer truncation in xspanalloc(), fix format prints

This commit is contained in:
cinap_lenrek 2014-02-01 10:17:53 +01:00
parent 7613608b23
commit dcea714680

View file

@ -57,6 +57,7 @@ xinit(void)
upages = conf.upages; upages = conf.upages;
kpages = conf.npage - upages; kpages = conf.npage - upages;
pm = palloc.mem; pm = palloc.mem;
for(i=0; i<nelem(conf.mem); i++){ for(i=0; i<nelem(conf.mem); i++){
m = &conf.mem[i]; m = &conf.mem[i];
@ -99,7 +100,7 @@ xspanalloc(ulong size, int align, ulong span)
panic("xspanalloc: %lud %d %lux", size, align, span); panic("xspanalloc: %lud %d %lux", size, align, span);
if(span > 2) { if(span > 2) {
v = (a + span) & ~(span-1); v = (a + span) & ~((uintptr)span-1);
t = v - a; t = v - a;
if(t > 0) if(t > 0)
xhole(PADDR(a), t); xhole(PADDR(a), t);
@ -111,7 +112,7 @@ xspanalloc(ulong size, int align, ulong span)
v = a; v = a;
if(align > 1) if(align > 1)
v = (v + align) & ~(align-1); v = (v + align) & ~((uintptr)align-1);
return (void*)v; return (void*)v;
} }
@ -261,16 +262,17 @@ xsummary(void)
{ {
int i; int i;
Hole *h; Hole *h;
uintptr s;
i = 0; i = 0;
for(h = xlists.flist; h; h = h->link) for(h = xlists.flist; h; h = h->link)
i++; i++;
print("%d holes free\n", i); print("%d holes free\n", i);
i = 0;
s = 0;
for(h = xlists.table; h; h = h->link) { for(h = xlists.table; h; h = h->link) {
print("%#p %#p %p\n", h->addr, h->top, h->size); print("%#p %#p %p\n", h->addr, h->top, h->size);
i += h->size; s += h->size;
} }
print("%d bytes free\n", i); print("%lld bytes free\n", (vlong)s);
} }