2006-11-09  Roland Dreier  <rdreier@cisco.com>

	* Release version 1.0.3.

2006-10-17  Roland Dreier  <rdreier@cisco.com>

	* 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  <rdreier@cisco.com>

	* 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.

	* configure.in: 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  <rdreier@cisco.com>

	* 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  <rdreier@cisco.com>

	* 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  <mst@mellanox.co.il>

	* 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  <jackm@mellanox.co.il>

	* src/mthca.h: Include <stddef.h> to get definition of offsetof().

2006-08-03  Michael S. Tsirkin  <mst@mellanox.co.il>

	* src/verbs.c (mthca_create_srq): Limit SRQ max_wr to avoid
	integer overflow.

2006-07-26  Roland Dreier  <rdreier@cisco.com>

	* 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.

	* configure.in: Check for ibv_dontfork_range() and ibv_dontfork_range().

2006-07-04  Dotan Barak  <dotanb@mellanox.co.il>

	* 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  <rdreier@cisco.com>

	* Release version 1.0.2.

2006-06-13  Michael S. Tsirkin  <mst@mellanox.co.il>

	* 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  <rdreier@cisco.com>

	* 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  <mst@mellanox.co.il>

	* 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  <rdreier@cisco.com>

	* configure.in, 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  <mst@mellanox.co.il>

	* 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  <jackm@mellanox.co.il>

	* 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  <rdreier@cisco.com>

	* 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  <rdreier@cisco.com>

	* Release version 1.0.1.

	* Makefile.am (EXTRA_DIST): Remove debian/ directory from
	tarballs, since Debian policy is that upstream tarballs should not
	include it.

2006-03-13  Roland Dreier  <rdreier@cisco.com>

	* Release version 1.0.

2006-02-27  Dotan Barak  <dotanb@mellanox.co.il>

	* src/qp.c (mthca_tavor_post_send, mthca_arbel_post_send): Add
	support for IBV_SEND_FENCE flag.

2006-02-16  Roland Dreier  <rdreier@cisco.com>

	* 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  <rdreier@cisco.com>

	* 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  <rdreier@cisco.com>

	* Release version 1.0-rc6.

2006-02-13  Dotan Barak  <dotanb@mellanox.co.il>

	* src/verbs.c (mthca_query_qp, mthca_query_srq): Add query QP and
	query SRQ verbs.

2006-01-31  Roland Dreier  <rdreier@cisco.com>

	* src/mthca.h: Remove useless "extern" from function declarations.

2006-01-30  Michael S. Tsirkin  <mst@mellanox.co.il>

	* 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  <rdreier@cisco.com>

	* 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  <rdreier@cisco.com>

	* Release version 1.0-rc5.

2006-01-11  Jack Morgenstein  <jackm@mellanox.co.il>

	* 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  <mst@mellanox.co.il>

	* 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  <jackm@mellanox.co.il>

	* src/verbs.c (mthca_destroy_qp, mthca_destroy_srq): Free QP/SRQ
	object to avoid memory leak.

2005-12-15  Jack Morgenstein  <jackm@mellanox.co.il>

	* 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  <mst@mellanox.co.il>

	* src/qp.c (mthca_store_qp): Don't increment qp_table ref count if
	allocation fails.

2005-11-29  Michael S. Tsirkin  <mst@mellanox.co.il>

	* 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  <roland@cisco.com>

	* 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  <roland@cisco.com>

	* 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  <mst@mellanox.co.il>

	* 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  <roland@cisco.com>

	* 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  <roland@cisco.com>

	* 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  <roland@cisco.com>

	* 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  <roland@cisco.com>

	* Release version 1.0-rc4.

2005-10-23  Roland Dreier  <roland@cisco.com>

	* 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  <roland@cisco.com>

	* 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  <roland@cisco.com>

	* 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  <roland@cisco.com>

	* 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  <roland@cisco.com>

	* src/verbs.c (mthca_modify_srq): Fill in mthca_modify_srq().

2005-09-29  Roland Dreier  <roland@cisco.com>

	* 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  <roland@cisco.com>

	* 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  <roland@cisco.com>

	* 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  <roland@cisco.com>

	* src/mthca.h: Get rid of ntohll() and htonll() now that
	libibverbs defines them in <infiniband/arch.h>.

2005-08-31  Roland Dreier  <roland@cisco.com>

	* 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.
