These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / net / ethernet / mellanox / mlx5 / core / eq.c
index 58800e4..713ead5 100644 (file)
@@ -339,15 +339,15 @@ static void init_eq_buf(struct mlx5_eq *eq)
 int mlx5_create_map_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq, u8 vecidx,
                       int nent, u64 mask, const char *name, struct mlx5_uar *uar)
 {
-       struct mlx5_eq_table *table = &dev->priv.eq_table;
+       struct mlx5_priv *priv = &dev->priv;
        struct mlx5_create_eq_mbox_in *in;
        struct mlx5_create_eq_mbox_out out;
        int err;
        int inlen;
 
        eq->nent = roundup_pow_of_two(nent + MLX5_NUM_SPARE_EQE);
-       err = mlx5_buf_alloc(dev, eq->nent * MLX5_EQE_SIZE, 2 * PAGE_SIZE,
-                            &eq->buf);
+       eq->cons_index = 0;
+       err = mlx5_buf_alloc(dev, eq->nent * MLX5_EQE_SIZE, &eq->buf);
        if (err)
                return err;
 
@@ -378,14 +378,15 @@ int mlx5_create_map_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq, u8 vecidx,
                goto err_in;
        }
 
-       snprintf(eq->name, MLX5_MAX_EQ_NAME, "%s@pci:%s",
+       snprintf(priv->irq_info[vecidx].name, MLX5_MAX_IRQ_NAME, "%s@pci:%s",
                 name, pci_name(dev->pdev));
+
        eq->eqn = out.eq_number;
-       eq->irqn = vecidx;
+       eq->irqn = priv->msix_arr[vecidx].vector;
        eq->dev = dev;
        eq->doorbell = uar->map + MLX5_EQ_DOORBEL_OFFSET;
-       err = request_irq(table->msix_arr[vecidx].vector, mlx5_msix_handler, 0,
-                         eq->name, eq);
+       err = request_irq(eq->irqn, mlx5_msix_handler, 0,
+                         priv->irq_info[vecidx].name, eq);
        if (err)
                goto err_eq;
 
@@ -401,7 +402,7 @@ int mlx5_create_map_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq, u8 vecidx,
        return 0;
 
 err_irq:
-       free_irq(table->msix_arr[vecidx].vector, eq);
+       free_irq(priv->msix_arr[vecidx].vector, eq);
 
 err_eq:
        mlx5_cmd_destroy_eq(dev, eq->eqn);
@@ -417,16 +418,15 @@ EXPORT_SYMBOL_GPL(mlx5_create_map_eq);
 
 int mlx5_destroy_unmap_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq)
 {
-       struct mlx5_eq_table *table = &dev->priv.eq_table;
        int err;
 
        mlx5_debug_eq_remove(dev, eq);
-       free_irq(table->msix_arr[eq->irqn].vector, eq);
+       free_irq(eq->irqn, eq);
        err = mlx5_cmd_destroy_eq(dev, eq->eqn);
        if (err)
                mlx5_core_warn(dev, "failed to destroy a previously created eq: eqn %d\n",
                               eq->eqn);
-       synchronize_irq(table->msix_arr[eq->irqn].vector);
+       synchronize_irq(eq->irqn);
        mlx5_buf_free(dev, &eq->buf);
 
        return err;
@@ -456,7 +456,7 @@ int mlx5_start_eqs(struct mlx5_core_dev *dev)
        u32 async_event_mask = MLX5_ASYNC_EVENT_MASK;
        int err;
 
-       if (dev->caps.gen.flags & MLX5_DEV_CAP_FLAG_ON_DMND_PG)
+       if (MLX5_CAP_GEN(dev, pg))
                async_event_mask |= (1ull << MLX5_EVENT_TYPE_PAGE_FAULT);
 
        err = mlx5_create_map_eq(dev, &table->cmd_eq, MLX5_EQ_VEC_CMD,
@@ -479,7 +479,7 @@ int mlx5_start_eqs(struct mlx5_core_dev *dev)
 
        err = mlx5_create_map_eq(dev, &table->pages_eq,
                                 MLX5_EQ_VEC_PAGES,
-                                dev->caps.gen.max_vf + 1,
+                                /* TODO: sriov max_vf + */ 1,
                                 1 << MLX5_EVENT_TYPE_PAGE_REQUEST, "mlx5_pages_eq",
                                 &dev->priv.uuari.uars[0]);
        if (err) {