}
static bool
-ionic_adminq_service(struct ionic_cq *cq, uint32_t cq_desc_index,
+ionic_adminq_service(struct ionic_cq *cq, uint16_t cq_desc_index,
void *cb_arg __rte_unused)
{
struct ionic_admin_comp *cq_desc_base = cq->base;
}
curr_q_tail_idx = q->tail_idx;
- q->tail_idx = (q->tail_idx + 1) & (q->num_descs - 1);
+ q->tail_idx = Q_NEXT_TO_SRVC(q, 1);
} while (curr_q_tail_idx != stop_index);
return true;
static int
ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx)
{
- struct ionic_queue *q = &lif->adminqcq->q;
+ struct ionic_queue *q = &lif->adminqcq->qcq.q;
struct ionic_admin_cmd *q_desc_base = q->base;
struct ionic_admin_cmd *q_desc;
+ void **info;
int err = 0;
rte_spinlock_lock(&lif->adminq_lock);
memcpy(q_desc, &ctx->cmd, sizeof(ctx->cmd));
- ionic_q_post(q, true, ctx);
+ info = IONIC_INFO_PTR(q, q->head_idx);
+ info[0] = ctx;
+
+ q->head_idx = Q_NEXT_TO_POST(q, 1);
+
+ /* Ring doorbell */
+ rte_wmb();
+ ionic_q_flush(q);
err_out:
rte_spinlock_unlock(&lif->adminq_lock);
*/
rte_spinlock_lock(&lif->adminq_service_lock);
- ionic_qcq_service(lif->adminqcq, budget,
+ ionic_qcq_service(&lif->adminqcq->qcq, budget,
ionic_adminq_service, NULL);
rte_spinlock_unlock(&lif->adminq_service_lock);
if (idev->port_info)
return 0;
- idev->port_info_sz = RTE_ALIGN(sizeof(*idev->port_info), PAGE_SIZE);
+ idev->port_info_sz = RTE_ALIGN(sizeof(*idev->port_info),
+ rte_mem_page_size());
snprintf(z_name, sizeof(z_name), "%s_port_%s_info",
IONIC_DRV_NAME, adapter->name);