/** * Allocate IOIM resource for initiator mode I/O request. */ struct bfa_ioim_s * bfa_ioim_alloc(struct bfa_s *bfa, struct bfad_ioim_s *dio, struct bfa_itnim_s *itnim, u16 nsges) { struct bfa_fcpim_mod_s *fcpim = BFA_FCPIM_MOD(bfa); struct bfa_ioim_s *ioim; /** * alocate IOIM resource */ bfa_q_deq(&fcpim->ioim_free_q, &ioim); if (!ioim) { bfa_fcpim_stats(fcpim, no_iotags); return NULL; } ioim->dio = dio; ioim->itnim = itnim; ioim->nsges = nsges; ioim->nsgpgs = 0; bfa_stats(fcpim, total_ios); bfa_stats(itnim, ios); fcpim->ios_active++; list_add_tail(&ioim->qe, &itnim->io_q); bfa_trc_fp(ioim->bfa, ioim->iotag); return ioim; }
void bfa_timer_beat(struct bfa_timer_mod_s *mod) { struct list_head *qh = &mod->timer_q; struct list_head *qe, *qe_next; struct bfa_timer_s *elem; struct list_head timedout_q; INIT_LIST_HEAD(&timedout_q); qe = bfa_q_next(qh); while (qe != qh) { qe_next = bfa_q_next(qe); elem = (struct bfa_timer_s *) qe; if (elem->timeout <= BFA_TIMER_FREQ) { elem->timeout = 0; list_del(&elem->qe); list_add_tail(&elem->qe, &timedout_q); } else { elem->timeout -= BFA_TIMER_FREQ; } qe = qe_next; /* go to next elem */ } /* * Pop all the timeout entries */ while (!list_empty(&timedout_q)) { bfa_q_deq(&timedout_q, &elem); elem->timercb(elem->arg); } }
static void cmdq_sm_stopped_entry(struct bfa_msgq_cmdq *cmdq) { struct bfa_msgq_cmd_entry *cmdq_ent; cmdq->producer_index = 0; cmdq->consumer_index = 0; cmdq->flags = 0; cmdq->token = 0; cmdq->offset = 0; cmdq->bytes_to_copy = 0; while (!list_empty(&cmdq->pending_q)) { bfa_q_deq(&cmdq->pending_q, &cmdq_ent); bfa_q_qe_init(&cmdq_ent->qe); call_cmdq_ent_cbfn(cmdq_ent, BFA_STATUS_FAILED); } }
bfa_status_t bfa_sgpg_malloc(struct bfa_s *bfa, struct list_head *sgpg_q, int nsgpgs) { struct bfa_sgpg_mod_s *mod = BFA_SGPG_MOD(bfa); struct bfa_sgpg_s *hsgpg; int i; bfa_trc_fp(bfa, nsgpgs); if (mod->free_sgpgs < nsgpgs) return BFA_STATUS_ENOMEM; for (i = 0; i < nsgpgs; i++) { bfa_q_deq(&mod->sgpg_q, &hsgpg); bfa_assert(hsgpg); list_add_tail(&hsgpg->qe, sgpg_q); } mod->free_sgpgs -= nsgpgs; return BFA_STATUS_OK; }