Or Gerlitz [Wed, 25 Jul 2007 06:45:16 +0000 (09:45 +0300)]
Document IBV_SEND_INLINE buffer ownership
If the IBV_SEND_INLINE flag is set in a work request posted with
ibv_post_send(), the data buffers can be reused immediately after the
call returns. Document this.
Signed-off-by: Or Gerlitz <ogerlitz@voltaire.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Dotan Barak [Sun, 3 Feb 2008 15:55:04 +0000 (17:55 +0200)]
Fixes for man pages
Some fixes and updates to several man pages:
* Correct formatting in a few places.
* Add more "SEE ALSO" functions where appropriate.
* Document byte order of GUID and P_Key fields.
* Fix example code in ibv_get_cq_event.3
* Document GRH handling on receive.
Signed-off-by: Dotan Barak <dotanb@dev.mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Dotan Barak [Wed, 10 Oct 2007 09:25:18 +0000 (11:25 +0200)]
Fix several valgrind false positives
Fix several issues that were reported by valgrind:
* Initialize reserved attributes of command structures
* Fix the pointer and size when calling VALGRIND_MAKE_MEM_DEFINED in
ibv_cmd_reg_mr() and ibv_cmd_create_cq_v2(): if we have struct
xxx_resp *resp and resp_size, we need to do
Roland Dreier [Thu, 24 Jan 2008 04:04:50 +0000 (20:04 -0800)]
Convert hyphen to minus sign in ibv_query_pkey man page
A bare "-" in a man page will be rendered as a hyphen; to get a minus
sign, "\-" must be used. Very pedantic people (or automatic checkers,
such as Debian's lintian tool) may notice the difference. The man page
for ibv_query_pkey incorrectly wrote a negative return value as "-1".
Fix this to be the correct "\-1".
Roland Dreier [Tue, 20 Nov 2007 21:12:15 +0000 (13:12 -0800)]
Always return valid bad_wr on error from ibv_post_{send,recv,srq_recv}
There are error cases in the kernel's uverbs work request posting
functions where the return value is negative (i.e., an error) and yet a
non-zero resp.bad_wr is not written back to userspace. In this case,
ibv_cmd_post_send() should still set the bad_wr pointer.
Bug pointed out in ibv_post_send() by Ralph Campbell
<ralph.campbell@qlogic.com>, and noticed elsewhere by Dotan Barak
<dotanb@dev.mellanox.co.il>.
Dotan Barak [Wed, 8 Aug 2007 13:27:08 +0000 (16:27 +0300)]
Initialize reserved attributes in modify QP command
Initialize the reserved attributes in modify QP command to eliminate
valgrind warnings like:
==23549== Syscall param write(buf) points to uninitialised byte(s)
==23549== at 0x316B1B933F: (within /lib64/tls/libc-2.3.4.so)
==23549== by 0x4A33AF7: ibv_cmd_modify_qp (cmd.c:782)
==23549== by 0x4F860D8: mlx4_modify_qp (verbs.c:480)
==23549== by 0x4A37A53: ibv_modify_qp@@IBVERBS_1.1 (verbs.c:441)
==23549== by 0x40972E: qp_reset_to_rtr (mr_test_fun.c:1189)
==23549== by 0x403AFC: mr_test_connect_qp (mr_test.c:232)
==23549== by 0x404956: do_test (mr_test.c:85)
==23549== by 0x402DF8: main (main.c:448)
==23549== Address 0x7FEFFF2AE is on thread 1's stack
Signed-off-by: Dotan Barak <dotanb@dev.mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Roland Dreier [Tue, 10 Jul 2007 18:23:18 +0000 (11:23 -0700)]
Fix too-big madvise() call in ibv_madvise_range()
When the first memory range found in ibv_madvise_range() is merged
with the previous range before entering the loop that calls madvise(),
a too-big range could be passed to madvise(). This could lead to
trying to madvise() memory that has already been freed and unmapped,
which causes madvise() and therefore ibv_reg_mr() to fail.
Fix this by making sure we don't madvise() any memory outside the
range passed into ibv_madvise_range().
This fixes <https://bugs.openfabrics.org/show_bug.cgi?id=682>.
Roland Dreier [Tue, 3 Jul 2007 18:53:47 +0000 (11:53 -0700)]
Fix Valgrind annotations so they can actually be built
The AC_CHECK_HEADER() test for <valgrind/memcheck.h> will never result
in HAVE_VALGRIND_MEMCHECK_H being defined, so ibverbs.h will never
include <valgrind/memcheck.h> and Valgrind annotations will never actually
get built. Fix this by adding an AC_DEFINE() of HAVE_VALGRIND_MEMCHECK_H
if the header is found.
Roland Dreier [Tue, 3 Jul 2007 18:48:40 +0000 (11:48 -0700)]
Clean up NVALGRIND comment in config.h.in
Update configure.in so that the comment generated by autoheader for
NVALGRIND in config.h.in is a complete sentence to match the style of
the rest of the file.
For newly created QPs, set qp->state to IBV_QPS_RESET. At least
libmlx4 needs this fix, or else it won't correctly initialize the QP's
send queue when transitioning to INIT.
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
The amount of memory root can lock isn't limited, so the rlimit value
doesn't matter in this case. Do not print a warning about
RLIMIT_MEMLOCK being too low if EUID is 0.
Signed-off-by: Michael S. Tsirkin <mst@dev.mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Roland Dreier [Thu, 3 May 2007 18:09:44 +0000 (11:09 -0700)]
Fix call to ibv_free_device_list() in pingpong examples
When a -d option to specify which device to use is passed to the
pingpong examples, they iterate through the device list by
incrementing the dev_list pointer. This means that the call to
ibv_free_device_list() may not get the right pointer.
Fix this by using an index to iterate through the array and leaving
the dev_list pointer itself alone.
Roland Dreier [Sat, 28 Apr 2007 21:18:43 +0000 (14:18 -0700)]
Update Debian build
Use DEB_AUTO_UPDATE_LIBTOOL rather than manual rerunning autotools to
avoid setting RPATH. Remove DEB_DH_STRIP_ARGS since cdbs should
handle this automatically at debhelper compat level 5. Let cdbs
generate build-deps automatically (move control to control.in).
Roland Dreier [Fri, 6 Apr 2007 14:44:39 +0000 (07:44 -0700)]
Fix ibv_srq_pingpong option handling
Add missing break statement in command line option handling switch.
Without the break statement, setting the 'm' (mtu) command line option
fell through to the next case and the same value was used for the 'q'
(num-qp) option.
Roland Dreier [Fri, 6 Apr 2007 14:44:39 +0000 (07:44 -0700)]
Fix ibv_srq_pingpong option handling
Add missing break statement in command line option handling switch.
Without the break statement, setting the 'm' (mtu) command line option
fell through to the next case and the same value was used for the 'q'
(num-qp) option.
Roland Dreier [Wed, 4 Apr 2007 22:33:02 +0000 (15:33 -0700)]
Clean up spec file
Modernize spec file to better match Fedora guidelines:
- remove unused %ver macro
- fix Release to avoid '-' character
- switch to newer recommendation for BuildRoot
- add Requires(post): /sbin/ldconfig and Requires(postun): /sbin/ldconfig
- split static libraries into new -devel-static package
- don't use %makeinstall
Based on a patch from Doug Ledford <dledford@redhat.com>.
Dotan Barak [Tue, 27 Mar 2007 17:22:43 +0000 (10:22 -0700)]
Man page updates
- Fix spelling mistakes
- Convert "PKey"/"QKey" to "P_Key"/"Q_Key"
- Fix variable names in ibv_get_cq_event() example
- Add non-blocking examples for ibv_get_cq_event() and ibv_get_async_event()
Signed-off-by: Dotan Barak <dotanb@mellanox.co.il>. Signed-off-by: Roland Dreier <rolandd@cisco.com>
Roland Dreier [Tue, 27 Mar 2007 17:04:46 +0000 (10:04 -0700)]
Reference count completion channels
Keep a reference count in completion channel structure, so that
ibv_destroy_comp_channel() can return EBUSY if a consumer tries to
destroy a channel that still has CQs attached.
Roland Dreier [Thu, 8 Mar 2007 18:05:24 +0000 (10:05 -0800)]
Add low-level driver hooks for reregister MR and memory windows
Add methods to struct ibv_context_ops to make it possible to implement
reregister memory region and alloc/bind/dealloc memory window
operations in the future without breaking the libibverbs ABI.
Assuming these methods and data structures are designed properly
(which is hard to say, absent any real implementation) then it will
only be necessary to add new libibverbs functions to call the hooks,
which will be source and binary compatible with existing applications
and low-level drivers. Applications that want to use the new
functions can easily check for their existence at compile time.
Jack Morgenstein [Thu, 22 Feb 2007 18:16:43 +0000 (20:16 +0200)]
Delete man3 symbolic links before creating them during install
The following patch removes manpage symbolic links so that they may be
relinked in the install. Otherwise a second install will fail, since
the links already exist.
Suggested by Michael Tsirkin.
Signed-off-by: Jack Morgenstein <jackm@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Roland Dreier [Tue, 20 Feb 2007 06:34:58 +0000 (22:34 -0800)]
Start adding libibverbs manpages
Add the first few manpages for libibverbs functions in section 3.
Also, add them into the build and add rules to the Makefile to link
shared manpages together (since eg ibv_get_device_list and
ibv_free_device_list have the same manpage). Update Debian and Fedora
packaging to include section 3 manpages in the development package.
These manpages were written by Dotan Barak <dotanb@mellanox.co.il>.
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.
Roland Dreier [Mon, 29 Jan 2007 17:17:50 +0000 (09:17 -0800)]
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>
(cherry picked from commit 8b3d225476c99ea29a68109a7d40e5ef353d4388)
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, 18 Jan 2007 15:13:58 +0000 (07:13 -0800)]
Fix checks of asprintf() return value
asprintf() returns the number of bytes printed, so the way to check
for failure is to test if the return value is < 0.
Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
(cherry picked from commit 2d83a4b522b00ab36ada613920e9cf5594648934)
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 [Mon, 30 Oct 2006 23:06:59 +0000 (23:06 +0000)]
Make device finding work again
Fix operator precedence issues in how libibverbs-1.0 adds devices to
its list. Also change so that devices are reported in the same order
as they were in older versions.
Roland Dreier [Wed, 4 Oct 2006 23:57:10 +0000 (23:57 +0000)]
Add Valgrind annotations
Add basic Valgrind annotations to libibverbs and libmthca (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>.