drivers: remove direct access to interrupt handle
[dpdk.git] / drivers / net / ionic / ionic_main.c
index 12f2b26..7301f53 100644 (file)
@@ -146,7 +146,7 @@ ionic_adminq_check_err(struct ionic_admin_ctx *ctx, bool timeout)
 }
 
 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;
@@ -174,7 +174,7 @@ ionic_adminq_service(struct ionic_cq *cq, uint32_t cq_desc_index,
                }
 
                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;
@@ -194,9 +194,10 @@ ionic_adminq_service(struct ionic_cq *cq, uint32_t cq_desc_index,
 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);
@@ -210,7 +211,14 @@ ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx)
 
        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);
@@ -234,7 +242,7 @@ ionic_adminq_wait_for_completion(struct ionic_lif *lif,
                 */
                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);
@@ -448,7 +456,8 @@ ionic_port_init(struct ionic_adapter *adapter)
        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);