Roland Dreier [Wed, 31 Jan 2007 18:44:14 +0000 (10:44 -0800)]
Update Debian changelog
Remove item about bumping soname, since it's no longer true. Merge in
1.0.4-1 info from stable branch, since it's been uploaded to Debian
archive already.
Roland Dreier [Wed, 31 Jan 2007 18:38:50 +0000 (10:38 -0800)]
Fix unset context breakage when a low-level driver does kernel bypass
Commit 8b3d2254 ("The ibv_cmd_* create functions need to set context")
breaks things when a low-level driver does not actually use an
ibv_cmd_* function to create an object, since then the context member
of that object never gets set. For example, libmthca does not nee to
call into the kernel to create an AH, and hence ibv_destroy_ah() will
crash because it tries to call a function pointer from the AH's
context member, which never gets set.
Fix this by adding back all the setting of context to the main verbs
functions like ibv_create_ah() (but still leave the setting in the
ibv_cmd_* create functions too). This means context gets set twice,
but that doesn't really hurt anything. Once we branch off libibverbs
1.1 as stable, we can change the signatures of the ibv_cmd_* destroy
functions to take an explicit context parameter, and get rid of
setting context in the ibv_cmd_* create functions.
Roland Dreier [Mon, 29 Jan 2007 17:30:30 +0000 (09:30 -0800)]
Rename Debian package back to libibverbs1
Since commit fd448acc ("Add ABI compatibility for apps linked against
libibverbs 1.0") makes libibverbs 1.1 binary compatible with
applications linked against libibverbs 1.0 and the soname of the
library remains at 1, change the Debian package back to libibverbs1
instead of bumping it to libibverbs2.
Roland Dreier [Mon, 29 Jan 2007 17:22:18 +0000 (09:22 -0800)]
Add ABI compatibility for apps linked against libibverbs 1.0
Add a compatibility layer that allows applications (but not low-level
drivers) linked against libibverbs 1.0 to work with libibverbs 1.1.
This is done by using Linux's versioned symbol linking support: the
native libibverbs entry points are given IBVERBS_1.1 versions, and
compatibility wrappers for entry points from libibverbs 1.0 are
created with an IBVERBS_1.0 version (to match what libibverbs 1.0
exported).
In essense these wrappers create compatible proxies for every
structure returned to the application (struct ibv_device, ibv_context,
ibv_pd, etc), and map between the proxy and the real object when the
application calls into libibverbs. This code is mostly
straightforward, with a few complications in handling async events,
because the pointers in event structures must be translated back to
proxy structures when they are returned to the application.
There are a few further wrinkles because the calls to data path
functions (poll CQ, post send, etc) are actually inline functions that
call directly into the context ops, so the context ops proxy structure
must actually contain pointers to compatibility wrappers for these
functions as well. This may have some performance impact but it seems
the overhead is unavoidable, and tests with NetPIPE on top of Open MPI
shows that the latency and throughput differences seem to be lost in
the noise anyway.
Steve Wise [Fri, 19 Jan 2007 21:16:59 +0000 (15:16 -0600)]
The ibv_cmd_* create functions need to set context
If the ibv_cmd_* create function succeeds, then the object context
pointer must be set by that function so that the corresponding destroy
function will work. This avoids problems in the error cleanup path of
a low-level driver's create function that fails after calling an
ibv_cmd_* create function.
Signed-off-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Roland Dreier [Fri, 26 Jan 2007 21:42:04 +0000 (13:42 -0800)]
Fix caching of --version-script check
The shell code in AC_CACHE_CHECK() should set the variable that we say
is being cached. So set ac_cv_version_script when testing whether ld
accepts --version-script, and then set LIBIBVERBS_VERSION_SCRIPT based
on the (possibly cached) value of ac_cv_version_script outside of the
AC_CACHE_CHECK().
Roland Dreier [Thu, 11 Jan 2007 21:19:01 +0000 (13:19 -0800)]
Don't use d_type member of struct dirent
On some filesystems (notably reiserfs), dent->d_type is always
DT_UNKNOWN. Therefore libibverbs should use stat() to check file
types when scanning through directories rather than relying on the
d_type returned from readdir().
Roland Dreier [Thu, 11 Jan 2007 15:19:49 +0000 (07:19 -0800)]
Revert "Pass driver data through ibv_cmd_req_notify_cq()"
This reverts commit d5b9ab3d7009b77ee45e98827e803205d322ce7d, since
the Chelsio cxgb3 driver no longer needs it and the kernel side of
req_notify_cq() doesn't handle user data anyway.
Roland Dreier [Mon, 11 Dec 2006 01:34:18 +0000 (17:34 -0800)]
Implement new method for finding and loading device-specific drivers
Export an ibv_register_driver() entry point, and expect plugins to
call it from __attribute__((constructor)) code. This will allow
multiple drivers to be statically linked in.
Also read config files and then use dlopen() with a relative path to
find drivers (rather than searching a specific lib/infiniband/
directory for .so files). This allows multiple versions of a driver
to be installed in parallel, and also allows for optimized drivers in
places like /lib/i686.
Drivers should no longer export an ibv_driver_init() function any
more. Instead, they should add a function (which can be static) with
__attribute__((constructor)) that calls ibv_register_driver() to
register the driver's probe function. Also, drivers should install a
file with a line "driver <driver name>" under ${sysconfdir}/libibverbs.d.
Steve Wise [Thu, 5 Oct 2006 17:37:35 +0000 (12:37 -0500)]
Support provider response data in reg_mr command
Allow kernel register MR command to pass back driver-specific data to
the userspace driver. The code is there to do this in the kernel, but
not in the libibverbs cmd interface.
Signed-off-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Steve Wise [Thu, 16 Nov 2006 20:06:14 +0000 (14:06 -0600)]
Add async_event callback function to struct ibv_context_ops
Add a callback function so low-level driver libraries can get a
callback with each async event retrieved by the user. It allows the
bypass library to do WQ or CQ processing that needs to happen when a
fatal async event happens. This async callback is similar to the
cq_event callback that already exists in libibverbs.
Signed-off-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Jack Morgenstein [Tue, 31 Oct 2006 05:30:54 +0000 (05:30 +0000)]
Return sq_draining properly from query_qp
Return the sq_draining value back to user space for query_qp instead
of the en_sqd_async notify value. This last is valid only for
modify_qp. For query_qp (according to the IB Spec V1.2), the draining
status should returned.
Signed-off-by: Jack Morgenstein <jackm@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Roland Dreier [Wed, 4 Oct 2006 23:57:10 +0000 (23:57 +0000)]
Add Valgrind annotations
Add basic Valgrind annotations to libibverbs (disabled by default, can
be enabled by configuring with --with-valgrind). These reduce false
positive warnings from the Valgrind memcheck module.
Based on work and suggestions from Rainer Keller <keller@hlrs.de> and
Jeff Squyres <jsquyres@cisco.com>.
Ralph Campbell [Wed, 23 Aug 2006 22:01:20 +0000 (22:01 +0000)]
Add response handling to ibv_cmd_resize_cq()
Add resp and resp_size parameters to ibv_cmd_resize_cq() so that the
low-level driver in the kernel can return device-specific information
from the resize CQ operation.
Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
While comma at end of enumerator list is legal since 1999, some tools
(notably gcc versions pre-4.0) seem to default to 1989 mode when
running with -pedantic flag, and warn about this usage.
Since most of our enums in header files do not have comma at end, its
probably easier to fix the remaining two cases than educate all users
of libibverbs on virtues of C99.
Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Roland Dreier [Tue, 11 Apr 2006 23:27:38 +0000 (23:27 +0000)]
Reduce dependency on libsysfs
Reduce libibverbs dependency on libsysfs by using local functions for
internal sysfs access. libsysfs is still required because of the ABI,
which passes a struct sysfs_class_device * to low-level driver init
functions.
Roland Dreier [Tue, 14 Mar 2006 00:24:55 +0000 (00:24 +0000)]
Use sysfs_open_attribute() and sysfs_read_attribute()
Use sysfs_open_attribute() and sysfs_read_attribute() instead of the
deprecated function sysfs_read_attribute_value(), which is no longer
present in libsysfs2 (which is already in Debian and Ubuntu).
Roland Dreier [Wed, 15 Feb 2006 22:48:01 +0000 (22:48 +0000)]
Add response handling to ibv_cmd_create_qp()
Add resp and resp_size parameters to libibverbs's ibv_cmd_create_qp()
function so that kernel low-level drivers can return private data to
userspace device drivers.
Dotan Barak [Tue, 14 Feb 2006 05:43:28 +0000 (05:43 +0000)]
Report board_id from ibv_devinfo, if present
Signed-off-by: Dotan Barak <dotanb@mellanox.co.il> Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>