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; }
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; }