libertas: fix 8686 firmware loading regression
[safe/jmp/linux-2.6] / drivers / net / mlx4 / en_cq.c
index 1a936f4..21786ad 100644 (file)
@@ -51,10 +51,13 @@ int mlx4_en_create_cq(struct mlx4_en_priv *priv,
        int err;
 
        cq->size = entries;
-       if (mode == RX)
+       if (mode == RX) {
                cq->buf_size = cq->size * sizeof(struct mlx4_cqe);
-       else
+               cq->vector   = ring % mdev->dev->caps.num_comp_vectors;
+       } else {
                cq->buf_size = sizeof(struct mlx4_cqe);
+               cq->vector   = 0;
+       }
 
        cq->ring = ring;
        cq->is_tx = mode;
@@ -86,8 +89,11 @@ int mlx4_en_activate_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq)
        *cq->mcq.arm_db    = 0;
        memset(cq->buf, 0, cq->buf_size);
 
+       if (!cq->is_tx)
+               cq->size = priv->rx_ring[cq->ring].actual_size;
+
        err = mlx4_cq_alloc(mdev->dev, cq->size, &cq->wqres.mtt, &mdev->priv_uar,
-                           cq->wqres.db.dma, &cq->mcq, cq->is_tx);
+                           cq->wqres.db.dma, &cq->mcq, cq->vector, cq->is_tx);
        if (err)
                return err;
 
@@ -122,8 +128,10 @@ void mlx4_en_deactivate_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq)
 
        if (cq->is_tx)
                del_timer(&cq->timer);
-       else
+       else {
                napi_disable(&cq->napi);
+               netif_napi_del(&cq->napi);
+       }
 
        mlx4_cq_free(mdev->dev, &cq->mcq);
 }
@@ -137,7 +145,6 @@ int mlx4_en_set_cq_moder(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq)
 
 int mlx4_en_arm_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq)
 {
-       cq->armed = 1;
        mlx4_cq_arm(&cq->mcq, MLX4_CQ_DB_REQ_NOT, priv->mdev->uar_map,
                    &priv->mdev->uar_lock);