IB/ehca: Move high-volume debug output to higher debug levels
authorJoachim Fenkes <fenkes@de.ibm.com>
Wed, 23 Apr 2008 18:55:45 +0000 (11:55 -0700)
committerRoland Dreier <rolandd@cisco.com>
Wed, 23 Apr 2008 18:55:45 +0000 (11:55 -0700)
Signed-off-by: Joachim Fenkes <fenkes@de.ibm.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/ehca/ehca_irq.c
drivers/infiniband/hw/ehca/ehca_main.c
drivers/infiniband/hw/ehca/ehca_mrmw.c
drivers/infiniband/hw/ehca/ehca_qp.c
drivers/infiniband/hw/ehca/ehca_reqs.c
drivers/infiniband/hw/ehca/ehca_uverbs.c
drivers/infiniband/hw/ehca/hcp_if.c

index b5ca94c6b8d91a603aebff7f907c42f3234bb31e..ca5eb0cb628cf74cb4df726667cd2f378199448c 100644 (file)
@@ -633,7 +633,7 @@ static inline int find_next_online_cpu(struct ehca_comp_pool *pool)
        unsigned long flags;
 
        WARN_ON_ONCE(!in_interrupt());
-       if (ehca_debug_level)
+       if (ehca_debug_level >= 3)
                ehca_dmp(&cpu_online_map, sizeof(cpumask_t), "");
 
        spin_lock_irqsave(&pool->last_cpu_lock, flags);
index 65b3362cdb9b5a82321ce56ebaf71d3ce6b3ca4c..4379beff987f413f71d3db832c05a3986c65b4c8 100644 (file)
@@ -85,8 +85,8 @@ module_param_named(lock_hcalls,   ehca_lock_hcalls,   bool, S_IRUGO);
 MODULE_PARM_DESC(open_aqp1,
                 "AQP1 on startup (0: no (default), 1: yes)");
 MODULE_PARM_DESC(debug_level,
-                "debug level"
-                " (0: no debug traces (default), 1: with debug traces)");
+                "Amount of debug output (0: none (default), 1: traces, "
+                "2: some dumps, 3: lots)");
 MODULE_PARM_DESC(hw_level,
                 "hardware level"
                 " (0: autosensing (default), 1: v. 0.20, 2: v. 0.21)");
@@ -275,6 +275,7 @@ static int ehca_sense_attributes(struct ehca_shca *shca)
        u64 h_ret;
        struct hipz_query_hca *rblock;
        struct hipz_query_port *port;
+       const char *loc_code;
 
        static const u32 pgsize_map[] = {
                HCA_CAP_MR_PGSIZE_4K,  0x1000,
@@ -283,6 +284,12 @@ static int ehca_sense_attributes(struct ehca_shca *shca)
                HCA_CAP_MR_PGSIZE_16M, 0x1000000,
        };
 
