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

wq_pushto(), for pushing work to a particular core

上级 9999dcb5
......@@ -4,6 +4,7 @@ class work;
int wq_trywork(void);
int wq_push(work *w);
int wq_pushto(work *w, int tcpuid);
void wq_dump(void);
size_t wq_size(void);
void initwq(void);
......
......@@ -12,7 +12,7 @@
class wq {
public:
wq();
int push(work *w);
int push(work *w, int tcpuid);
int trywork();
void dump();
......@@ -57,7 +57,13 @@ wq_size(void)
int
wq_push(work *w)
{
return wq_->push(w);
return wq_->push(w, mycpuid());
}
int
wq_pushto(work *w, int tcpuid)
{
return wq_->push(w, tcpuid);
}
int
......@@ -128,24 +134,24 @@ wq::declen(int c)
}
int
wq::push(work *w)
wq::push(work *w, int tcpuid)
{
int i;
pushcli();
i = q_->head;
if ((i - q_->tail) == NSLOTS) {
stat_->full++;
popcli();
acquire(&q_[tcpuid].lock);
i = q_[tcpuid].head;
if ((i - q_[tcpuid].tail) == NSLOTS) {
stat_[tcpuid].full++;
release(&q_[tcpuid].lock);
return -1;
}
i = i & (NSLOTS-1);
q_->w[i] = w;
q_[tcpuid].w[i] = w;
barrier();
q_->head++;
inclen(mycpuid());
stat_->push++;
popcli();
q_[tcpuid].head++;
inclen(tcpuid);
stat_[tcpuid].push++;
release(&q_[tcpuid].lock);
return 0;
}
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论