From patchwork Tue Jun 15 19:35:35 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Heinz X-Patchwork-Id: 106311 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 o5FJZpqf024857 for ; Tue, 15 Jun 2010 19:35:51 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932354Ab0FOTfj (ORCPT ); Tue, 15 Jun 2010 15:35:39 -0400 Received: from avexcashub1.qlogic.com ([198.70.193.61]:48745 "EHLO avexcashub1.qlogic.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932348Ab0FOTfi convert rfc822-to-8bit (ORCPT ); Tue, 15 Jun 2010 15:35:38 -0400 Received: from avexcashub2.qlogic.org (10.1.4.116) by avexcashub1.qlogic.org (10.1.4.161) with Microsoft SMTP Server (TLS) id 8.1.436.0; Tue, 15 Jun 2010 12:35:38 -0700 Received: from MNEXCASHUB1.qlogic.org (10.33.2.103) by avexcashub2.qlogic.org (10.1.4.162) with Microsoft SMTP Server (TLS) id 8.1.436.0; Tue, 15 Jun 2010 12:35:37 -0700 Received: from MNEXMB1.qlogic.org ([fe80::c6b:fda:afec:79a1]) by MNEXCASHUB1.qlogic.org ([::1]) with mapi; Tue, 15 Jun 2010 14:35:36 -0500 From: Mike Heinz To: "linux-rdma@vger.kernel.org" CC: Or Gerlitz , Jason Gunthorpe Date: Tue, 15 Jun 2010 14:35:35 -0500 Subject: [PATCH v2] ofa_kernel/infiniband node description patch Thread-Topic: [PATCH v2] ofa_kernel/infiniband node description patch Thread-Index: AcsMwey69zSKuox/Sv2DUTfHYJ1N8A== Message-ID: <4C2744E8AD2982428C5BFE523DF8CDCB49D09E79E8@MNEXMB1.qlogic.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US 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]); Tue, 15 Jun 2010 19:35:52 +0000 (UTC) diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c index ef1304f..bdf1cfa 100644 --- a/drivers/infiniband/core/mad.c +++ b/drivers/infiniband/core/mad.c @@ -41,6 +41,7 @@ #include "mad_rmpp.h" #include "smi.h" #include "agent.h" +#include "linux/utsname.h" MODULE_LICENSE("Dual BSD/GPL"); MODULE_DESCRIPTION("kernel IB MAD API"); @@ -932,6 +933,29 @@ int ib_get_mad_data_offset(u8 mgmt_class) } EXPORT_SYMBOL(ib_get_mad_data_offset); +#define NODE_DESC_FIELD_LENGTH 64 +void ib_build_node_desc(char *dest, char *src) +{ + int i; + for (i=0; inodename; + for (; *name && *name != '.' && iattr_mod) smp->status |= IB_SMP_INVALID_FIELD; - memcpy(smp->data, ibdev->node_desc, sizeof(smp->data)); + ib_build_node_desc((char*)smp->data, ibdev->node_desc); return reply(smp); } diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c index dd7f26d..db8b719 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.c +++ b/drivers/infiniband/hw/ipath/ipath_verbs.c @@ -2180,7 +2180,7 @@ int ipath_register_ib_device(struct ipath_devdata *dd) dev->dma_ops = &ipath_dma_mapping_ops; snprintf(dev->node_desc, sizeof(dev->node_desc), - IPATH_IDSTR " %s", init_utsname()->nodename); + "@:" IPATH_IDSTR); ret = ib_register_device(dev, NULL); if (ret) diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c index f38d5b1..d83398f 100644 --- a/drivers/infiniband/hw/mlx4/mad.c +++ b/drivers/infiniband/hw/mlx4/mad.c @@ -196,7 +196,7 @@ static void node_desc_override(struct ib_device *dev, mad->mad_hdr.method == IB_MGMT_METHOD_GET_RESP && mad->mad_hdr.attr_id == IB_SMP_ATTR_NODE_DESC) { spin_lock(&to_mdev(dev)->sm_lock); - memcpy(((struct ib_smp *) mad)->data, dev->node_desc, 64); + ib_build_node_desc((char*)((struct ib_smp *) mad)->data, dev->node_desc); spin_unlock(&to_mdev(dev)->sm_lock); } } diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index 4e94e36..67e317f 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c @@ -479,7 +479,9 @@ static int init_node_data(struct mlx4_ib_dev *dev) if (err) goto out; - memcpy(dev->ib_dev.node_desc, out_mad->data, 64); + dev->ib_dev.node_desc[0]='@'; + dev->ib_dev.node_desc[1]=':'; + memcpy(&(dev->ib_dev.node_desc[2]), out_mad->data, 62); in_mad->attr_id = IB_SMP_ATTR_NODE_INFO; diff --git a/drivers/infiniband/hw/mthca/mthca_mad.c b/drivers/infiniband/hw/mthca/mthca_mad.c index 5648659..d71458e 100644 --- a/drivers/infiniband/hw/mthca/mthca_mad.c +++ b/drivers/infiniband/hw/mthca/mthca_mad.c @@ -153,7 +153,7 @@ static void node_desc_override(struct ib_device *dev, mad->mad_hdr.method == IB_MGMT_METHOD_GET_RESP && mad->mad_hdr.attr_id == IB_SMP_ATTR_NODE_DESC) { mutex_lock(&to_mdev(dev)->cap_mask_mutex); - memcpy(((struct ib_smp *) mad)->data, dev->node_desc, 64); + ib_build_node_desc((char*)((struct ib_smp *) mad)->data, dev->node_desc); mutex_unlock(&to_mdev(dev)->cap_mask_mutex); } } diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c index 1e0b4b6..4c4dbe0 100644 --- a/drivers/infiniband/hw/mthca/mthca_provider.c +++ b/drivers/infiniband/hw/mthca/mthca_provider.c @@ -1273,7 +1273,9 @@ static int mthca_init_node_data(struct mthca_dev *dev) goto out; } - memcpy(dev->ib_dev.node_desc, out_mad->data, 64); + dev->ib_dev.node_desc[0]='@'; + dev->ib_dev.node_desc[1]=':'; + memcpy(&(dev->ib_dev.node_desc[2]), out_mad->data, 62); in_mad->attr_id = IB_SMP_ATTR_NODE_INFO; diff --git a/drivers/infiniband/hw/qib/qib_mad.c b/drivers/infiniband/hw/qib/qib_mad.c index 94b0d1f..f7e4b51 100644 --- a/drivers/infiniband/hw/qib/qib_mad.c +++ b/drivers/infiniband/hw/qib/qib_mad.c @@ -260,7 +260,7 @@ static int subn_get_nodedescription(struct ib_smp *smp, if (smp->attr_mod) smp->status |= IB_SMP_INVALID_FIELD; - memcpy(smp->data, ibdev->node_desc, sizeof(smp->data)); + ib_build_node_desc((char*)smp->data, ibdev->node_desc); return reply(smp); } diff --git a/drivers/infiniband/hw/qib/qib_verbs.c b/drivers/infiniband/hw/qib/qib_verbs.c index cda8f41..bd143e4 100644 --- a/drivers/infiniband/hw/qib/qib_verbs.c +++ b/drivers/infiniband/hw/qib/qib_verbs.c @@ -2153,7 +2153,7 @@ int qib_register_ib_device(struct qib_devdata *dd) ibdev->dma_ops = &qib_dma_mapping_ops; snprintf(ibdev->node_desc, sizeof(ibdev->node_desc), - QIB_IDSTR " %s", init_utsname()->nodename); + "@:" QIB_IDSTR); ret = ib_register_device(ibdev, qib_create_port_files); if (ret) diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h index d3b9401..5916617 100644 --- a/include/rdma/ib_mad.h +++ b/include/rdma/ib_mad.h @@ -637,6 +637,14 @@ int ib_is_mad_class_rmpp(u8 mgmt_class); int ib_get_mad_data_offset(u8 mgmt_class); /** + * ib_build_node_desc - copies the node description and replaces + * any @ markers with the present system node name. + * @dest: destination + * @src: source + */ +void ib_build_node_desc(char *dest, char *src); + +/** * ib_get_rmpp_segment - returns the data buffer for a given RMPP segment. * @send_buf: Previously allocated send data buffer. * @seg_num: number of segment to return