blob: 015ed3881f05f2abdeb5e91a4173bd772f4d94b4 [file] [log] [blame]
2006-11-09 Roland Dreier <>
* Release version 1.0.3.
2006-10-17 Roland Dreier <>
* src/cq.c, src/qp.c, src/srq.c: Convert existing uses of mb() to
rmb() or wmb() as appropriate. In fact all memory barriers were
really just wmb(), except for the barrier between reading a CQE's
ownership bit and contents, which should be rmb().
* src/mthca.h: Add compatibility defines of rmb()/wmb() so that
libmthca continues to build against old libibverbs releases.
2006-10-03 Roland Dreier <>
* src/cq.c (mthca_poll_one): Annotate so that Valgrind knows
contents of CQ entry are all valid after they are written by HCA.
(set_cqe_hw): Annotate so that CQ entries owned by hardware are
not defined.
* src/mthca.h: Add wrapper for VALGRIND_MAKE_MEM_DEFINED so that
it can be used in .c files without worrying about whether Valgrind
is installed or enabled.
* Add support for Valgrind annotation (enabled with
--with-valgrind option to configure).
* src/verbs.c (mthca_create_qp): Set reserved fields to 0 to avoid
future problems and also to make Valgrind a little quieter.
2006-09-04 Roland Dreier <>
* src/verbs.c (mthca_destroy_qp): Avoid potential AB-BA deadlock
when destroying QPs by always taking CQ locks in a consistent
order (lowest CQN first). The old code always took the send_cq
lock first, which is prone to deadlock if the send_cq of one QP is
the recv_cq of another QP destroyed at the same time. This bug
was pointed out by Dotan Barak and Jack Morgenstein.
2006-08-23 Roland Dreier <>
* src/verbs.c (mthca_resize_cq): Add a test for
IBV_CMD_RESIZE_CQ_HAS_RESP_PARAMS to make libmthca work with newer
libibverbs libraries that add two parameters to ibv_cmd_resize_cq().
2006-08-09 Michael S. Tsirkin <>
* src/qp.c (mthca_tavor_post_send, mthca_arbel_post_send): Fence
bit must be set in both doorbell and WQE.
2006-08-03 Jack Morgenstein <>
* src/mthca.h: Include <stddef.h> to get definition of offsetof().
2006-08-03 Michael S. Tsirkin <>
* src/verbs.c (mthca_create_srq): Limit SRQ max_wr to avoid
integer overflow.
2006-07-26 Roland Dreier <>
* src/mthca.h, src/ah.c, src/cq.c, src/memfree.c, src/qp.c,
src/srq.c, src/verbs.c: Convert internal allocations for AH pages
(for non-memfree HCAs), CQ buffers, doorbell pages (for memfree
HCAs), QP buffers and SRQ buffers to use the new buffer
allocator. This makes libmthca fork()-clean when built against
libibverbs 1.1.
* src/buf.c (mthca_alloc_buf, mthca_free_buf): Add new functions
to wrap up allocating page-aligned buffers. The new functions
will call ibv_dontfork_range()/ibv_dofork_range() to do proper
madvise()ing to handle fork(), if applicable.
* Check for ibv_dontfork_range() and ibv_dontfork_range().
2006-07-04 Dotan Barak <>
* src/verbs.c (mthca_create_cq, mthca_resize_cq): Passing huge
size values to create_cq/resize_cq causes a hang in
align_cq_size(). Fix this by validating input, similiar to what
we do for mthca_create_qp() and mthca_create_srq().
2006-06-13 Roland Dreier <>
* Release version 1.0.2.
2006-06-13 Michael S. Tsirkin <>
* src/cq.c (mthca_poll_one): Add workaround for MemFree FW bug
that causes wrong WQE addr to be reported.
2006-05-24 Roland Dreier <>
* src/mthca.c: If <sysfs/libsysfs.h> is detected, include it
explicitly. This lets things build when sysfs headers are
installed on the build system even when building against
libibverbs 1.1 (which does not include sysfs headers implicitly).
* src/ah.c, src/cq.c, src/memfree.c, src/mthca.c, src/qp.c,
src/srq.c: Add include of <string.h>, since it may no long be
implicitly included from libsysfs headers when building with
libibverbs 1.1.
2006-05-24 Michael S. Tsirkin <>
* src/srq.c (mthca_tavor_post_srq_recv): Fix posting of lists of
receives that have exactly a multiple of 256 entries (same as QP
bug fixed below).
2006-05-22 Roland Dreier <>
*, src/mthca.c (openib_driver_init): Check for the
presence of <sysfs/libsysfs.h>, and if it is not installed, don't
export the old openib_driver_init() entry point.
2006-05-18 Michael S. Tsirkin <>
* src/qp.c (mthca_tavor_post_recv): Fix posting of lists of
receives that have exactly a multiple of 256 entries.
2006-05-08 Jack Morgenstein <>
* src/mthca.c: Add include files needed for open() if
HAVE_IBV_READ_SYSFS_FILE is not defined (so libmthca includes a
private local definition of ibv_read_sysfs_file()).
2006-04-11 Roland Dreier <>
* src/mthca.c (ibv_driver_init, openib_driver_init): Add new
forward-compatible driver entry point. Make old entry point a
simple wrapper for the new one.
2006-03-14 Roland Dreier <>
* Release version 1.0.1.
* (EXTRA_DIST): Remove debian/ directory from
tarballs, since Debian policy is that upstream tarballs should not
include it.
2006-03-13 Roland Dreier <>
* Release version 1.0.
2006-02-27 Dotan Barak <>
* src/qp.c (mthca_tavor_post_send, mthca_arbel_post_send): Add
support for IBV_SEND_FENCE flag.
2006-02-16 Roland Dreier <>
* src/memfree.c (mthca_alloc_db): Introduce a temporary variable
to pass to posix_memalign() to avoid "warning: dereferencing
type-punned pointer will break strict-aliasing rules."
* Release version 1.0-rc7.
2006-02-15 Roland Dreier <>
* src/verbs.c (mthca_create_qp): Update to add new response and
response size parameters for libibverbs ibv_cmd_create_qp().
2006-02-14 Roland Dreier <>
* Release version 1.0-rc6.
2006-02-13 Dotan Barak <>
* src/verbs.c (mthca_query_qp, mthca_query_srq): Add query QP and
query SRQ verbs.
2006-01-31 Roland Dreier <>
* src/mthca.h: Remove useless "extern" from function declarations.
2006-01-30 Michael S. Tsirkin <>
* src/qp.c (mthca_tavor_post_recv, mthca_arbel_post_recv): Pass
recv_cq to wq_overflow() so we lock the correct CQ. Noticed by
Yossi Leybovich.
2006-01-26 Roland Dreier <>
* src/mthca.h, src/verbs.c, src/cq.c, src/mthca.c: Add
implementation of resize CQ operation.
* src/mthca-abi.h: Add mthca-specific resize CQ ABI.
2006-01-22 Roland Dreier <>
* Release version 1.0-rc5.
2006-01-11 Jack Morgenstein <>
* src/verbs.c (mthca_free_pd): Free pointer to correct structure
(we get lucky now, but don't rely on this).
* src/mthca.c (mthca_free_context): Free context's PD so we don't
leak it.
2006-01-06 Michael S. Tsirkin <>
* src/verbs.c (mthca_destroy_qp): Jack Morgenstein has discovered
the following race condition in libmthca:
Thread A destroys QP A at the kernel side by calling
ibv_cmd_destroy_qp, but its time-slice is over before removing it
from the user-space qp_table removal.
Thread B allocates QP B, receiving a QP number that matches the
just-destroyed QP A in the low 16 bits. Thread B will now
over-write the slot in qp_table which was used for QP A.
Thread A wakes up and clears qp_table slot, in effect removing QP
B from qp_table.
As a solution, remove the QP from qp_table before calling
ibv_cmd_destroy_qp. This also makes sense since operations are
performed in the reverse order in create_qp.
* src/cq.c (handle_error_cqe): Fill in vendor_err field for
completions with error.
2006-01-05 Jack Morgenstein <>
* src/verbs.c (mthca_destroy_qp, mthca_destroy_srq): Free QP/SRQ
object to avoid memory leak.
2005-12-15 Jack Morgenstein <>
* src/cq.c (mthca_cq_clean): When cleaning up a CQ, we should free
an SRQ WQE if and only if the CQE is a receive.
2005-12-15 Michael S. Tsirkin <>
* src/qp.c (mthca_store_qp): Don't increment qp_table ref count if
allocation fails.
2005-11-29 Michael S. Tsirkin <>
* src/qp.c (mthca_arbel_post_send): Add handling for posting long
send lists for mem-free HCAs.
* src/qp.c (mthca_tavor_post_recv): Fix posting long receive
lists: nreq is set to zero early on, so we need to use
MTHCA_TAVOR_MAX_WQES_PER_RECV_DB as the increment to rq.head.
2005-11-28 Roland Dreier <>
* src/qp.c (mthca_init_qp_indices): Set qp->sq.last and
qp->rq.last so that QP is fully reset when the indices are
reinited on transition to RESET state.
(mthca_tavor_post_send, mthca_arbel_post_send): Don't create an
inline send segment when a work request is posted that has the
inline flag set but no gather entries included.
2005-11-09 Roland Dreier <>
* src/srq.c (mthca_tavor_post_srq_recv), src/qp.c
(mthca_tavor_post_recv): Fix bugs in long receive list handling;
need to set nreq to 0 and not put 256 credits into the second
doorbell word.
* src/cq.c (mthca_cq_clean): Handle case where CQ indices wrap
around by treating signed comparisons of prod_index and
cq->cons_index carefully.
2005-11-09 Michael S. Tsirkin <>
* src/srq.c (mthca_tavor_post_srq_recv), src/qp.c
(mthca_tavor_post_recv): Tavor requires that a doorbell be rung
at least every 256 receives, so add code to ring doorbells in the
middle of posting a huge list of receives.
* src/qp.c (mthca_tavor_post_send, mthca_tavor_post_send): When
posting atomic operations, could wqe size in "octowords" correctly.
* src/ah.c (mthca_alloc_av): Don't free ah if page allocation
fails. It will be freed where it's allocated, in the caller.
2005-11-08 Roland Dreier <>
* src/qp.c, src/verbs.c, src/mthca.h: Delegate setting of QP
capabilities (max_sge, max_inline_data, etc) to kernel.
2005-11-04 Roland Dreier <>
* src/verbs.c (mthca_destroy_qp): Clean CQEs when we destroy a QP.
(mthca_modify_qp): Clean CQEs when we move a QP to RESET state,
and reset QP index pointers.
* src/cq.c (mthca_cq_clean): Add function to clean out CQEs for
QPs that are being destroyed or reset.
2005-10-30 Roland Dreier <>
* src/srq.c (wqe_to_link): Change to use an offset of 12 (the imm
field), because posting an SRQ WQE may actually change the ee_nds
field and still cause free list corruption. A receive WQE will
never have immediate data, so using imm is definitely safe.
2005-10-25 Roland Dreier <>
* Release version 1.0-rc4.
2005-10-23 Roland Dreier <>
* src/qp.c (mthca_return_cap, mthca_alloc_qp_buf), src/verbs.c
(mthca_create_qp): Explicitly pass QP type to functions used while
creating QP, since we can't rely on ibv_qp.qp_type to be set until
after we return. This fixes breakage with UD QPs introduced in
the last change below.
2005-10-19 Roland Dreier <>
* src/mthca.h, src/verbs.c (mthca_create_qp), src/qp.c
(mthca_tavor_post_send, mthca_arbel_post_send, mthca_alloc_qp_buf,
mthca_return_cap): Eliminate struct mthca_qp.qpt field and use
struct ibv_qp.qp_type instead (now that that field has been added
in libibverbs).
2005-10-18 Roland Dreier <>
* src/cq.c (handle_error_cqe, mthca_poll_one): Dump CQEs for local
QP operation errors instead of all error statuses.
2005-10-06 Roland Dreier <>
* src/srq.c (mthca_free_srq_wqe): Pass index instead of WQE
address. The only caller already has the index handy, so there's
no need to recalculate it here.
* src/srq.c (mthca_tavor_post_srq_recv,
mthca_arbel_post_srq_recv): Add an extra check so that we report
the SRQ as full before using the one extra WQE we need internally.
2005-10-05 Roland Dreier <>
* src/verbs.c (mthca_modify_srq): Fill in mthca_modify_srq().
2005-09-29 Roland Dreier <>
* src/verbs.c (mthca_query_device): Update to match new libibverbs
API that requires device-specific libraries to format firmware version.
2005-09-25 Roland Dreier <>
* src/cq.c, src/mthca.c, src/mthca.h, src/verbs.c: Update to match
new libibverbs API introduced with completion channel implementation.
2005-09-13 Roland Dreier <>
* src/qp.c (mthca_tavor_post_send, mthca_tavor_post_recv,
mthca_arbel_post_send), src/srq.c (mthca_tavor_post_srq_recv):
Apply Michael S. Tsirkin's patch to fix linking of WQEs on
mem-free HCAs. While we're at it, simplify the Tavor WQE posting
code as well -- there's no need for a conditional, just always lik
the previous WQE.
2005-09-07 Roland Dreier <>
* src/mthca.h: Get rid of ntohll() and htonll() now that
libibverbs defines them in <infiniband/arch.h>.
2005-08-31 Roland Dreier <>
* src/memfree.c (mthca_free_db): When we free a doorbell record,
really mark it as free in the free bitmap. This we we don't
eventually run out of doorbells if a consumer creates and frees a
lot of objects.
* src/memfree.c (mthca_alloc_db): Introduce MTHCA_FREE_MAP_SIZE so
that we iterate over the correct number of entries in the mem-free
doorbell record free maps. This fixes some off-by-a-factor-of-8
bugs that could lead to crashes.
* src/verbs.c (mthca_create_cq): In the mem-free case, when
creating a CQ fails to allocate an arm doorbell, make sure we free
the set CI doorbell instead of the (non-existent) arm doorbell.