+       ehca_gen_dbg("Probing adapter %s...",
+                    shca->ofdev->node->full_name);
+       loc_code = of_get_property(shca->ofdev->node, "ibm,loc-code", NULL);
+       if (loc_code)
+               ehca_gen_dbg(" ... location lode=%s", loc_code);
+
        rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
        if (!rblock) {
                ehca_gen_err("Cannot allocate rblock memory.");
@@ -567,8 +574,7 @@ static int ehca_destroy_aqp1(struct ehca_sport *sport)
 
 static ssize_t ehca_show_debug_level(struct device_driver *ddp, char *buf)
 {
-       return snprintf(buf, PAGE_SIZE, "%d\n",
-                       ehca_debug_level);
+       return snprintf(buf, PAGE_SIZE, "%d\n", ehca_debug_level);
 }
 
 static ssize_t ehca_store_debug_level(struct device_driver *ddp,
index f26997fc00f88b810761aa6c742b254468694e4b..46ae4eb2c4e1e096a4bce1bbef180474d64ec335 100644 (file)
@@ -1794,8 +1794,9 @@ static int ehca_check_kpages_per_ate(struct scatterlist *page_list,
        int t;
        for (t = start_idx; t <= end_idx; t++) {
                u64 pgaddr = page_to_pfn(sg_page(&page_list[t])) << PAGE_SHIFT;
-               ehca_gen_dbg("chunk_page=%lx value=%016lx", pgaddr,
-                            *(u64 *)abs_to_virt(phys_to_abs(pgaddr)));
+               if (ehca_debug_level >= 3)
+                       ehca_gen_dbg("chunk_page=%lx value=%016lx", pgaddr,
+                                    *(u64 *)abs_to_virt(phys_to_abs(pgaddr)));
                if (pgaddr - PAGE_SIZE != *prev_pgaddr) {
                        ehca_gen_err("uncontiguous page found pgaddr=%lx "
                                     "prev_pgaddr=%lx page_list_i=%x",
@@ -1862,10 +1863,13 @@ static int ehca_set_pagebuf_user2(struct ehca_mr_pginfo *pginfo,
                                                pgaddr &
                                                ~(pginfo->hwpage_size - 1));
                                }
-                               ehca_gen_dbg("kpage=%lx chunk_page=%lx "
-                                            "value=%016lx", *kpage, pgaddr,
-                                            *(u64 *)abs_to_virt(
-                                                    phys_to_abs(pgaddr)));
+                               if (ehca_debug_level >= 3) {
+                                       u64 val = *(u64 *)abs_to_virt(
+                                               phys_to_abs(pgaddr));
+                                       ehca_gen_dbg("kpage=%lx chunk_page=%lx "
+                                                    "value=%016lx",
+                                                    *kpage, pgaddr, val);
+                               }
                                prev_pgaddr = pgaddr;
                                i++;
                                pginfo->kpage_cnt++;
index 5a653d75fd2e33e7090fdf6d0cf95c6e02f5e4dc..57bef1152cc2d3bc7459836c61a4b8a24baed2de 100644 (file)
@@ -966,7 +966,7 @@ static int prepare_sqe_rts(struct ehca_qp *my_qp, struct ehca_shca *shca,
                 qp_num, bad_send_wqe_p);
        /* convert wqe pointer to vadr */
        bad_send_wqe_v = abs_to_virt((u64)bad_send_wqe_p);
-       if (ehca_debug_level)
+       if (ehca_debug_level >= 2)
                ehca_dmp(bad_send_wqe_v, 32, "qp_num=%x bad_wqe", qp_num);
        squeue = &my_qp->ipz_squeue;
        if (ipz_queue_abs_to_offset(squeue, (u64)bad_send_wqe_p, &q_ofs)) {
@@ -979,7 +979,7 @@ static int prepare_sqe_rts(struct ehca_qp *my_qp, struct ehca_shca *shca,
        wqe = (struct ehca_wqe *)ipz_qeit_calc(squeue, q_ofs);
        *bad_wqe_cnt = 0;
        while (wqe->optype != 0xff && wqe->wqef != 0xff) {
-               if (ehca_debug_level)
+               if (ehca_debug_level >= 2)
                        ehca_dmp(wqe, 32, "qp_num=%x wqe", qp_num);
                wqe->nr_of_data_seg = 0; /* suppress data access */
                wqe->wqef = WQEF_PURGE; /* WQE to be purged */
@@ -1451,7 +1451,7 @@ static int internal_modify_qp(struct ib_qp *ibqp,
                /* no support for max_send/recv_sge yet */
        }
 
-       if (ehca_debug_level)
+       if (ehca_debug_level >= 2)
                ehca_dmp(mqpcb, 4*70, "qp_num=%x", ibqp->qp_num);
 
        h_ret = hipz_h_modify_qp(shca->ipz_hca_handle,
@@ -1766,7 +1766,7 @@ int ehca_query_qp(struct ib_qp *qp,
        if (qp_init_attr)
                *qp_init_attr = my_qp->init_attr;
 
-       if (ehca_debug_level)
+       if (ehca_debug_level >= 2)
                ehca_dmp(qpcb, 4*70, "qp_num=%x", qp->qp_num);
 
 query_qp_exit1:
@@ -1814,7 +1814,7 @@ int ehca_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
                goto modify_srq_exit0;
        }
 
-       if (ehca_debug_level)
+       if (ehca_debug_level >= 2)
                ehca_dmp(mqpcb, 4*70, "qp_num=%x", my_qp->real_qp_num);
 
        h_ret = hipz_h_modify_qp(shca->ipz_hca_handle, my_qp->ipz_qp_handle,
@@ -1867,7 +1867,7 @@ int ehca_query_srq(struct ib_srq *srq, struct ib_srq_attr *srq_attr)
        srq_attr->srq_limit = EHCA_BMASK_GET(
                MQPCB_CURR_SRQ_LIMIT, qpcb->curr_srq_limit);
 
-       if (ehca_debug_level)
+       if (ehca_debug_level >= 2)
                ehca_dmp(qpcb, 4*70, "qp_num=%x", my_qp->real_qp_num);
 
 query_srq_exit1:
index 0b2359e2757a4555019fc9af3c4430f8b59dcbc5..bbe0436f4f75a9b459c0d893deff27fa1e237e03 100644 (file)
@@ -81,7 +81,7 @@ static inline int ehca_write_rwqe(struct ipz_queue *ipz_rqueue,
                        recv_wr->sg_list[cnt_ds].length;
        }
 
-       if (ehca_debug_level) {
+       if (ehca_debug_level >= 3) {
                ehca_gen_dbg("RECEIVE WQE written into ipz_rqueue=%p",
                             ipz_rqueue);
                ehca_dmp(wqe_p, 16*(6 + wqe_p->nr_of_data_seg), "recv wqe");
@@ -281,7 +281,7 @@ static inline int ehca_write_swqe(struct ehca_qp *qp,
                return -EINVAL;
        }
 
-       if (ehca_debug_level) {
+       if (ehca_debug_level >= 3) {
                ehca_gen_dbg("SEND WQE written into queue qp=%p ", qp);
                ehca_dmp( wqe_p, 16*(6 + wqe_p->nr_of_data_seg), "send wqe");
        }
@@ -459,13 +459,14 @@ int ehca_post_send(struct ib_qp *qp,
                        goto post_send_exit0;
                }
                wqe_cnt++;
-               ehca_dbg(qp->device, "ehca_qp=%p qp_num=%x wqe_cnt=%d",
-                        my_qp, qp->qp_num, wqe_cnt);
        } /* eof for cur_send_wr */
 
 post_send_exit0:
        iosync(); /* serialize GAL register access */
        hipz_update_sqa(my_qp, wqe_cnt);
+       if (unlikely(ret || ehca_debug_level >= 2))
+               ehca_dbg(qp->device, "ehca_qp=%p qp_num=%x wqe_cnt=%d ret=%i",
+                        my_qp, qp->qp_num, wqe_cnt, ret);
        my_qp->message_count += wqe_cnt;
        spin_unlock_irqrestore(&my_qp->spinlock_s, flags);
        return ret;
@@ -525,13 +526,14 @@ static int internal_post_recv(struct ehca_qp *my_qp,
                        goto post_recv_exit0;
                }
                wqe_cnt++;
-               ehca_dbg(dev, "ehca_qp=%p qp_num=%x wqe_cnt=%d",
-                        my_qp, my_qp->real_qp_num, wqe_cnt);
        } /* eof for cur_recv_wr */
 
 post_recv_exit0:
        iosync(); /* serialize GAL register access */
        hipz_update_rqa(my_qp, wqe_cnt);
+       if (unlikely(ret || ehca_debug_level >= 2))
+           ehca_dbg(dev, "ehca_qp=%p qp_num=%x wqe_cnt=%d ret=%i",
+                    my_qp, my_qp->real_qp_num, wqe_cnt, ret);
        spin_unlock_irqrestore(&my_qp->spinlock_r, flags);
        return ret;
 }
@@ -575,16 +577,17 @@ static inline int ehca_poll_cq_one(struct ib_cq *cq, struct ib_wc *wc)
        struct ehca_cq *my_cq = container_of(cq, struct ehca_cq, ib_cq);
        struct ehca_cqe *cqe;
        struct ehca_qp *my_qp;
-       int cqe_count = 0;
+       int cqe_count = 0, is_error;
 
 poll_cq_one_read_cqe:
        cqe = (struct ehca_cqe *)
                ipz_qeit_get_inc_valid(&my_cq->ipz_queue);
        if (!cqe) {
                ret = -EAGAIN;
-               ehca_dbg(cq->device, "Completion queue is empty ehca_cq=%p "
-                        "cq_num=%x ret=%i", my_cq, my_cq->cq_number, ret);
-               goto  poll_cq_one_exit0;
+               if (ehca_debug_level >= 3)
+                       ehca_dbg(cq->device, "Completion queue is empty  "
+                                "my_cq=%p cq_num=%x", my_cq, my_cq->cq_number);
+               goto poll_cq_one_exit0;
        }
 
        /* prevents loads being reordered across this point */
@@ -614,7 +617,7 @@ poll_cq_one_read_cqe:
                        ehca_dbg(cq->device,
                                 "Got CQE with purged bit qp_num=%x src_qp=%x",
                                 cqe->local_qp_number, cqe->remote_qp_number);
-                       if (ehca_debug_level)
+                       if (ehca_debug_level >= 2)
                                ehca_dmp(cqe, 64, "qp_num=%x src_qp=%x",
                                         cqe->local_qp_number,
                                         cqe->remote_qp_number);
@@ -627,11 +630,13 @@ poll_cq_one_read_cqe:
                }
        }
 
-       /* tracing cqe */
-       if (unlikely(ehca_debug_level)) {
+       is_error = cqe->status & WC_STATUS_ERROR_BIT;
+
+       /* trace error CQEs if debug_level >= 1, trace all CQEs if >= 3 */
+       if (unlikely(ehca_debug_level >= 3 || (ehca_debug_level && is_error))) {
                ehca_dbg(cq->device,
-                        "Received COMPLETION ehca_cq=%p cq_num=%x -----",
-                        my_cq, my_cq->cq_number);
+                        "Received %sCOMPLETION ehca_cq=%p cq_num=%x -----",
+                        is_error ? "ERROR " : "", my_cq, my_cq->cq_number);
                ehca_dmp(cqe, 64, "ehca_cq=%p cq_num=%x",
                         my_cq, my_cq->cq_number);
                ehca_dbg(cq->device,
@@ -654,8 +659,9 @@ poll_cq_one_read_cqe:
                /* update also queue adder to throw away this entry!!! */
                goto poll_cq_one_exit0;
        }
+
        /* eval ib_wc_status */
-       if (unlikely(cqe->status & WC_STATUS_ERROR_BIT)) {
+       if (unlikely(is_error)) {
                /* complete with errors */
                map_ib_wc_status(cqe->status, &wc->status);
                wc->vendor_err = wc->status;
@@ -676,14 +682,6 @@ poll_cq_one_read_cqe:
        wc->imm_data = cpu_to_be32(cqe->immediate_data);
        wc->sl = cqe->service_level;
 
-       if (unlikely(wc->status != IB_WC_SUCCESS))
-               ehca_dbg(cq->device,
-                        "ehca_cq=%p cq_num=%x WARNING unsuccessful cqe "
-                        "OPType=%x status=%x qp_num=%x src_qp=%x wr_id=%lx "
-                        "cqe=%p", my_cq, my_cq->cq_number, cqe->optype,
-                        cqe->status, cqe->local_qp_number,
-                        cqe->remote_qp_number, cqe->work_request_id, cqe);
-
 poll_cq_one_exit0:
        if (cqe_count > 0)
                hipz_update_feca(my_cq, cqe_count);
index 1b07f2beafaf1426713d1475fa2969db4b485141..e43ed8f8a0c84a51b79c52e34590b821fbaf89dd 100644 (file)
@@ -211,8 +211,7 @@ static int ehca_mmap_qp(struct vm_area_struct *vma, struct ehca_qp *qp,
                break;
 
        case 1: /* qp rqueue_addr */
-               ehca_dbg(qp->ib_qp.device, "qp_num=%x rqueue",
-                        qp->ib_qp.qp_num);
+               ehca_dbg(qp->ib_qp.device, "qp_num=%x rq", qp->ib_qp.qp_num);
                ret = ehca_mmap_queue(vma, &qp->ipz_rqueue,
                                      &qp->mm_count_rqueue);
                if (unlikely(ret)) {
@@ -224,8 +223,7 @@ static int ehca_mmap_qp(struct vm_area_struct *vma, struct ehca_qp *qp,
                break;
 
        case 2: /* qp squeue_addr */
-               ehca_dbg(qp->ib_qp.device, "qp_num=%x squeue",
-                        qp->ib_qp.qp_num);
+               ehca_dbg(qp->ib_qp.device, "qp_num=%x sq", qp->ib_qp.qp_num);
                ret = ehca_mmap_queue(vma, &qp->ipz_squeue,
                                      &qp->mm_count_squeue);
                if (unlikely(ret)) {
index 7029aa6537517b043321004a4da114590c5ca04f..5245e13c3a30aac8dc4ebfdc3728499f4c2270f6 100644 (file)
@@ -123,8 +123,9 @@ static long ehca_plpar_hcall_norets(unsigned long opcode,
        int i, sleep_msecs;
        unsigned long flags = 0;
 
-       ehca_gen_dbg("opcode=%lx " HCALL7_REGS_FORMAT,
-                    opcode, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
+       if (unlikely(ehca_debug_level >= 2))
+               ehca_gen_dbg("opcode=%lx " HCALL7_REGS_FORMAT,
+                            opcode, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
 
        for (i = 0; i < 5; i++) {
                /* serialize hCalls to work around firmware issue */
@@ -148,7 +149,8 @@ static long ehca_plpar_hcall_norets(unsigned long opcode,
                                     opcode, ret, arg1, arg2, arg3,
                                     arg4, arg5, arg6, arg7);
                else
-                       ehca_gen_dbg("opcode=%lx ret=%li", opcode, ret);
+                       if (unlikely(ehca_debug_level >= 2))
+                               ehca_gen_dbg("opcode=%lx ret=%li", opcode, ret);
 
                return ret;
        }
@@ -172,8 +174,10 @@ static long ehca_plpar_hcall9(unsigned long opcode,
        int i, sleep_msecs;
        unsigned long flags = 0;
 
-       ehca_gen_dbg("INPUT -- opcode=%lx " HCALL9_REGS_FORMAT, opcode,
-                    arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
+       if (unlikely(ehca_debug_level >= 2))
+               ehca_gen_dbg("INPUT -- opcode=%lx " HCALL9_REGS_FORMAT, opcode,
+                            arg1, arg2, arg3, arg4, arg5,
+                            arg6, arg7, arg8, arg9);
 
        for (i = 0; i < 5; i++) {
                /* serialize hCalls to work around firmware issue */
@@ -201,7 +205,7 @@ static long ehca_plpar_hcall9(unsigned long opcode,
                                     ret, outs[0], outs[1], outs[2], outs[3],
                                     outs[4], outs[5], outs[6], outs[7],
                                     outs[8]);
-               } else
+               } else if (unlikely(ehca_debug_level >= 2))
                        ehca_gen_dbg("OUTPUT -- ret=%li " HCALL9_REGS_FORMAT,
                                     ret, outs[0], outs[1], outs[2], outs[3],
                                     outs[4], outs[5], outs[6], outs[7],
@@ -381,7 +385,7 @@ u64 hipz_h_query_port(const struct ipz_adapter_handle adapter_handle,
                                      r_cb,                  /* r6 */
                                      0, 0, 0, 0);
 
-       if (ehca_debug_level)
+       if (ehca_debug_level >= 2)
                ehca_dmp(query_port_response_block, 64, "response_block");
 
        return ret;
@@ -731,9 +735,6 @@ u64 hipz_h_alloc_resource_mr(const struct ipz_adapter_handle adapter_handle,
        u64 ret;
        u64 outs[PLPAR_HCALL9_BUFSIZE];
 
-       ehca_gen_dbg("kernel PAGE_SIZE=%x access_ctrl=%016x "
-                    "vaddr=%lx length=%lx",
-                    (u32)PAGE_SIZE, access_ctrl, vaddr, length);
        ret = ehca_plpar_hcall9(H_ALLOC_RESOURCE, outs,
                                adapter_handle.handle,            /* r4 */
                                5,                                /* r5 */
@@ -758,7 +759,7 @@ u64 hipz_h_register_rpage_mr(const struct ipz_adapter_handle adapter_handle,
 {
        u64 ret;
 
-       if (unlikely(ehca_debug_level >= 2)) {
+       if (unlikely(ehca_debug_level >= 3)) {
                if (count > 1) {
                        u64 *kpage;
                        int i;