eq->irq_nb.notifier_call = mlx5_ib_eq_pf_int;
        param = (struct mlx5_eq_param) {
+               .irq_index = MLX5_IRQ_EQ_CTRL,
                .nent = MLX5_IB_NUM_PF_EQE,
        };
        param.mask[0] = 1ull << MLX5_EVENT_TYPE_PAGE_FAULT;
 
        mlx5_eq_notifier_register(dev, &table->cq_err_nb);
 
        param = (struct mlx5_eq_param) {
+               .irq_index = MLX5_IRQ_EQ_CTRL,
                .nent = MLX5_NUM_CMD_EQE,
                .mask[0] = 1ull << MLX5_EVENT_TYPE_CMD,
        };
        mlx5_cmd_allowed_opcode(dev, CMD_ALLOWED_OPCODE_ALL);
 
        param = (struct mlx5_eq_param) {
+               .irq_index = MLX5_IRQ_EQ_CTRL,
                .nent = MLX5_NUM_ASYNC_EQE,
        };
 
                goto err2;
 
        param = (struct mlx5_eq_param) {
+               .irq_index = MLX5_IRQ_EQ_CTRL,
                .nent = /* TODO: sriov max_vf + */ 1,
                .mask[0] = 1ull << MLX5_EVENT_TYPE_PAGE_REQUEST,
        };
        ncomp_eqs = table->num_comp_eqs;
        nent = MLX5_COMP_EQ_SIZE;
        for (i = 0; i < ncomp_eqs; i++) {
-               int vecidx = i + MLX5_IRQ_VEC_COMP_BASE;
                struct mlx5_eq_param param = {};
+               int vecidx = i;
 
                eq = kzalloc(sizeof(*eq), GFP_KERNEL);
                if (!eq) {
                goto err_out;
        }
 
-       vecidx = MLX5_IRQ_VEC_COMP_BASE;
-       for (; vecidx < eq_table->num_comp_eqs + MLX5_IRQ_VEC_COMP_BASE;
-            vecidx++) {
+       for (vecidx = 0; vecidx < eq_table->num_comp_eqs; vecidx++) {
                err = irq_cpu_rmap_add(eq_table->rmap,
                                       pci_irq_vector(mdev->pdev, vecidx));
                if (err) {
 
 
 #define MLX5_COMP_EQS_PER_SF 8
 
-#define MLX5_IRQ_EQ_CTRL (0)
-
 struct mlx5_irq;
 
 int mlx5_irq_table_init(struct mlx5_core_dev *dev);
 
        snprintf(name, MLX5_MAX_IRQ_NAME, "%s%d", pool->name, vecidx);
 }
 
-static void irq_set_name(char *name, int vecidx)
+static void irq_set_name(struct mlx5_irq_pool *pool, char *name, int vecidx)
 {
-       if (vecidx == 0) {
+       if (vecidx == pool->xa_num_irqs.max) {
                snprintf(name, MLX5_MAX_IRQ_NAME, "mlx5_async%d", vecidx);
                return;
        }
 
-       snprintf(name, MLX5_MAX_IRQ_NAME, "mlx5_comp%d",
-                vecidx - MLX5_IRQ_VEC_COMP_BASE);
+       snprintf(name, MLX5_MAX_IRQ_NAME, "mlx5_comp%d", vecidx);
 }
 
 static struct mlx5_irq *irq_request(struct mlx5_irq_pool *pool, int i)
                return ERR_PTR(-ENOMEM);
        irq->irqn = pci_irq_vector(dev->pdev, i);
        if (!pool->name[0])
-               irq_set_name(name, i);
+               irq_set_name(pool, name, i);
        else
                irq_sf_set_name(pool, name, i);
        ATOMIC_INIT_NOTIFIER_HEAD(&irq->nh);
        }
 pf_irq:
        pool = irq_table->pf_pool;
+       vecidx = (vecidx == MLX5_IRQ_EQ_CTRL) ? pool->xa_num_irqs.max : vecidx;
        irq = irq_pool_request_vector(pool, vecidx, affinity);
 out:
        if (IS_ERR(irq))
 
 
 #define MLX5_ADEV_NAME "mlx5_core"
 
+#define MLX5_IRQ_EQ_CTRL (U8_MAX)
+
 enum {
        MLX5_BOARD_ID_LEN = 64,
 };