void fcfs_add_rc(void *sched, model_net_sched_rc *rc, tw_lp *lp){ mn_sched_queue *s = sched; s->queue_len--; struct qlist_head *ent = qlist_pop_back(&s->reqs); assert(ent != NULL); mn_sched_qitem *q = qlist_entry(ent, mn_sched_qitem, ql); dprintf("%lu (mn): rc adding request from %lu to %lu\n", lp->gid, q->req.src_lp, q->req.final_dest_lp); // free'ing NULLs is a no-op free(q->remote_event); free(q->local_event); free(q); }
void rr_next_rc ( void * sched, void * rc_event_save, model_net_sched_rc * rc, tw_lp * lp){ // only time we need to do something apart from fcfs is on a successful // rr_next that didn't remove the item from the queue if (rc->rtn == 0){ mn_sched_queue *s = sched; qlist_add(qlist_pop_back(&s->reqs), &s->reqs); } fcfs_next_rc(sched, rc_event_save, rc, lp); }
static void handle_rev_io_sched_new( lsm_state_t *ns, tw_bf *b, lsm_message_t *m_in, tw_lp *lp) { if (LSM_DEBUG) printf("handle_rev_io_sched_new called\n"); ns->sched.active_count--; if (!ns->sched.active_count) handle_rev_io_request(ns, b, &m_in->data, m_in, lp); else { struct qlist_head *ent = qlist_pop_back(&ns->sched.queues[m_in->prio]); assert(ent); lsm_sched_op_t *op = qlist_entry(ent, lsm_sched_op_t, ql); free(op); } }