[openib-general] [PATCH 3/7] libipathverbs: Update libipathverbs for new libibverbs driver handling
Roland Dreier
rolandd at cisco.com
Wed Jan 10 14:21:50 PST 2007
The latest libibverbs development tree changes how low-level drivers
are found. The driver must be in a shared object like
libipathverbs-rdmav2.so in the ordinary library path, rather than
infiniband/ipathverbs.so as for libibverbs 1.0. In addition, the
driver must call ibv_register_driver() to pass its entry point to
libibverbs, rather than exporting an ibv_driver_init() function.
Since the current libipathverbs tree is targeted only for libibverbs
development trees and won't work with libibverbs 1.0, this patch
changes libipathverbs to work with the new libibverbs way of loading
drivers without any autoconf tests.
Signed-off-by: Roland Dreier <rolandd at cisco.com>
---
Makefile.am | 15 ++++++++-------
configure.in | 13 +++++++++++++
ipathverbs.driver | 1 +
libipathverbs.spec.in | 5 +++--
src/ipathverbs.c | 9 +++++++--
5 files changed, 32 insertions(+), 11 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index f86e1e2..c1ef44f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -32,11 +32,9 @@
# combinations of this program with other software, or any other
# product whatsoever.
-ipathverbslibdir = $(libdir)/infiniband
+lib_LTLIBRARIES = src/libipathverbs.la
-ipathverbslib_LTLIBRARIES = src/ipathverbs.la
-
-src_ipathverbs_la_CFLAGS = -Wall -D_GNU_SOURCE
+AM_CFLAGS = -Wall -D_GNU_SOURCE
if HAVE_LD_VERSION_SCRIPT
ipathverbs_version_script = -Wl,--version-script=$(srcdir)/src/ipathverbs.map
@@ -44,14 +42,17 @@ else
ipathverbs_version_script =
endif
-src_ipathverbs_la_SOURCES = src/ipathverbs.c src/verbs.c
-src_ipathverbs_la_LDFLAGS = -avoid-version -module \
+src_libipathverbs_la_SOURCES = src/ipathverbs.c src/verbs.c
+src_libipathverbs_la_LDFLAGS = -avoid-version -release @IBV_DEVICE_LIBRARY_EXTENSION@ \
$(ipathverbs_version_script)
+ipathverbsconfdir = $(sysconfdir)/libibverbs.d
+ipathverbsconf_DATA = ipathverbs.driver
EXTRA_DIST = src/ipathverbs.h \
src/ipath-abi.h \
src/ipathverbs.map \
- libipathverbs.spec.in
+ libipathverbs.spec.in \
+ ipathverbs.driver
dist-hook: libipathverbs.spec
cp libipathverbs.spec $(distdir)
diff --git a/configure.in b/configure.in
index 727cd65..ab1a86e 100644
--- a/configure.in
+++ b/configure.in
@@ -56,6 +56,19 @@ dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_CHECK_SIZEOF(long)
+dnl Now check if for libibverbs device library extension
+dummy=if$$
+cat <<IBV_VERSION > $dummy.c
+#include <infiniband/driver.h>
+IBV_DEVICE_LIBRARY_EXTENSION
+IBV_VERSION
+IBV_DEVICE_LIBRARY_EXTENSION=`$CC $CPPFLAGS -E $dummy.c 2> /dev/null | tail -1`
+rm -f $dummy.c
+if test $IBV_DEVICE_LIBRARY_EXTENSION = IBV_DEVICE_LIBRARY_EXTENSION; then
+ AC_MSG_ERROR([IBV_DEVICE_LIBRARY_EXTENSION not defined. Is libibverbs new enough?])
+fi
+AC_SUBST(IBV_DEVICE_LIBRARY_EXTENSION)
+
AC_CACHE_CHECK(whether ld accepts --version-script, ac_cv_version_script,
if test -n "`$LD --help < /dev/null 2>/dev/null | grep version-script`"; then
ac_cv_version_script=yes
diff --git a/ipathverbs.driver b/ipathverbs.driver
new file mode 100644
index 0000000..d212578
--- /dev/null
+++ b/ipathverbs.driver
@@ -0,0 +1 @@
+driver ipathverbs
diff --git a/libipathverbs.spec.in b/libipathverbs.spec.in
index 4726102..1a4b2bd 100644
--- a/libipathverbs.spec.in
+++ b/libipathverbs.spec.in
@@ -77,9 +77,10 @@ rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
-%{_libdir}/infiniband/ipathverbs.so
+%{_libdir}/libipathverbs*.so
%doc AUTHORS COPYING
+%config %{_sysconfdir}/libibverbs.d/ipathverbs.driver
%files devel
%defattr(-,root,root,-)
-%{_libdir}/infiniband/ipathverbs.a
+%{_libdir}/infiniband/libipathverbs*.a
diff --git a/src/ipathverbs.c b/src/ipathverbs.c
index d9fadca..22f2f48 100644
--- a/src/ipathverbs.c
+++ b/src/ipathverbs.c
@@ -165,8 +165,8 @@ static struct ibv_device_ops ipath_dev_ops = {
.free_context = ipath_free_context
};
-struct ibv_device *ibv_driver_init(const char *uverbs_sys_path,
- int abi_version)
+static struct ibv_device *ipathverbs_driver_init(const char *uverbs_sys_path,
+ int abi_version)
{
char value[8];
struct ipath_device *dev;
@@ -204,3 +204,8 @@ found:
return &dev->ibv_dev;
}
+
+static __attribute__((constructor)) void ipathverbs_register_driver(void)
+{
+ ibv_register_driver("ipathverbs", ipathverbs_driver_init);
+}
--
1.4.4.1
More information about the general
mailing list