提交 10a20d0c 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

get rid of dynamic memory allocation for scopedperf,

which allows moving initsperf() to before initkalloc().
上级 3ae1d7bd
......@@ -409,6 +409,7 @@ class tsc_ctr : public namedctr<64> {
__asm __volatile("rdtsc" : "=a" (a), "=d" (d));
return a | (d << 32);
}
NEW_DELETE_OPS(tsc_ctr)
};
class tscp_ctr : public namedctr<64> {
......
#pragma once
#include "scopedperf.hh"
extern scopedperf::ctrgroup_chain<scopedperf::tsc_ctr> *perfgroup;
extern scopedperf::ctrgroup_chain<scopedperf::tsc_ctr> perfgroup;
......@@ -76,11 +76,11 @@ cmain(u64 mbmagic, u64 mbaddr)
inituart();
initcga();
initconsole();
initsperf();
inittrap();
initmp();
initlapic();
initkalloc(mbaddr);
initsperf();
initproc(); // process table
initsched(); // scheduler run queues
initgc(); // gc epochs and threads
......
......@@ -7,11 +7,13 @@
using namespace scopedperf;
ctrgroup_chain<tsc_ctr> *perfgroup;
static tsc_ctr tsc;
ctrgroup_chain<tsc_ctr> perfgroup(&tsc);
// but xv6 doesn't run static constructors, so call them explicitly below..
void
initsperf()
{
static tsc_ctr tsc;
perfgroup = new ctrgroup_chain<tsc_ctr>(&tsc);
new (&tsc) tsc_ctr();
new (&perfgroup) ctrgroup_chain<tsc_ctr>(&tsc);
}
......@@ -86,7 +86,7 @@ sys_uptime(void)
long
sys_map(uptr addr, u64 len)
{
ANON_REGION(__func__, perfgroup);
ANON_REGION(__func__, &perfgroup);
vmnode *vmn = new vmnode(PGROUNDUP(len) / PGSIZE);
if (vmn == 0)
......@@ -103,7 +103,7 @@ sys_map(uptr addr, u64 len)
long
sys_unmap(uptr addr, u64 len)
{
ANON_REGION(__func__, perfgroup);
ANON_REGION(__func__, &perfgroup);
uptr align_addr = PGROUNDDOWN(addr);
uptr align_len = PGROUNDUP(addr + len) - align_addr;
......
......@@ -274,7 +274,7 @@ vmap::lookup(uptr start, uptr len)
int
vmap::insert(vmnode *n, uptr vma_start, int dotlb)
{
ANON_REGION("vmap::insert", perfgroup);
ANON_REGION("vmap::insert", &perfgroup);
vma *e;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论