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 <[EMAIL PROTECTED]> --- 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 _______________________________________________ openib-general mailing list openib-general@openib.org http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general