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