From patchwork Thu Feb 24 02:24:43 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Heinz X-Patchwork-Id: 586211 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p1O2OiU7026869 for ; Thu, 24 Feb 2011 02:24:47 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932111Ab1BXCYr (ORCPT ); Wed, 23 Feb 2011 21:24:47 -0500 Received: from [198.186.4.11] ([198.186.4.11]:57700 "EHLO homer.dev.silverstorm.com" rhost-flags-FAIL-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S932079Ab1BXCYq (ORCPT ); Wed, 23 Feb 2011 21:24:46 -0500 Received: from [172.21.1.208] (homer [127.0.0.1]) by homer.dev.silverstorm.com (8.13.8/8.13.8) with ESMTP id p1O2OhMM026860; Wed, 23 Feb 2011 21:24:44 -0500 Subject: [PATCH v2 1/2] Function for improved node descriptions To: roland@kernel.org, linux-rdma@vger.kernel.org, michael.heinz@qlogic.com From: Michael Heinz Cc: todd.rimmer@qlogic.com Date: Wed, 23 Feb 2011 21:24:43 -0500 Message-ID: <20110224022443.26808.39858.stgit@homer> In-Reply-To: <20110224022124.26808.62012.stgit@homer> References: <20110224022124.26808.62012.stgit@homer> User-Agent: StGit/0.15 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.6 (demeter1.kernel.org [140.211.167.41]); Thu, 24 Feb 2011 02:24:47 +0000 (UTC) diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c index 822cfdc..d5468e1 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,38 @@ int ib_get_mad_data_offset(u8 mgmt_class) } EXPORT_SYMBOL(ib_get_mad_data_offset); +void ib_build_node_desc(struct ib_smp *smp, struct ib_device *dev) +{ + char *dest = smp->data; + char *end = dest + IB_SMP_DATA_SIZE; + char *src = dev->node_desc; + char *field; + + while (*src && (dest < end)) { + if (*src != '%') { + *dest++ = *src++; + } else { + src++; + switch (*src) { + case 'h': + field = init_utsname()->nodename; + src++; + for (; *field && (*field != '.') && + (dest < end);) + *dest++ = *field++; + break; + case 'd': + field = dev->name; + src++; + for (; *field && (dest < end);) + *dest++ = *field++; + break; + } + } + } +} +EXPORT_SYMBOL(ib_build_node_desc); + int ib_is_mad_class_rmpp(u8 mgmt_class) { if ((mgmt_class == IB_MGMT_CLASS_SUBN_ADM) || diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h index d3b9401..417a371 100644 --- a/include/rdma/ib_mad.h +++ b/include/rdma/ib_mad.h @@ -40,6 +40,7 @@ #include #include +#include /* Management base version */ #define IB_MGMT_BASE_VERSION 1 @@ -637,6 +638,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(struct ib_smp *smp, struct ib_device *dev); + +/** * 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