提交 00826721 创建 作者: Frans Kaashoek's avatar Frans Kaashoek

Merge branch 'scale' of ssh://amsterdam.csail.mit.edu/home/am0/6.828/xv6 into scale

Conflicts: kalloc.c
......@@ -242,6 +242,15 @@ qemu-nox: fs.img xv6.img
mtrace-nox: fs.img xv6.img mscan.syms mscan.kern
$(MTRACE) -nographic $(QEMUOPTS) $(MTRACEOPTS)
mtrace.txt: mtrace.out $(QEMUSRC)/mtrace-tools/m2text
$(QEMUSRC)/mtrace-tools/m2text $< > $@
mscan.out: mtrace.out $(QEMUSRC)/mtrace-tools/mscan
$(QEMUSRC)/mtrace-tools/mscan > $@
mscan.sorted: mscan.out $(QEMUSRC)/mtrace-tools/sersec-sort.py
$(QEMUSRC)/mtrace-tools/sersec-sort.py < $< > $@
.gdbinit: .gdbinit.tmpl
sed "s/localhost:1234/localhost:$(GDBPORT)/" < $^ > $@
......
......@@ -19,6 +19,7 @@ void kminit(void);
struct kmem kmems[NCPU];
extern char end[]; // first address after kernel loaded from ELF file
char *newend;
enum { kalloc_memset = 0 };
static int kinited __attribute__ ((aligned (CACHELINE)));
......@@ -41,7 +42,7 @@ kmemprint(void)
{
cprintf("free pages: [ ");
for (uint i = 0; i < NCPU; i++)
if (i == cpunum())
if (i == cpu->id)
cprintf("<%d> ", kmems[i].nfree);
else
cprintf("%d ", kmems[i].nfree);
......@@ -63,7 +64,7 @@ kfree_pool(struct kmem *m, char *v)
}
// Fill with junk to catch dangling refs.
if (kinited)
if (kinited && kalloc_memset)
memset(v, 1, PGSIZE);
acquire(&m->lock);
......@@ -71,6 +72,8 @@ kfree_pool(struct kmem *m, char *v)
r->next = m->freelist;
m->freelist = r;
m->nfree++;
release(&m->lock);
if (kinited)
mtrace_label_register(mtrace_label_block,
r,
......@@ -78,8 +81,6 @@ kfree_pool(struct kmem *m, char *v)
0,
0,
RET_EIP());
release(&m->lock);
}
void
......@@ -118,7 +119,7 @@ kalloc(void)
// cprintf("%d: kalloc 0x%x 0x%x 0x%x 0x%x 0%x\n", cpu->id, kmem, &kmems[cpu->id], kmem->freelist, PHYSTOP, kmems[1].freelist);
uint startcpu = cpunum();
uint startcpu = cpu->id;
for (uint i = 0; r == 0 && i < NCPU; i++) {
int cn = (i + startcpu) % NCPU;
struct kmem *m = &kmems[cn];
......@@ -144,7 +145,8 @@ kalloc(void)
sizeof("kalloc"),
RET_EIP());
memset(r, 2, PGSIZE);
if (kalloc_memset)
memset(r, 2, PGSIZE);
return (char*)r;
}
......
......@@ -127,9 +127,11 @@ cpunum(void)
// often indirectly through acquire and release.
if(readeflags()&FL_IF){
static int n __attribute__ ((aligned (CACHELINE)));
if(n++ == 0)
if(n == 0) {
n++;
cprintf("cpu called from %x with interrupts enabled\n",
__builtin_return_address(0));
}
}
if(lapic)
......
......@@ -48,6 +48,7 @@ nsalloc(void)
if (ns == 0)
panic("nsalloc");
memset(ns, 0, sizeof(struct ns));
initlock(&ns_lock, "ns");
acquire(&ns_lock);
for (int i = 0; i < NHASH; i++) {
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论