From patchwork Thu Feb 24 19:05:58 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Heinz X-Patchwork-Id: 588251 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 p1OJ5xLZ030569 for ; Thu, 24 Feb 2011 19:06:04 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755301Ab1BXTGD (ORCPT ); Thu, 24 Feb 2011 14:06:03 -0500 Received: from [198.186.4.11] ([198.186.4.11]:11071 "EHLO homer.dev.silverstorm.com" rhost-flags-FAIL-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1754667Ab1BXTGC (ORCPT ); Thu, 24 Feb 2011 14:06:02 -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 p1OJ5wtY007017; Thu, 24 Feb 2011 14:05:58 -0500 Subject: [PATCH V3 1/2] Function for improved node descriptions To: roland@kernel.org, linux-rdma@vger.kernel.org, michael.heinz@qlogic.com From: Michael Heinz Date: Thu, 24 Feb 2011 14:05:58 -0500 Message-ID: <20110224190558.6970.96776.stgit@homer> In-Reply-To: <20110224190503.6970.47809.stgit@homer> References: <20110224190503.6970.47809.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 19:06:04 +0000 (UTC) diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c index 822cfdc..3b5751d 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,44 @@ 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_DEVICE_DESC_MAX-1; + 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; + default: + src++; + } + } + } + if (dest < end) + *dest = 0; + else + *end = 0; +} +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 diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 55cd0a0..a5986af 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -938,6 +938,7 @@ enum ib_mad_result { }; #define IB_DEVICE_NAME_MAX 64 +#define IB_DEVICE_DESC_MAX 64 struct ib_cache { rwlock_t lock; @@ -1165,7 +1166,7 @@ struct ib_device { int uverbs_abi_ver; u64 uverbs_cmd_mask; - char node_desc[64]; + char node_desc[IB_DEVICE_DESC_MAX]; __be64 node_guid; u32 local_dma_lkey; u8 node_type;