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

remove unneeded this->

fix shadowing declarations
上级 39fa2be7
......@@ -79,23 +79,23 @@ bget(u32 dev, u64 sector, int *writer)
// Allocate fresh block.
struct buf *victim = 0;
bufns->enumerate([&victim](const pair<u32, u64>&, buf *b)->bool {
acquire(&b->lock);
if ((b->flags & (B_BUSY | B_DIRTY | B_VALID)) == 0) {
victim = b;
bufns->enumerate([&victim](const pair<u32, u64>&, buf *eb)->bool {
acquire(&eb->lock);
if ((eb->flags & (B_BUSY | B_DIRTY | B_VALID)) == 0) {
victim = eb;
return true;
}
release(&b->lock);
release(&eb->lock);
return false;
});
if (victim == 0)
bufns->enumerate([&victim](const pair<u32, u64>&, buf *b)->bool {
acquire(&b->lock);
if ((b->flags & (B_BUSY | B_DIRTY)) == 0) {
victim = b;
bufns->enumerate([&victim](const pair<u32, u64>&, buf *eb)->bool {
acquire(&eb->lock);
if ((eb->flags & (B_BUSY | B_DIRTY)) == 0) {
victim = eb;
return true;
}
release(&b->lock);
release(&eb->lock);
return false;
});
if (victim == 0)
......
......@@ -89,51 +89,51 @@ void range::print(int l)
range::~range()
{
dprintf("%d: range_free: 0x%lx 0x%lx-0x%lx(%ld)\n", myproc()->cpuid, (u64) this, this->key, this->key+this->size, this->size);
this->cr->check(this);
// assert(this->curlevel == -1);
for (int l = 0; l < this->nlevel; l++) {
dprintf("%d: range_free: 0x%lx 0x%lx-0x%lx(%ld)\n", myproc()->cpuid, (u64) this, key, key+size, size);
cr->check(this);
// assert(curlevel == -1);
for (int l = 0; l < nlevel; l++) {
next[l] = (struct range *) 0xDEADBEEF;
}
kmalignfree(this->lock);
kmfree(this->next);
kmalignfree(lock);
kmfree(next);
}
void range::free_delayed(void)
{
dprintf("%d: free_delayed: 0x%lx 0x%lx-0x%lx(%lu) %lu\n", myproc()->pid, (long) this, this->key, this->key + this->size, this->size, myproc()->epoch);
this->cr->check(this);
assert(this->curlevel == -1);
dprintf("%d: free_delayed: 0x%lx 0x%lx-0x%lx(%lu) %lu\n", myproc()->pid, (long) this, key, key + size, size, myproc()->epoch);
cr->check(this);
assert(curlevel == -1);
gc_delayed(this);
}
void range::dec_ref(void)
{
int n = this->curlevel--;
int n = curlevel--;
if (n == 0) { // now removed from all levels.
this->free_delayed();
free_delayed();
}
}
range::range(crange *cr, u64 k, u64 sz, void *v, markptr<range> n, int nlevel)
range::range(crange *crarg, u64 k, u64 sz, void *v, markptr<range> n, int nl)
: rcu_freed("range_delayed")
{
dprintf("range:range:: %lu %lu %d\n", k, sz, nlevel);
this->key = k;
this->size = sz;
this->value = v;
this->cr = cr;
dprintf("range:range:: %lu %lu %d\n", k, sz, nl);
key = k;
size = sz;
value = v;
cr = crarg;
assert(cr->nlevel > 0);
this->curlevel = 0;
if (nlevel == 0) this->nlevel = range_draw_nlevel(cr->nlevel);
else this->nlevel = nlevel;
this->next = new markptr<range>[this->nlevel]; // cache align?
assert(this->next);
this->next[0] = n;
for (int l = 1; l < this->nlevel; l++) this->next[l] = 0;
assert(kmalign((void **) &this->lock, CACHELINE,
curlevel = 0;
if (nl == 0) nlevel = range_draw_nlevel(cr->nlevel);
else nlevel = nl;
next = new markptr<range>[nlevel]; // cache align?
assert(next);
next[0] = n;
for (int l = 1; l < nlevel; l++) next[l] = 0;
assert(kmalign((void **) &lock, CACHELINE,
sizeof(struct spinlock)) == 0);
initlock(this->lock, "crange", LOCKSTAT_CRANGE);
initlock(lock, "crange", LOCKSTAT_CRANGE);
}
//
......@@ -160,16 +160,16 @@ static range *insert(struct range *head, struct range *r)
return head;
}
// lock p if this->next == e and p isn't marked for deletion. if not, return failure.
// lock p if next == e and p isn't marked for deletion. if not, return failure.
int range::lockif(markptr<range> e)
{
assert(!e.mark());
acquire(this->lock);
if (this->next[0] == e) {
acquire(lock);
if (next[0] == e) {
return 1;
}
release(this->lock);
// cprintf("%d: range_lock_pred: retry %u\n", mycpu()->id, this->key);
release(lock);
// cprintf("%d: range_lock_pred: retry %u\n", mycpu()->id, key);
return 0;
}
......@@ -270,7 +270,7 @@ static range *replace(u64 k, u64 sz, void *v, range *f, range *l, range *s)
void
crange::print(int full)
{
for (int l = 0; l < this->nlevel; l++) {
for (int l = 0; l < nlevel; l++) {
int c = 0;
cprintf("crange %d: ", l);
for (range *e = crange_head->next[l].ptr(); e != 0; e = e->next[l].ptr()) {
......@@ -281,11 +281,11 @@ crange::print(int full)
}
}
crange::crange(int nlevel)
crange::crange(int nl)
{
assert(nlevel >= 0);
this->nlevel = nlevel;
this->crange_head = new range(this, 0, 0, nullptr, nullptr, nlevel);
assert(nl >= 0);
nlevel = nl;
crange_head = new range(this, 0, 0, nullptr, nullptr, nlevel);
dprintf("crange::crange return 0x%lx\n", (u64) this);
}
......@@ -293,11 +293,11 @@ crange::~crange()
{
dprintf("crange_free: 0x%lx\n", (u64) this);
range *e, *n;
for (e = this->crange_head->next[0].ptr(); e; e = n) {
for (e = crange_head->next[0].ptr(); e; e = n) {
n = e->next[0].ptr();
delete e;
}
delete this->crange_head;
delete crange_head;
}
// Check some invariants, ignoring marked nodes.
......@@ -307,9 +307,9 @@ void crange::check(struct range *absent)
return;
int t = mycpu()->id;
struct range *e, *s;
for (int l = 0; l < this->nlevel; l++) {
for (e = this->crange_head->next[l].ptr(); e; e = s) {
assert(e->curlevel < this->nlevel);
for (int l = 0; l < nlevel; l++) {
for (e = crange_head->next[l].ptr(); e; e = s) {
assert(e->curlevel < nlevel);
if (absent == e) {
cprintf("%d: check level failed; 0x%lx is present\n", l, (u64) absent);
assert(0);
......@@ -324,7 +324,7 @@ void crange::check(struct range *absent)
// from memory (and not from a register)
if (!e->next[l].mark() && n != e) {
cprintf("%d: check level %d failed 0x%lx-0x%lx(%lu) m %d c %d t %d; in high level but not low\n", t, l, e->key, e->key+e->size, e->size, (bool)e->next[l].mark(), e->curlevel.load(), e->nlevel);
this->print(1);
print(1);
assert(0);
}
}
......@@ -333,7 +333,7 @@ void crange::check(struct range *absent)
assert(s != e);
if (!e->next[l].mark() && s && (e->key + e->size > s->key)) {
dprintf("%d: e(%lu,%lu) overlaps with s(%lu,%lu)\n", t, e->key, e->size, s->key, e->size);
this->print(1);
print(1);
assert(0);
}
}
......@@ -374,7 +374,7 @@ int crange::del_index(range *p0, range **e, int l)
}
}
done:
this->check(nullptr);
check(nullptr);
return r;
}
......@@ -407,8 +407,9 @@ void crange::add_index(int l, range *e, range *p1, markptr<range> s1)
//INCRETRY;
}
}
done:
this->check(nullptr);
check(nullptr);
}
// Given the range that starts the sequence, find all other ranges part of sequence and lock them,
......@@ -450,24 +451,24 @@ int crange::find_and_lock(u64 k, u64 sz, range **p0, range **f0, range **l0, ran
retry:
*p0 = nullptr;
*s0 = nullptr;
for (int l = this->nlevel-1; l >= 0; l--) {
for (int l = nlevel-1; l >= 0; l--) {
*f0 = nullptr;
*l0 = nullptr;
p1 = *p0; // remember last previous (p0) as the previous one level up (p1)
*p0 = (l == this->nlevel-1) ? this->crange_head : p1; // set current previous
*p0 = (l == nlevel-1) ? crange_head : p1; // set current previous
s1 = *s0;
for (e = (*p0)->next[l].ptr(); e; *p0 = e, e = e->next[l].ptr()) {
assert(l < e->nlevel);
int r = this->del_index(*p0, &e, l);
int r = del_index(*p0, &e, l);
if (r == -1) goto retry; // deletion failed because some other core did it; try again
if (r == 0) continue; // range was marked but we are level 0, skip it; lock holder will remove
if (e == 0) break; // all ranges on this level were removed
if (k >= e->key+e->size) { // is e before k?
this->add_index(l, e, p1, s1); // maybe add to index
add_index(l, e, p1, s1); // maybe add to index
continue;
}
if (range_intersect(k, sz, e->key, e->size)) { // first range of sequence?
if (!this->lock_range(k, sz, l, &e, p0, f0, l0, s0)) {
if (!lock_range(k, sz, l, &e, p0, f0, l0, s0)) {
// INCRETRY;
goto retry;
}
......@@ -498,13 +499,13 @@ int crange::find_and_lock(u64 k, u64 sz, range **p0, range **f0, range **l0, ran
range* crange::search(u64 k, u64 sz, int mod)
{
struct range *p, *e, *r;
int n = (mod) ? range_draw_nlevel(this->nlevel) : 0;
int n = (mod) ? range_draw_nlevel(nlevel) : 0;
gc_begin_epoch();
//read_counters(myproc()->cpuid, 0);
dprintf("crange_search: 0x%lx 0x%lx\n", (u64) this, k);
r = nullptr;
p = this->crange_head;
for (int l = this->nlevel-1; l >= 0; l--) {
p = crange_head;
for (int l = nlevel-1; l >= 0; l--) {
for (e = p->next[l].ptr(); e; p = e, e = e->next[l].ptr()) {
dprintf("level %d: 0x%lx 0x%lx-%lx(%lu) 0x%lx-0x%lx(%lu)\n", l, (u64) p, p->key, p->key+p->size, p->size, e->key, e->key+e->size, e->size);
// skip all marked ranges, but don't update p because
......@@ -545,7 +546,7 @@ void crange::del(u64 k, u64 sz)
assert(this);
gc_begin_epoch();
dprintf("crange_del: 0x%lx 0x%lx-0x%lx(%ld)\n", (u64) this, k, k+sz, sz);
if (!this->find_and_lock(k, sz, &prev, &first, &last, &succ)) { // done?
if (!find_and_lock(k, sz, &prev, &first, &last, &succ)) { // done?
dprintf("crange_del: [0x%lx,0x%lx) not present\n", k, sz);
release(prev->lock);
goto done;
......@@ -564,8 +565,9 @@ void crange::del(u64 k, u64 sz)
cprintf("crange_del(%lu, %lu): prev was updated; try again\n", k, sz);
assert(0);
}
done:
this->check(nullptr);
check(nullptr);
// cprintf("%d: crange_del(0x%lx, 0x%lx):\n", mycpu()->id, k, sz); crange_print(cr, 1);
gc_end_epoch();
}
......@@ -585,7 +587,7 @@ void crange::add(u64 k, u64 sz, void *v)
dprintf("crange_add: 0x%lx 0x%lx-0x%lx(%lu)\n", (u64) this, k, k+sz, sz);
assert(this);
gc_begin_epoch();
if (this->find_and_lock(k, sz, &prev, &first, &last, &succ)) {
if (find_and_lock(k, sz, &prev, &first, &last, &succ)) {
dprintf("crange_add(0x%lx,0x%lx) overlaps with [0x%lx,0x%lx)\n", k, sz, first->key, first->size);
repl = replace(k, sz, v, first, last, succ);
} else {
......@@ -604,6 +606,6 @@ void crange::add(u64 k, u64 sz, void *v)
assert(0);
}
// cprintf("crange_add(0x%lx,0x%lx):\n", k, sz); crange_print(cr, 1);
this->check(nullptr);
check(nullptr);
gc_end_epoch();
}
......@@ -49,11 +49,11 @@ class markptr {
template<class T>
class markptr_ptr : private markptr<T> {
public:
void operator=(T *ptr) {
void operator=(T *p) {
uptr p0, p1;
do {
p0 = markptr<T>::_p.load();
p1 = (p0 & 1) | (uptr) ptr;
p1 = (p0 & 1) | (uptr) p;
} while (!markptr<T>::_p.compare_exchange_weak(p0, p1));
}
......@@ -67,11 +67,11 @@ class markptr_ptr : private markptr<T> {
template<class T>
class markptr_mark : public markptr<T> {
public:
void operator=(bool mark) {
void operator=(bool m) {
uptr p0, p1;
do {
p0 = markptr<T>::_p.load();
p1 = (p0 & ~1) | !!mark;
p1 = (p0 & ~1) | !!m;
} while (!markptr<T>::_p.compare_exchange_weak(p0, p1));
}
......@@ -118,13 +118,14 @@ class range_iterator {
struct crange {
private:
range *crange_head; // a crange skip list starts with a sentinel range (key 0, sz 0)
public:
int nlevel; // number of levels in the crange skip list
crange(int nlevel);
~crange(void);
void del(u64 k, u64 sz);
void add(u64 k, u64 sz, void *v);
range* search(u64 k, u64 sz, int mod);
range* search(u64 k, u64 sz, int mod = 0);
void print(int);
void check(struct range *absent);
int del_index(range *p0, range **e, int l);
......
......@@ -273,18 +273,18 @@ iget(u32 dev, u32 inum)
u32 cur_free = icache_free[mycpu()->id].x;
if (cur_free == 0) {
struct inode *victim = 0;
ins->enumerate([&victim](const pair<u32, u32>&, inode* ip)->bool{
if (ip->ref || ip->type == T_DIR)
ins->enumerate([&victim](const pair<u32, u32>&, inode* eip)->bool{
if (eip->ref || eip->type == T_DIR)
return false;
acquire(&ip->lock);
if (ip->ref == 0 && ip->type != T_DIR &&
!(ip->flags & (I_FREE | I_BUSYR | I_BUSYW))) {
victim = ip;
acquire(&eip->lock);
if (eip->ref == 0 && eip->type != T_DIR &&
!(eip->flags & (I_FREE | I_BUSYR | I_BUSYW))) {
victim = eip;
return true;
}
release(&ip->lock);
release(&eip->lock);
return false;
});
if (!victim)
......
......@@ -39,10 +39,10 @@ void
inithz(void)
{
// Setup PIT for terminal count starting from 2^16 - 1
u64 ticks = 0x000000000000FFFFull;
u64 xticks = 0x000000000000FFFFull;
outb(TIMER_MODE, TIMER_SEL0 | TIMER_TCOUNT | TIMER_16BIT);
outb(IO_TIMER1, ticks % 256);
outb(IO_TIMER1, ticks / 256);
outb(IO_TIMER1, xticks % 256);
outb(IO_TIMER1, xticks / 256);
// Wait until OUT bit of status byte is set
u64 s = rdtsc();
......@@ -51,5 +51,5 @@ inithz(void)
} while (!(inb(TIMER_CNTR) & 0x80));
u64 e = rdtsc();
cpuhz = ((e-s)*10000000) / ((ticks*10000000)/TIMER_FREQ);
cpuhz = ((e-s)*10000000) / ((xticks*10000000)/TIMER_FREQ);
}
......@@ -120,7 +120,7 @@ start_timer(struct timer_thread *t, void (*func)(void),
}
static void
lwip_init(struct netif *nif, void *if_state,
lwip_init(struct netif *xnif, void *if_state,
u32 init_addr, u32 init_mask, u32 init_gw)
{
struct ip_addr ipaddr, netmask, gateway;
......@@ -128,14 +128,14 @@ lwip_init(struct netif *nif, void *if_state,
netmask.addr = init_mask;
gateway.addr = init_gw;
if (0 == netif_add(nif, &ipaddr, &netmask, &gateway,
if (0 == netif_add(xnif, &ipaddr, &netmask, &gateway,
if_state,
if_init,
ip_input))
panic("lwip_init: error in netif_add\n");
netif_set_default(nif);
netif_set_up(nif);
netif_set_default(xnif);
netif_set_up(xnif);
}
static void
......
......@@ -338,7 +338,7 @@ vmap_lookup(struct vmap *m, uptr start, uptr len)
if(start + len < start)
panic("vmap_lookup bad len");
range *r = m->cr->search(start, len, 0);
range *r = m->cr->search(start, len);
if (r != 0) {
struct vma *e = (struct vma *) (r->value);
if (e->va_end <= e->va_start)
......@@ -429,7 +429,7 @@ vmap_remove(struct vmap *m, uptr va_start, u64 len)
{
acquire(&m->lock);
uptr va_end = va_start + len;
struct range *r = m->cr->search(va_start, len, 0);
struct range *r = m->cr->search(va_start, len);
if (r == 0)
panic("no vma?");
struct vma *e = (struct vma *) r->value;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论