]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
net/mlx5: Remove spinlock support from mlx5_write64
authorMaxim Mikityanskiy <maximmi@mellanox.com>
Fri, 29 Mar 2019 22:37:52 +0000 (15:37 -0700)
committerSaeed Mahameed <saeedm@mellanox.com>
Tue, 2 Apr 2019 19:49:37 +0000 (12:49 -0700)
As there is no user of mlx5_write64 that passes a spinlock to
mlx5_write64, remove this functionality and simplify the function.

Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
Reviewed-by: Eran Ben Elisha <eranbe@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
drivers/infiniband/hw/mlx5/qp.c
drivers/net/ethernet/mellanox/mlx5/core/en.h
drivers/net/ethernet/mellanox/mlx5/core/fpga/conn.c
include/linux/mlx5/cq.h
include/linux/mlx5/doorbell.h

index dd2ae640bc848add5f316d2285b497347e6d69ea..816c34ee91cfb782f1017e83c55ca15459942ba9 100644 (file)
@@ -5015,7 +5015,7 @@ static int _mlx5_ib_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr,
                wmb();
 
                /* currently we support only regular doorbells */
-               mlx5_write64((__be32 *)ctrl, bf->bfreg->map + bf->offset, NULL);
+               mlx5_write64((__be32 *)ctrl, bf->bfreg->map + bf->offset);
                /* Make sure doorbells don't leak out of SQ spinlock
                 * and reach the HCA out of order.
                 */
index 8fa8fdd30b8509f73a27fe4d31b094dfceda5e5d..2623d3fb6b963d65c215be20c4081e6dc3ef8a17 100644 (file)
@@ -916,7 +916,7 @@ void mlx5e_notify_hw(struct mlx5_wq_cyc *wq, u16 pc,
         */
        wmb();
 
-       mlx5_write64((__be32 *)ctrl, uar_map, NULL);
+       mlx5_write64((__be32 *)ctrl, uar_map);
 }
 
 static inline void mlx5e_cq_arm(struct mlx5e_cq *cq)
index 873541ef4c1b754b15209f7516bcee07378f6763..ca2296a2f9ee321cd388088369454f3f50e9301d 100644 (file)
@@ -135,7 +135,7 @@ static void mlx5_fpga_conn_notify_hw(struct mlx5_fpga_conn *conn, void *wqe)
        *conn->qp.wq.sq.db = cpu_to_be32(conn->qp.sq.pc);
        /* Make sure that doorbell record is visible before ringing */
        wmb();
-       mlx5_write64(wqe, conn->fdev->conn_res.uar->map + MLX5_BF_OFFSET, NULL);
+       mlx5_write64(wqe, conn->fdev->conn_res.uar->map + MLX5_BF_OFFSET);
 }
 
 static void mlx5_fpga_conn_post_send(struct mlx5_fpga_conn *conn,
index 612c8c2f2466ab98dd634845180028f207f2fd0f..769326ea1d9b5a32d35bfa64126d18fdbef8a6d6 100644 (file)
@@ -170,7 +170,7 @@ static inline void mlx5_cq_arm(struct mlx5_core_cq *cq, u32 cmd,
        doorbell[0] = cpu_to_be32(sn << 28 | cmd | ci);
        doorbell[1] = cpu_to_be32(cq->cqn);
 
-       mlx5_write64(doorbell, uar_page + MLX5_CQ_DOORBELL, NULL);
+       mlx5_write64(doorbell, uar_page + MLX5_CQ_DOORBELL);
 }
 
 static inline void mlx5_cq_hold(struct mlx5_core_cq *cq)
index 9ef3f9d00154d0855b607f007e529931e8e7a6f2..5c267707e1df7c3efea359743028013ca13c1ac5 100644 (file)
 #define MLX5_BF_OFFSET       0x800
 #define MLX5_CQ_DOORBELL      0x20
 
-#if BITS_PER_LONG == 64
 /* Assume that we can just write a 64-bit doorbell atomically.  s390
  * actually doesn't have writeq() but S/390 systems don't even have
  * PCI so we won't worry about it.
+ *
+ * Note that the write is not atomic on 32-bit systems! In contrast to 64-bit
+ * ones, it requires proper locking. mlx5_write64 doesn't do any locking, so use
+ * it at your own discretion, protected by some kind of lock on 32 bits.
+ *
+ * TODO: use write{q,l}_relaxed()
  */
 
-static inline void mlx5_write64(__be32 val[2], void __iomem *dest,
-                               spinlock_t *doorbell_lock)
+static inline void mlx5_write64(__be32 val[2], void __iomem *dest)
 {
+#if BITS_PER_LONG == 64
        __raw_writeq(*(u64 *)val, dest);
-}
-
 #else
-
-/* Just fall back to a spinlock to protect the doorbell if
- * BITS_PER_LONG is 32 -- there's no portable way to do atomic 64-bit
- * MMIO writes.
- */
-
-static inline void mlx5_write64(__be32 val[2], void __iomem *dest,
-                               spinlock_t *doorbell_lock)
-{
-       unsigned long flags;
-
-       if (doorbell_lock)
-               spin_lock_irqsave(doorbell_lock, flags);
        __raw_writel((__force u32) val[0], dest);
        __raw_writel((__force u32) val[1], dest + 4);
-       if (doorbell_lock)
-               spin_unlock_irqrestore(doorbell_lock, flags);
-}
-
 #endif
+}
 
 #endif /* MLX5_DOORBELL_H */