From patchwork Fri Mar 19 18:19:43 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ira Weiny X-Patchwork-Id: 86992 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o2JIOFcn002025 for ; Fri, 19 Mar 2010 18:24:15 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751647Ab0CSSYO (ORCPT ); Fri, 19 Mar 2010 14:24:14 -0400 Received: from nspiron-2.llnl.gov ([128.115.41.82]:54532 "EHLO nspiron-2.llnl.gov" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751474Ab0CSSYO (ORCPT ); Fri, 19 Mar 2010 14:24:14 -0400 X-Attachments: None Received: from mail-1.llnl.gov ([128.115.41.180]) by nspiron-2.llnl.gov with ESMTP; 19 Mar 2010 11:24:13 -0700 Received: from jeepcj7.llnl.gov (jeepcj7.llnl.gov [134.9.93.67]) by mail-1.llnl.gov (8.13.1/8.12.3/LLNL evision: 1.7 $) with SMTP id o2JIOBDk030909; Fri, 19 Mar 2010 11:24:11 -0700 Date: Fri, 19 Mar 2010 11:19:43 -0700 From: Ira Weiny To: Sasha Khapyorsky Cc: "linux-rdma@vger.kernel.org" Subject: [PATCH] infiniband-diags: Ignore PortInfo data on down port. Message-Id: <20100319111943.80ae2e24.weiny2@llnl.gov> X-Mailer: Sylpheed 2.6.0 (GTK+ 2.10.4; x86_64-unknown-linux-gnu) Mime-Version: 1.0 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Fri, 19 Mar 2010 18:24:15 +0000 (UTC) diff --git a/infiniband-diags/src/iblinkinfo.c b/infiniband-diags/src/iblinkinfo.c index d6a0a09..ecfd579 100644 --- a/infiniband-diags/src/iblinkinfo.c +++ b/infiniband-diags/src/iblinkinfo.c @@ -134,20 +134,34 @@ void print_port(ibnd_node_t * node, ibnd_port_t * port) width_msg[0] = '\0'; speed_msg[0] = '\0'; - n = snprintf(link_str, 256, "(%3s %s %6s/%8s)", + /* C14-24.2.1 states that a down port allows for invalid data to be + * returned for all PortInfo components except PortState and + * PortPhysicalState */ + if (istate != IB_LINK_DOWN) { + n = snprintf(link_str, 256, "(%3s %9s %6s/%8s)", mad_dump_val(IB_PORT_LINK_WIDTH_ACTIVE_F, width, 64, &iwidth), mad_dump_val(IB_PORT_LINK_SPEED_ACTIVE_F, speed, 64, - &ispeed), mad_dump_val(IB_PORT_STATE_F, state, - 64, &istate), + &ispeed), + mad_dump_val(IB_PORT_STATE_F, state, 64, &istate), mad_dump_val(IB_PORT_PHYS_STATE_F, physstate, 64, &iphystate)); + } else { + n = snprintf(link_str, 256, "( %6s/%8s)", + mad_dump_val(IB_PORT_STATE_F, state, 64, &istate), + mad_dump_val(IB_PORT_PHYS_STATE_F, physstate, 64, + &iphystate)); + } - if (add_sw_settings) - snprintf(link_str + n, 256 - n, " (HOQ:%d VL_Stall:%d)", - mad_get_field(port->info, 0, IB_PORT_HOQ_LIFE_F), - mad_get_field(port->info, 0, - IB_PORT_VL_STALL_COUNT_F)); + /* again default values due to C14-24.2.1 */ + if (add_sw_settings && istate != IB_LINK_DOWN) { + snprintf(link_str + n, 256 - n, + " (HOQ:%d VL_Stall:%d)", + mad_get_field(port->info, 0, + IB_PORT_HOQ_LIFE_F), + mad_get_field(port->info, 0, + IB_PORT_VL_STALL_COUNT_F)); + } if (port->remoteport) { char *remap = diff --git a/infiniband-diags/src/ibqueryerrors.c b/infiniband-diags/src/ibqueryerrors.c index 0b320ec..7d27806 100644 --- a/infiniband-diags/src/ibqueryerrors.c +++ b/infiniband-diags/src/ibqueryerrors.c @@ -142,11 +142,20 @@ static void print_port_config(char *node_name, ibnd_node_t * node, int portnum) width_msg[0] = '\0'; speed_msg[0] = '\0'; - snprintf(link_str, 256, "(%3s %s %6s/%8s)", - mad_dump_val(IB_PORT_LINK_WIDTH_ACTIVE_F, width, 64, &iwidth), - mad_dump_val(IB_PORT_LINK_SPEED_ACTIVE_F, speed, 64, &ispeed), - mad_dump_val(IB_PORT_STATE_F, state, 64, &istate), - mad_dump_val(IB_PORT_PHYS_STATE_F, physstate, 64, &iphystate)); + /* C14-24.2.1 states that a down port allows for invalid data to be + * returned for all PortInfo components except PortState and + * PortPhysicalState */ + if (istate != IB_LINK_DOWN) { + snprintf(link_str, 256, "(%3s %9s %6s/%8s)", + mad_dump_val(IB_PORT_LINK_WIDTH_ACTIVE_F, width, 64, &iwidth), + mad_dump_val(IB_PORT_LINK_SPEED_ACTIVE_F, speed, 64, &ispeed), + mad_dump_val(IB_PORT_STATE_F, state, 64, &istate), + mad_dump_val(IB_PORT_PHYS_STATE_F, physstate, 64, &iphystate)); + } else { + snprintf(link_str, 256, "( %6s/%8s)", + mad_dump_val(IB_PORT_STATE_F, state, 64, &istate), + mad_dump_val(IB_PORT_PHYS_STATE_F, physstate, 64, &iphystate)); + } if (port->remoteport) { char *rem_node_name = NULL;