[ofa-general] ***SPAM*** [PATCH] management: move sysfs()_* function to libibumad

Sasha Khapyorsky sashak at voltaire.com
Sun Dec 21 15:33:35 PST 2008


Move sysfs() stuff to libibumad tree. Now libibumad doesn't depend from
libibcommon anymore - remove this dependency.

Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---

On 13:28 Fri 19 Dec     , Hal Rosenstock wrote:
> On Fri, Dec 19, 2008 at 1:24 PM, Sean Hefty <sean.hefty at intel.com> wrote:
> >>Sasha has written some comments on the general list indicating that
> >>libibcommon may disappear in the future. It could be combined with
> >>libibumad (as libibmad (and diags) both use it.
> >
> > I'd much rather see it integrated with libibmad than libibumad.  libibumad is
> > fairly self-contained as the interface into the kernel.
> 
> That's fine as long as things that use libibumad don't now require
> libibmad as an additional dependency for something that was in
> libibcommon. I don't know if there's anything like that. xdump
> wouldn't cause that. I haven't looked at the rest of libibcommon and
> the implications.

After this patch libibumad doesn't depend from libibcommon anymore. I
think we can just merge libibmad and libibcommon and eventually to
remove libibcommon at all.


 infiniband-diags/configure.in           |    4 +-
 infiniband-diags/src/mcm_rereg_test.c   |    1 +
 libibcommon/Makefile.am                 |    2 +-
 libibcommon/include/infiniband/common.h |    7 --
 libibcommon/libibcommon.ver             |    2 +-
 libibcommon/src/libibcommon.map         |    5 -
 libibcommon/src/sysfs.c                 |  167 -------------------------------
 libibmad/configure.in                   |    4 +-
 libibmad/src/gs.c                       |    1 +
 libibmad/src/register.c                 |    1 +
 libibmad/src/rpc.c                      |    1 +
 libibumad/Makefile.am                   |    2 +-
 libibumad/configure.in                  |   13 ---
 libibumad/include/infiniband/umad.h     |    1 -
 libibumad/libibumad.spec.in             |    4 +-
 libibumad/src/sysfs.c                   |  158 +++++++++++++++++++++++++++++
 libibumad/src/umad.c                    |    9 ++
 17 files changed, 180 insertions(+), 202 deletions(-)
 delete mode 100644 libibcommon/src/sysfs.c
 create mode 100644 libibumad/src/sysfs.c

diff --git a/infiniband-diags/configure.in b/infiniband-diags/configure.in
index d8524f4..17204a4 100644
--- a/infiniband-diags/configure.in
+++ b/infiniband-diags/configure.in
@@ -32,8 +32,8 @@ AC_PROG_LIBTOOL
 if test "$disable_libcheck" != "yes"
 then
 dnl Checks for libraries
-AC_CHECK_LIB(ibcommon, sys_read_string, [],
-	AC_MSG_ERROR([sys_read_string() not found. diags require libibcommon.]))
+AC_CHECK_LIB(ibcommon, ibpanic, [],
+	AC_MSG_ERROR([ibpanic() not found. diags require libibcommon.]))
 AC_CHECK_LIB(ibumad, umad_init, [],
 	AC_MSG_ERROR([umad_init() not found. diags require libibumad.]))
 AC_CHECK_LIB(ibmad, mad_dump_int, [],
diff --git a/infiniband-diags/src/mcm_rereg_test.c b/infiniband-diags/src/mcm_rereg_test.c
index 9285b95..0ba9901 100644
--- a/infiniband-diags/src/mcm_rereg_test.c
+++ b/infiniband-diags/src/mcm_rereg_test.c
@@ -36,6 +36,7 @@
 #include <errno.h>
 #include <inttypes.h>
 
+#include <infiniband/common.h>
 #include <infiniband/umad.h>
 #include <infiniband/mad.h>
 
diff --git a/libibcommon/Makefile.am b/libibcommon/Makefile.am
index 75889f4..00e5bc8 100644
--- a/libibcommon/Makefile.am
+++ b/libibcommon/Makefile.am
@@ -13,7 +13,7 @@ else
 libibcommon_version_script =
 endif
 
-libibcommon_la_SOURCES = src/stack.c src/sysfs.c src/util.c src/time.c src/hash.c
+libibcommon_la_SOURCES = src/stack.c src/util.c src/time.c src/hash.c
 libibcommon_la_LDFLAGS = -version-info $(ibcommon_api_version) \
     -export-dynamic $(libibcommon_version_script)
 libibcommon_la_DEPENDENCIES = $(srcdir)/src/libibcommon.map
diff --git a/libibcommon/include/infiniband/common.h b/libibcommon/include/infiniband/common.h
index 01fc796..287703f 100644
--- a/libibcommon/include/infiniband/common.h
+++ b/libibcommon/include/infiniband/common.h
@@ -121,13 +121,6 @@ void	logmsg(const char *const fn, char *msg, ...) IBCOMMON_STRICT_FORMAT;
 
 void	xdump(FILE *file, char *msg, void *p, int size);
 
-/* sysfs.c: /sys utilities */
-int	sys_read_string(char *dir_name, char *file_name, char *str, int max_len);
-int	sys_read_guid(char *dir_name, char *file_name, uint64_t *net_guid);
-int	sys_read_gid(char *dir_name, char *file_name, uint8_t *gid);
-int	sys_read_uint64(char *dir_name, char *file_name, uint64_t *u);
-int	sys_read_uint(char *dir_name, char *file_name, unsigned *u);
-
 /* stack.c */
 void	stack_dump(void);
 void	enable_stack_dump(int loop);
diff --git a/libibcommon/libibcommon.ver b/libibcommon/libibcommon.ver
index 7b88f1b..22b16d9 100644
--- a/libibcommon/libibcommon.ver
+++ b/libibcommon/libibcommon.ver
@@ -6,4 +6,4 @@
 # API_REV - advance on any added API
 # RUNNING_REV - advance any change to the vendor files
 # AGE - number of backward versions the API still supports
-LIBVERSION=1:0:0
+LIBVERSION=2:1:1
diff --git a/libibcommon/src/libibcommon.map b/libibcommon/src/libibcommon.map
index 96ce2d8..f1f693a 100644
--- a/libibcommon/src/libibcommon.map
+++ b/libibcommon/src/libibcommon.map
@@ -2,11 +2,6 @@ IBCOMMON_1.0 {
 	global:
 		enable_stack_dump;
 		stack_dump;
-		sys_read_gid;
-		sys_read_guid;
-		sys_read_string;
-		sys_read_uint;
-		sys_read_uint64;
 		getcurrenttime;
 		fhash;
 		logmsg;
diff --git a/libibcommon/src/sysfs.c b/libibcommon/src/sysfs.c
deleted file mode 100644
index 3c23010..0000000
--- a/libibcommon/src/sysfs.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2004-2008 Voltaire Inc.  All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-
-#define _GNU_SOURCE
-
-#if HAVE_CONFIG_H
-#  include <config.h>
-#endif /* HAVE_CONFIG_H */
-
-#include <inttypes.h>
-#include <string.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdarg.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <string.h>
-#include <endian.h>
-#include <byteswap.h>
-#include <sys/poll.h>
-#include <syslog.h>
-#include <netinet/in.h>
-#include <errno.h>
-
-#include "common.h"
-
-static int
-ret_code(void)
-{
-	int e = errno;
-
-	if (e > 0)
-		return -e;
-	return e;
-}
-
-int
-sys_read_string(char *dir_name, char *file_name, char *str, int max_len)
-{
-	char path[256], *s;
-	int fd, r;
-
-	snprintf(path, sizeof(path), "%s/%s", dir_name, file_name);
-
-	if ((fd = open(path, O_RDONLY)) < 0)
-		return ret_code();
-
-	if ((r = read(fd, str, max_len)) < 0) {
-		int e = errno;
-		close(fd);
-		errno = e;
-		return ret_code();
-	}
-
-	str[(r < max_len) ? r : max_len - 1] = 0;
-
-	if ((s = strrchr(str, '\n')))
-		*s = 0;
-
-	close(fd);
-	return 0;
-}
-
-int
-sys_read_guid(char *dir_name, char *file_name, uint64_t *net_guid)
-{
-	char buf[32], *str, *s;
-	uint64_t guid;
-	int r, i;
-
-	if ((r = sys_read_string(dir_name, file_name, buf, sizeof(buf))) < 0)
-		return r;
-
-	guid = 0;
-
-	for (s = buf, i = 0 ; i < 4; i++) {
-		if (!(str = strsep(&s, ": \t\n")))
-			return -EINVAL;
-		guid = (guid << 16) | (strtoul(str, 0, 16) & 0xffff);
-	}
-
-	*net_guid = htonll(guid);
-
-	return 0;
-}
-
-int
-sys_read_gid(char *dir_name, char *file_name, uint8_t *gid)
-{
-	char buf[64], *str, *s;
-	uint16_t *ugid = (uint16_t *)gid;
-	int r, i;
-
-	if ((r = sys_read_string(dir_name, file_name, buf, sizeof(buf))) < 0)
-		return r;
-
-	for (s = buf, i = 0 ; i < 8; i++) {
-		if (!(str = strsep(&s, ": \t\n")))
-			return -EINVAL;
-		ugid[i] = htons(strtoul(str, 0, 16) & 0xffff);
-	}
-
-	return 0;
-}
-
-int
-sys_read_uint64(char *dir_name, char *file_name, uint64_t *u)
-{
-	char buf[32];
-	int r;
-
-	if ((r = sys_read_string(dir_name, file_name, buf, sizeof(buf))) < 0)
-		return r;
-
-	*u = strtoull(buf, 0, 0);
-
-	return 0;
-}
-
-int
-sys_read_uint(char *dir_name, char *file_name, unsigned *u)
-{
-	char buf[32];
-	int r;
-
-	if ((r = sys_read_string(dir_name, file_name, buf, sizeof(buf))) < 0)
-		return r;
-
-	*u = strtoul(buf, 0, 0);
-
-	return 0;
-}
diff --git a/libibmad/configure.in b/libibmad/configure.in
index 3d8e73d..22ea5ef 100644
--- a/libibmad/configure.in
+++ b/libibmad/configure.in
@@ -31,8 +31,8 @@ AC_PROG_CC
 dnl Checks for libraries
 if test "$disable_libcheck" != "yes"
 then
-AC_CHECK_LIB(ibcommon, sys_read_string, [],
-	AC_MSG_ERROR([sys_read_string() not found. libibmad requires libibcommon.]))
+AC_CHECK_LIB(ibcommon, ibpanic, [],
+	AC_MSG_ERROR([ibpanic() not found. libibmad requires libibcommon.]))
 AC_CHECK_LIB(ibumad, umad_init, [],
 	AC_MSG_ERROR([umad_init() not found. libibmad requires libibumad.]))
 fi
diff --git a/libibmad/src/gs.c b/libibmad/src/gs.c
index 89c927e..cade54b 100644
--- a/libibmad/src/gs.c
+++ b/libibmad/src/gs.c
@@ -42,6 +42,7 @@
 #include <pthread.h>
 #include <sys/time.h>
 
+#include <infiniband/common.h>
 #include <infiniband/umad.h>
 #include "mad.h"
 
diff --git a/libibmad/src/register.c b/libibmad/src/register.c
index a33acd8..8e59e6e 100644
--- a/libibmad/src/register.c
+++ b/libibmad/src/register.c
@@ -43,6 +43,7 @@
 #include <string.h>
 #include <errno.h>
 
+#include <infiniband/common.h>
 #include <infiniband/umad.h>
 #include "mad.h"
 
diff --git a/libibmad/src/rpc.c b/libibmad/src/rpc.c
index df28f65..34a6b9a 100644
--- a/libibmad/src/rpc.c
+++ b/libibmad/src/rpc.c
@@ -43,6 +43,7 @@
 #include <string.h>
 #include <errno.h>
 
+#include <infiniband/common.h>
 #include <infiniband/umad.h>
 #include "mad.h"
 
diff --git a/libibumad/Makefile.am b/libibumad/Makefile.am
index 1e3e6fd..50222df 100644
--- a/libibumad/Makefile.am
+++ b/libibumad/Makefile.am
@@ -27,7 +27,7 @@ else
 libibumad_version_script =
 endif
 
-libibumad_la_SOURCES = src/umad.c
+libibumad_la_SOURCES = src/umad.c src/sysfs.c
 libibumad_la_LDFLAGS = -version-info $(ibumad_api_version) \
     -export-dynamic $(libibumad_version_script)
 libibumad_la_DEPENDENCIES = $(srcdir)/src/libibumad.map
diff --git a/libibumad/configure.in b/libibumad/configure.in
index ad3afcd..3a08771 100644
--- a/libibumad/configure.in
+++ b/libibumad/configure.in
@@ -44,23 +44,10 @@ AC_PROG_LN_S
 AC_PROG_MAKE_SET
 AM_PROG_LIBTOOL
 
-if test "$disable_libcheck" != "yes"
-then
-dnl Checks for libraries
-AC_CHECK_LIB(ibcommon, sys_read_string, [],
-	AC_MSG_ERROR([sys_read_string() not found. libibumad requires libibcommon.]))
-fi
-
 dnl Checks for header files.
 AC_HEADER_DIRENT
 AC_HEADER_STDC
 AC_CHECK_HEADERS([fcntl.h netinet/in.h stdlib.h string.h sys/ioctl.h unistd.h])
-if test "$disable_libcheck" != "yes"
-then
-AC_CHECK_HEADER(infiniband/common.h, [],
-	AC_MSG_ERROR([<infiniband/common.h> not found. libibumad requires libibcommon.])
-)
-fi
 
 dnl Checks for library functions
 AC_PROG_GCC_TRADITIONAL
diff --git a/libibumad/include/infiniband/umad.h b/libibumad/include/infiniband/umad.h
index 7d97c25..91ccf1d 100644
--- a/libibumad/include/infiniband/umad.h
+++ b/libibumad/include/infiniband/umad.h
@@ -34,7 +34,6 @@
 #define _UMAD_H
 
 #include <stdint.h>
-#include <infiniband/common.h>
 
 #ifdef __cplusplus
 #  define BEGIN_C_DECLS extern "C" {
diff --git a/libibumad/libibumad.spec.in b/libibumad/libibumad.spec.in
index 1b11d18..7732edd 100644
--- a/libibumad/libibumad.spec.in
+++ b/libibumad/libibumad.spec.in
@@ -13,7 +13,7 @@ Source: http://www.openfabrics.org/downloads/management/@TARBALL@
 Url: http://openfabrics.org
 Requires(post): /sbin/ldconfig
 Requires(postun): /sbin/ldconfig
-BuildRequires: libibcommon-devel, libtool
+BuildRequires: libtool
 
 %description
 libibumad provides the user MAD library functions which sit on top of
@@ -23,7 +23,7 @@ and management tools, including OpenSM.
 %package devel
 Summary: Development files for the libibumad library
 Group: System Environment/Libraries
-Requires: %{name} = %{version}-%{release} libibcommon-devel
+Requires: %{name} = %{version}-%{release}
 Requires(post): /sbin/ldconfig
 Requires(postun): /sbin/ldconfig
 
diff --git a/libibumad/src/sysfs.c b/libibumad/src/sysfs.c
new file mode 100644
index 0000000..af5545e
--- /dev/null
+++ b/libibumad/src/sysfs.c
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2004-2008 Voltaire Inc.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#define _GNU_SOURCE
+
+#if HAVE_CONFIG_H
+#  include <config.h>
+#endif /* HAVE_CONFIG_H */
+
+#include <inttypes.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <endian.h>
+#include <byteswap.h>
+#include <netinet/in.h>
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define htonll(x) bswap_64(x)
+#else
+#define htonll(x) (x)
+#endif
+
+static int ret_code(void)
+{
+	int e = errno;
+
+	if (e > 0)
+		return -e;
+	return e;
+}
+
+int sys_read_string(char *dir_name, char *file_name, char *str, int max_len)
+{
+	char path[256], *s;
+	int fd, r;
+
+	snprintf(path, sizeof(path), "%s/%s", dir_name, file_name);
+
+	if ((fd = open(path, O_RDONLY)) < 0)
+		return ret_code();
+
+	if ((r = read(fd, str, max_len)) < 0) {
+		int e = errno;
+		close(fd);
+		errno = e;
+		return ret_code();
+	}
+
+	str[(r < max_len) ? r : max_len - 1] = 0;
+
+	if ((s = strrchr(str, '\n')))
+		*s = 0;
+
+	close(fd);
+	return 0;
+}
+
+int sys_read_guid(char *dir_name, char *file_name, uint64_t *net_guid)
+{
+	char buf[32], *str, *s;
+	uint64_t guid;
+	int r, i;
+
+	if ((r = sys_read_string(dir_name, file_name, buf, sizeof(buf))) < 0)
+		return r;
+
+	guid = 0;
+
+	for (s = buf, i = 0 ; i < 4; i++) {
+		if (!(str = strsep(&s, ": \t\n")))
+			return -EINVAL;
+		guid = (guid << 16) | (strtoul(str, 0, 16) & 0xffff);
+	}
+
+	*net_guid = htonll(guid);
+
+	return 0;
+}
+
+int sys_read_gid(char *dir_name, char *file_name, uint8_t *gid)
+{
+	char buf[64], *str, *s;
+	uint16_t *ugid = (uint16_t *)gid;
+	int r, i;
+
+	if ((r = sys_read_string(dir_name, file_name, buf, sizeof(buf))) < 0)
+		return r;
+
+	for (s = buf, i = 0 ; i < 8; i++) {
+		if (!(str = strsep(&s, ": \t\n")))
+			return -EINVAL;
+		ugid[i] = htons(strtoul(str, 0, 16) & 0xffff);
+	}
+
+	return 0;
+}
+
+int sys_read_uint64(char *dir_name, char *file_name, uint64_t *u)
+{
+	char buf[32];
+	int r;
+
+	if ((r = sys_read_string(dir_name, file_name, buf, sizeof(buf))) < 0)
+		return r;
+
+	*u = strtoull(buf, 0, 0);
+
+	return 0;
+}
+
+int sys_read_uint(char *dir_name, char *file_name, unsigned *u)
+{
+	char buf[32];
+	int r;
+
+	if ((r = sys_read_string(dir_name, file_name, buf, sizeof(buf))) < 0)
+		return r;
+
+	*u = strtoul(buf, 0, 0);
+
+	return 0;
+}
diff --git a/libibumad/src/umad.c b/libibumad/src/umad.c
index 3713ffe..c233de9 100644
--- a/libibumad/src/umad.c
+++ b/libibumad/src/umad.c
@@ -38,6 +38,7 @@
 #include <sys/poll.h>
 #include <unistd.h>
 #include <string.h>
+#include <stdio.h>
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -76,6 +77,14 @@ typedef struct ib_user_mad_reg_req {
 	uint8_t  rmpp_version;
 } ib_user_mad_reg_req_t;
 
+extern int sys_read_string(char *dir_name, char *file_name, char *str, int len);
+extern int sys_read_guid(char *dir_name, char *file_name, uint64_t *net_guid);
+extern int sys_read_gid(char *dir_name, char *file_name, uint8_t *gid);
+extern int sys_read_uint64(char *dir_name, char *file_name, uint64_t *u);
+extern int sys_read_uint(char *dir_name, char *file_name, unsigned *u);
+
+#define IBWARN(fmt, args...) fprintf(stdout, "ibwarn: [%d] %s: " fmt, getpid(), __func__, ## args)
+
 #define TRACE	if (umaddebug)	IBWARN
 #define DEBUG	if (umaddebug)	IBWARN
 
-- 
1.6.0.4.766.g6fc4a




More information about the general mailing list