Esempio n. 1
0
bool
Sched_context::deblock(unsigned cpu, Sched_context *crs, bool lazy_q = false)
{
  assert_kdb(cpu_lock.test());

  Sched_context *cs = rq(cpu).current_sched();
  bool res = true;
  if (this == cs)
    {
      if (crs->dominates(this))
	res = false;
    }
  else
    {
      deblock_refill(cpu);

      if ((EXPECT_TRUE(cs != 0) && cs->dominates(this)) || crs->dominates(this))
	res = false;
    }

  if (res && lazy_q)
    return true;

  ready_enqueue(cpu);
  return res;
}
Esempio n. 2
0
bool
Sched_context::Ready_queue::deblock(Sched_context *sc, Sched_context *crs, bool lazy_q)
{
  assert(cpu_lock.test());

  Sched_context *cs = current_sched();
  bool res = true;
  if (sc == cs)
    {
      if (crs && crs->dominates(sc))
        res = false;
    }
  else
    {
      deblock_refill(sc);

      if ((EXPECT_TRUE(cs != 0) && cs->dominates(sc))
          || (crs && crs->dominates(sc)))
        res = false;
    }

  if (res && lazy_q)
    return true;

  ready_enqueue(sc);
  return res;
}