IB/mlx4: Add debug prints
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Tue, 19 Jun 2012 08:21:35 +0000 (11:21 +0300)
committerRoland Dreier <roland@purestorage.com>
Mon, 9 Jul 2012 01:05:06 +0000 (18:05 -0700)
Define pr_fmt and add some pr_debug prints.

Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/mlx4/mad.c
drivers/infiniband/hw/mlx4/main.c
drivers/infiniband/hw/mlx4/mlx4_ib.h
drivers/infiniband/hw/mlx4/qp.c

index 259b067..84786a9 100644 (file)
@@ -242,6 +242,25 @@ static int ib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
        int err;
        struct ib_port_attr pattr;
 
+       if (in_wc && in_wc->qp->qp_num) {
+               pr_debug("received MAD: slid:%d sqpn:%d "
+                       "dlid_bits:%d dqpn:%d wc_flags:0x%x, cls %x, mtd %x, atr %x\n",
+                       in_wc->slid, in_wc->src_qp,
+                       in_wc->dlid_path_bits,
+                       in_wc->qp->qp_num,
+                       in_wc->wc_flags,
+                       in_mad->mad_hdr.mgmt_class, in_mad->mad_hdr.method,
+                       be16_to_cpu(in_mad->mad_hdr.attr_id));
+               if (in_wc->wc_flags & IB_WC_GRH) {
+                       pr_debug("sgid_hi:0x%016llx sgid_lo:0x%016llx\n",
+                                be64_to_cpu(in_grh->sgid.global.subnet_prefix),
+                                be64_to_cpu(in_grh->sgid.global.interface_id));
+                       pr_debug("dgid_hi:0x%016llx dgid_lo:0x%016llx\n",
+                                be64_to_cpu(in_grh->dgid.global.subnet_prefix),
+                                be64_to_cpu(in_grh->dgid.global.interface_id));
+               }
+       }
+
        slid = in_wc ? in_wc->slid : be16_to_cpu(IB_LID_PERMISSIVE);
 
        if (in_mad->mad_hdr.method == IB_MGMT_METHOD_TRAP && slid == 0) {
index 3530c41..5266b49 100644 (file)
@@ -50,7 +50,7 @@
 #include "mlx4_ib.h"
 #include "user.h"
 
-#define DRV_NAME       "mlx4_ib"
+#define DRV_NAME       MLX4_IB_DRV_NAME
 #define DRV_VERSION    "1.0"
 #define DRV_RELDATE    "April 4, 2008"
 
index ff36655..5f298af 100644 (file)
 #include <linux/mlx4/device.h>
 #include <linux/mlx4/doorbell.h>
 
+#define MLX4_IB_DRV_NAME       "mlx4_ib"
+
+#ifdef pr_fmt
+#undef pr_fmt
+#endif
+#define pr_fmt(fmt)    "<" MLX4_IB_DRV_NAME "> %s: " fmt, __func__
+
+#define mlx4_ib_warn(ibdev, format, arg...) \
+       dev_warn((ibdev)->dma_device, MLX4_IB_DRV_NAME ": " format, ## arg)
+
 enum {
        MLX4_IB_SQ_MIN_WQE_SHIFT = 6,
        MLX4_IB_MAX_HEADROOM     = 2048
index 8d4ed24..84b2696 100644 (file)
@@ -1335,11 +1335,21 @@ int mlx4_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
        cur_state = attr_mask & IB_QP_CUR_STATE ? attr->cur_qp_state : qp->state;
        new_state = attr_mask & IB_QP_STATE ? attr->qp_state : cur_state;
 
-       if (!ib_modify_qp_is_ok(cur_state, new_state, ibqp->qp_type, attr_mask))
+       if (!ib_modify_qp_is_ok(cur_state, new_state, ibqp->qp_type, attr_mask)) {
+               pr_debug("qpn 0x%x: invalid attribute mask specified "
+                        "for transition %d to %d. qp_type %d,"
+                        " attr_mask 0x%x\n",
+                        ibqp->qp_num, cur_state, new_state,
+                        ibqp->qp_type, attr_mask);
                goto out;
+       }
 
        if ((attr_mask & IB_QP_PORT) &&
            (attr->port_num == 0 || attr->port_num > dev->dev->caps.num_ports)) {
+               pr_debug("qpn 0x%x: invalid port number (%d) specified "
+                        "for transition %d to %d. qp_type %d\n",
+                        ibqp->qp_num, attr->port_num, cur_state,
+                        new_state, ibqp->qp_type);
                goto out;
        }
 
@@ -1350,17 +1360,30 @@ int mlx4_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
 
        if (attr_mask & IB_QP_PKEY_INDEX) {
                int p = attr_mask & IB_QP_PORT ? attr->port_num : qp->port;
-               if (attr->pkey_index >= dev->dev->caps.pkey_table_len[p])
+               if (attr->pkey_index >= dev->dev->caps.pkey_table_len[p]) {
+                       pr_debug("qpn 0x%x: invalid pkey index (%d) specified "
+                                "for transition %d to %d. qp_type %d\n",
+                                ibqp->qp_num, attr->pkey_index, cur_state,
+                                new_state, ibqp->qp_type);
                        goto out;
+               }
        }
 
        if (attr_mask & IB_QP_MAX_QP_RD_ATOMIC &&
            attr->max_rd_atomic > dev->dev->caps.max_qp_init_rdma) {
+               pr_debug("qpn 0x%x: max_rd_atomic (%d) too large. "
+                        "Transition %d to %d. qp_type %d\n",
+                        ibqp->qp_num, attr->max_rd_atomic, cur_state,
+                        new_state, ibqp->qp_type);
                goto out;
        }
 
        if (attr_mask & IB_QP_MAX_DEST_RD_ATOMIC &&
            attr->max_dest_rd_atomic > dev->dev->caps.max_qp_dest_rdma) {
+               pr_debug("qpn 0x%x: max_dest_rd_atomic (%d) too large. "
+                        "Transition %d to %d. qp_type %d\n",
+                        ibqp->qp_num, attr->max_dest_rd_atomic, cur_state,
+                        new_state, ibqp->qp_type);
                goto out;
        }