void enic_free_wq(void *txq) { struct vnic_wq *wq = (struct vnic_wq *)txq; struct enic *enic = vnic_dev_priv(wq->vdev); vnic_wq_free(wq); vnic_cq_free(&enic->cq[enic->rq_count + wq->index]); }
void enic_free_rq(void *rxq) { struct vnic_rq *rq = (struct vnic_rq *)rxq; struct enic *enic = vnic_dev_priv(rq->vdev); vnic_rq_free(rq); vnic_cq_free(&enic->cq[rq->index]); }
int enic_alloc_rq(struct enic *enic, uint16_t queue_idx, unsigned int socket_id, struct rte_mempool *mp, uint16_t nb_desc) { int rc; struct vnic_rq *rq = &enic->rq[queue_idx]; rq->socket_id = socket_id; rq->mp = mp; if (nb_desc) { if (nb_desc > enic->config.rq_desc_count) { dev_warning(enic, "RQ %d - number of rx desc in cmd line (%d)"\ "is greater than that in the UCSM/CIMC adapter"\ "policy. Applying the value in the adapter "\ "policy (%d).\n", queue_idx, nb_desc, enic->config.rq_desc_count); nb_desc = enic->config.rq_desc_count; } dev_info(enic, "RX Queues - effective number of descs:%d\n", nb_desc); } /* Allocate queue resources */ rc = vnic_rq_alloc(enic->vdev, rq, queue_idx, nb_desc, sizeof(struct rq_enet_desc)); if (rc) { dev_err(enic, "error in allocation of rq\n"); goto err_exit; } rc = vnic_cq_alloc(enic->vdev, &enic->cq[queue_idx], queue_idx, socket_id, nb_desc, sizeof(struct cq_enet_rq_desc)); if (rc) { dev_err(enic, "error in allocation of cq for rq\n"); goto err_free_rq_exit; } /* Allocate the mbuf ring */ rq->mbuf_ring = (struct rte_mbuf **)rte_zmalloc_socket("rq->mbuf_ring", sizeof(struct rte_mbuf *) * nb_desc, RTE_CACHE_LINE_SIZE, rq->socket_id); if (rq->mbuf_ring != NULL) return 0; /* cleanup on error */ vnic_cq_free(&enic->cq[queue_idx]); err_free_rq_exit: vnic_rq_free(rq); err_exit: return -ENOMEM; }
void enic_free_rq(void *rxq) { struct vnic_rq *rq = (struct vnic_rq *)rxq; struct enic *enic = vnic_dev_priv(rq->vdev); enic_rxmbuf_queue_release(enic, rq); rte_free(rq->mbuf_ring); rq->mbuf_ring = NULL; vnic_rq_free(rq); vnic_cq_free(&enic->cq[rq->index]); }
void enic_free_vnic_resources(struct enic *enic) { unsigned int i; for (i = 0; i < enic->wq_count; i++) vnic_wq_free(&enic->wq[i]); for (i = 0; i < enic->rq_count; i++) vnic_rq_free(&enic->rq[i]); for (i = 0; i < enic->cq_count; i++) vnic_cq_free(&enic->cq[i]); vnic_intr_free(&enic->intr); }
void fnic_free_vnic_resources(struct fnic *fnic) { unsigned int i; for (i = 0; i < fnic->raw_wq_count; i++) vnic_wq_free(&fnic->wq[i]); for (i = 0; i < fnic->wq_copy_count; i++) vnic_wq_copy_free(&fnic->wq_copy[i]); for (i = 0; i < fnic->rq_count; i++) vnic_rq_free(&fnic->rq[i]); for (i = 0; i < fnic->cq_count; i++) vnic_cq_free(&fnic->cq[i]); for (i = 0; i < fnic->intr_count; i++) vnic_intr_free(&fnic->intr[i]); }