[openib-general] [PATCH 1/3] kDAPL: consolidate dapl_srq*.c into one file

Tom Duffy tduffy at sun.com
Thu May 26 11:47:33 PDT 2005


Signed-off-by: Tom Duffy <tduffy at sun.com>

Index: linux-kernel-srq/dat-provider/dapl_srq.c
===================================================================
--- linux-kernel-srq/dat-provider/dapl_srq.c	(revision 0)
+++ linux-kernel-srq/dat-provider/dapl_srq.c	(revision 0)
@@ -0,0 +1,500 @@
+/*
+ * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved.
+ *
+ * This Software is licensed under one of the following licenses:
+ *
+ * 1) under the terms of the "Common Public License 1.0" a copy of which is
+ *    available from the Open Source Initiative, see
+ *    http://www.opensource.org/licenses/cpl.php.
+ *
+ * 2) under the terms of the "The BSD License" a copy of which is
+ *    available from the Open Source Initiative, see
+ *    http://www.opensource.org/licenses/bsd-license.php.
+ *
+ * 3) under the terms of the "GNU General Public License (GPL) Version 2" a
+ *    copy of which is available from the Open Source Initiative, see
+ *    http://www.opensource.org/licenses/gpl-license.php.
+ *
+ * Licensee has the right to choose one of the above licenses.
+ *
+ * Redistributions of source code must retain the above copyright
+ * notice and one of the license notices.
+ *
+ * Redistributions in binary form must reproduce both the above copyright
+ * notice, one of the license notices in the documentation
+ * and/or other materials provided with the distribution.
+ */
+
+/*
+ * $Id$
+ */
+
+#include "dapl.h"
+#include "dapl_ia_util.h"
+#include "dapl_openib_util.h"
+#include "dapl_cookie.h"
+
+/*
+ * dapl_srq_dealloc
+ *
+ * Free the passed in SRQ structure.
+ *
+ * Input:
+ * 	SRQ pointer
+ *
+ * Output:
+ * 	none
+ *
+ * Returns:
+ * 	none
+ *
+ */
+static void dapl_srq_dealloc(struct dapl_srq *srq_ptr)
+{
+	dapl_os_assert(srq_ptr->header.magic == DAPL_MAGIC_SRQ);
+
+	/* reset magic to prevent reuse */
+	srq_ptr->header.magic = DAPL_MAGIC_INVALID;
+	dapl_ia_unlink_srq(srq_ptr->header.owner_ia, srq_ptr);
+	dapl_cb_free(&srq_ptr->recv_buffer);
+	/* no need to destroy srq_ptr->header.lock */
+
+	kfree(srq_ptr);
+}
+
+/*
+ * dapl_srq_alloc
+ *
+ * alloc and initialize an SRQ struct
+ *
+ * Input:
+ * 	IA INFO struct ptr
+ *	SRQ ATTR ptr
+ *
+ * Output:
+ * 	none
+ *
+ * Returns:
+ * 	pointer to srq
+ *
+ */
+static struct dapl_srq *dapl_srq_alloc(struct dapl_ia *ia_ptr,
+				       const struct dat_srq_attr *srq_attr)
+{
+	struct dapl_srq *srq_ptr;
+
+	/* Allocate SRQ */
+	srq_ptr = kmalloc(sizeof *srq_ptr, GFP_ATOMIC);
+	if (!srq_ptr)
+		goto bail;
+
+	/* zero the structure */
+	memset(srq_ptr, 0, sizeof *srq_ptr);
+
+	/*
+	 * initialize the header
+	 */
+	srq_ptr->header.provider = ia_ptr->header.provider;
+	srq_ptr->header.magic = DAPL_MAGIC_SRQ;
+	srq_ptr->header.handle_type = DAT_HANDLE_TYPE_SRQ;
+	srq_ptr->header.owner_ia = ia_ptr;
+	srq_ptr->header.user_context.as_64 = 0;
+	srq_ptr->header.user_context.as_ptr = NULL;
+	atomic_set(&srq_ptr->srq_ref_count, 0);
+
+	dapl_llist_init_entry(&srq_ptr->header.ia_list_entry);
+	spin_lock_init(&srq_ptr->header.lock);
+
+	/*
+	 * Initialize the body. 
+	 * XXX Assume srq_attrs is required
+	 */
+	srq_ptr->param.max_recv_dtos = srq_attr->max_recv_dtos;
+	srq_ptr->param.max_recv_iov = srq_attr->max_recv_iov;
+	srq_ptr->param.low_watermark = srq_attr->low_watermark;
+
+	/* Get a cookie buffer to track outstanding recvs */
+	if (DAT_SUCCESS != dapl_cb_create(&srq_ptr->recv_buffer,
+					 (struct dapl_ep *)srq_ptr,
+					  srq_ptr->param.max_recv_dtos)) {
+		dapl_srq_dealloc(srq_ptr);
+		srq_ptr = NULL;
+		goto bail;
+	}
+
+bail:
+	return srq_ptr;
+}
+
+/*
+ * dapl_srq_create
+ *
+ * Create an instance of a Shared Receive Queue that is provided to the
+ * consumer at srq_handle.
+ *
+ * Input:
+ *	ia_handle
+ *	pz_handle
+ *	srq_attr
+ *
+ * Output:
+ *	srq_handle
+ *
+ * Returns:
+ *	DAT_SUCCESS
+ *	DAT_INSUFFICIENT_RESOURCES
+ *	DAT_INVALID_HANDLE
+ *	DAT_INVALID_PARAMETER
+ *	?DAT_INVALID_ATTRIBUTE??
+ *	DAT_MODEL_NOT_SUPPORTED
+ */
+u32 dapl_srq_create(DAT_IA_HANDLE ia_handle, DAT_PZ_HANDLE pz_handle,
+		    struct dat_srq_attr *srq_attr, DAT_SRQ_HANDLE *srq_handle)
+{
+	struct dapl_ia *ia_ptr;
+	struct dapl_srq *srq_ptr;
+	u32 status = DAT_SUCCESS;
+
+	dapl_dbg_log(DAPL_DBG_TYPE_API,
+		     "dapl_srq_create (%p, %p, %p, %p)\n",
+		     ia_handle, pz_handle, srq_attr, srq_handle);
+
+	ia_ptr = (struct dapl_ia *)ia_handle;
+
+	/*
+	 * Verify parameters
+	 */
+	if (DAPL_BAD_HANDLE(ia_ptr, DAPL_MAGIC_IA)) {
+		status = DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_IA);
+		goto bail;
+	}
+
+	/*
+	 * Verify non-required parameters.
+	 * N.B. Assumption: any parameter that can be
+	 *      modified by dat_ep_modify() is not strictly
+	 *      required when the EP is created
+	 */
+	if (pz_handle != NULL && DAPL_BAD_HANDLE(pz_handle, DAPL_MAGIC_PZ)) {
+		status = DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_PZ);
+		goto bail;
+	}
+
+	if (srq_handle == NULL) {
+		status = DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG4);
+		goto bail;
+	}
+	if ((unsigned long)srq_attr & 3) {
+		status = DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG3);
+		goto bail;
+	}
+
+	/* Allocate SRQ */
+	srq_ptr = dapl_srq_alloc(ia_ptr, srq_attr);
+	if (srq_ptr == NULL) {
+		status = DAT_ERROR(DAT_INSUFFICIENT_RESOURCES,
+				   DAT_RESOURCE_MEMORY);
+		goto bail;
+	}
+
+	srq_ptr->param.ia_handle = (DAT_IA_HANDLE) ia_ptr;
+	srq_ptr->param.srq_state = DAT_SRQ_STATE_OPERATIONAL;
+	srq_ptr->param.pz_handle = pz_handle;
+
+	/*
+	 * XXX Allocate provider resource here!!!
+	 */
+	/* XXX */ status = DAT_ERROR(DAT_NOT_IMPLEMENTED, DAT_NO_SUBTYPE);
+	/* XXX */ dapl_srq_dealloc(srq_ptr);
+	/* XXX */ goto bail;
+
+	/* Link it onto the IA */
+	dapl_ia_link_srq(ia_ptr, srq_ptr);
+
+	*srq_handle = srq_ptr;
+
+bail:
+	return status;
+}
+
+/*
+ * dapl_srq_free
+ *
+ * Destroy an instance of an SRQ
+ *
+ * Input:
+ *	srq_handle
+ *
+ * Output:
+ *	none
+ *
+ * Returns:
+ *	DAT_SUCCESS
+ *	DAT_INVALID_PARAMETER
+ *	DAT_INVALID_STATE
+ */
+u32 dapl_srq_free(DAT_SRQ_HANDLE srq_handle)
+{
+	struct dapl_srq *srq_ptr;
+	struct dapl_ia *ia_ptr;
+	struct dat_srq_param *param;
+	u32 status = DAT_SUCCESS;
+
+	dapl_dbg_log(DAPL_DBG_TYPE_API, "dapl_srq_free (%p)\n", srq_handle);
+
+	srq_ptr = (struct dapl_srq *)srq_handle;
+	param = &srq_ptr->param;
+
+	/*
+	 * Verify parameter & state
+	 */
+	if (DAPL_BAD_HANDLE(srq_ptr, DAPL_MAGIC_SRQ)) {
+		status = DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_SRQ);
+		goto bail;
+	}
+
+	if (atomic_read(&srq_ptr->srq_ref_count) != 0) {
+		/*
+		 * The DAPL 1.2 spec says to return DAT_SRQ_IN_USE, which does
+		 * not exist. Have filed the following as an eratta.
+		 */
+		status = DAT_ERROR(DAT_INVALID_STATE,
+				   DAT_INVALID_STATE_SRQ_IN_USE);
+		goto bail;
+	}
+
+	ia_ptr = srq_ptr->header.owner_ia;
+
+	/*
+	 * Do verification of parameters and the state change atomically.
+	 */
+	spin_lock_irqsave(&srq_ptr->header.lock, srq_ptr->header.flags);
+
+	/* Remove the SRQ from the IA */
+	dapl_ia_unlink_srq(ia_ptr, srq_ptr);
+
+	spin_unlock_irqrestore(&srq_ptr->header.lock, srq_ptr->header.flags);
+
+	/*
+	 * Finish tearing everything down.
+	 */
+
+	/*
+	 * Take care of the transport resource
+	 */
+
+	/* XXX Put provider code here!!! */
+
+	/* Free the resource */
+	dapl_srq_dealloc(srq_ptr);
+
+bail:
+	return status;
+
+}
+
+/*
+ * dapl_srq_post_recv
+ *
+ * Post a receive buffer that can be used by any incoming
+ * message by any connected EP using the SRQ. Request to receive data
+ * over a connection of any ep handle into local_iov
+ *
+ * Input:
+ * 	srq_handle
+ * 	num_segments
+ * 	local_iov
+ * 	user_cookie
+ *
+ * Output:
+ * 	None.
+ *
+ * Returns:
+ * 	DAT_SUCCESS
+ * 	DAT_INSUFFICIENT_RESOURCES
+ * 	DAT_INVALID_PARAMETER
+ * 	DAT_INVALID_HANDLE
+ * 	DAT_INVALID_STATE
+ * 	DAT_PROTECTION_VIOLATION
+ * 	DAT_PROVILEGES_VIOLATION
+ */
+u32 dapl_srq_post_recv(DAT_SRQ_HANDLE srq_handle, int num_segments,
+		       struct dat_lmr_triplet *local_iov,
+		       DAT_DTO_COOKIE user_cookie)
+{
+	struct dapl_srq *srq_ptr;
+	struct dapl_cookie *cookie;
+	u32 status;
+
+	dapl_dbg_log(DAPL_DBG_TYPE_API,
+		     "dapl_srq_post_recv (%p, %d, %p, %P)\n",
+		     srq_handle, num_segments, local_iov, user_cookie.as_64);
+
+	if (DAPL_BAD_HANDLE(srq_handle, DAPL_MAGIC_SRQ)) {
+		status = DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_SRQ);
+		goto bail;
+	}
+
+	srq_ptr = (struct dapl_srq *)srq_handle;
+
+	/*
+	 * Synchronization ok since this buffer is only used for receive
+	 * requests, which aren't allowed to race with each other. The
+	 * app must syncronize access to the SRQ.
+	 */
+	status = dapl_dto_cookie_alloc(&srq_ptr->recv_buffer,
+				       DAPL_DTO_TYPE_RECV,
+				       user_cookie, &cookie);
+	if (DAT_SUCCESS != status)
+		goto bail;
+
+	/*
+	 * Take reference before posting to avoid race conditions with
+	 * completions
+	 */
+	atomic_inc(&srq_ptr->recv_count);
+
+	/*
+	 * Invoke provider specific routine to post DTO
+	 */
+	/* XXX Put code here XXX */
+	/* XXX */ status = DAT_ERROR(DAT_NOT_IMPLEMENTED, DAT_NO_SUBTYPE);
+
+	if (status != DAT_SUCCESS) {
+		atomic_dec(&srq_ptr->recv_count);
+		dapl_cookie_dealloc(&srq_ptr->recv_buffer, cookie);
+	}
+
+bail:
+	return status;
+}
+
+u32 dapl_srq_query(DAT_SRQ_HANDLE srq_handle, struct dat_srq_param *srq_param)
+{
+	struct dapl_srq *srq_ptr;
+	u32 status = DAT_SUCCESS;
+
+	dapl_dbg_log(DAPL_DBG_TYPE_API,
+		     "dapl_srq_query (%p, %x, %p)\n",
+		     srq_handle, srq_param);
+
+	if (DAPL_BAD_HANDLE(srq_handle, DAPL_MAGIC_SRQ)) {
+		status = DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_SRQ);
+		goto bail;
+	}
+	if (srq_param == NULL) {
+		status = DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG3);
+		goto bail;
+	}
+
+	srq_ptr = (struct dapl_srq *)srq_handle;
+
+	/*
+	 * XXX Need to calculate available_dto_count and outstanding_dto_count
+	 */
+	srq_ptr->param.available_dto_count = DAT_VALUE_UNKNOWN;
+	srq_ptr->param.outstanding_dto_count = DAT_VALUE_UNKNOWN;
+
+	*srq_param = srq_ptr->param;
+
+bail:
+	return status;
+}
+
+/*
+ * dapl_srq_resize
+ *
+ * Modify the size fo the event queue of a Shared Recieve Queue
+ *
+ * Input:
+ * 	srq_handle
+ * 	srq_max_recv_dto
+ *
+ * Output:
+ * 	none
+ *
+ * Returns:
+ * 	DAT_SUCCESS
+ * 	DAT_INVALID_HANDLE
+ * 	DAT_INVALID_PARAMETER
+ * 	DAT_INSUFFICIENT_RESOURCES
+ * 	DAT_INVALID_STATE
+ */
+
+u32 dapl_srq_resize(DAT_SRQ_HANDLE srq_handle, int srq_max_recv_dto)
+{
+	struct dapl_ia *ia_ptr;
+	struct dapl_srq *srq_ptr;
+	u32 status = DAT_SUCCESS;
+
+	dapl_dbg_log(DAPL_DBG_TYPE_API, "dapl_srq_resize (%p, %d)\n",
+		     srq_handle, srq_max_recv_dto);
+
+	if (DAPL_BAD_HANDLE(srq_handle, DAPL_MAGIC_SRQ)) {
+		status = DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_SRQ);
+		goto bail;
+	}
+
+	srq_ptr = (struct dapl_srq *)srq_handle;
+	ia_ptr = srq_ptr->header.owner_ia;
+
+	/*
+	 * Check for nonsense requests per the spec
+	 */
+	if (srq_max_recv_dto <= srq_ptr->param.low_watermark) {
+		status = DAT_ERROR(DAT_INVALID_STATE, DAT_NO_SUBTYPE);
+		goto bail;
+	}
+
+	/* XXX Put implementation here XXX */
+
+	/* XXX */ status = DAT_ERROR(DAT_NOT_IMPLEMENTED, DAT_NO_SUBTYPE);
+
+bail:
+	return status;
+}
+
+/*
+ * dapl_srq_set_lw
+ *
+ * DAPL Requirements Version 1.2, 6.5.4
+ *
+ * Set the low water mark for an SRQ and arm the SRQ to generate an
+ * event if it is reached.
+ *
+ * Input:
+ * 	srq_handle
+ * 	srq_max_recv_dto
+ *
+ * Output:
+ * 	none
+ *
+ * Returns:
+ * 	DAT_SUCCESS
+ * 	DAT_INVALID_HANDLE
+ * 	DAT_INVALID_PARAMETER
+ * 	DAT_MODEL_NOT_SUPPORTED
+ */
+
+u32 dapl_srq_set_lw(DAT_SRQ_HANDLE srq_handle, int low_watermark)
+{
+	struct dapl_srq *srq_ptr;
+	u32 status = DAT_SUCCESS;
+
+	dapl_dbg_log(DAPL_DBG_TYPE_API, "dapl_srq_set_lw (%p, %d)\n",
+		     srq_handle, low_watermark);
+
+	if (DAPL_BAD_HANDLE(srq_handle, DAPL_MAGIC_SRQ)) {
+		status = DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_SRQ);
+		goto bail;
+	}
+
+	srq_ptr = (struct dapl_srq *)srq_handle;
+
+	/* XXX Put implementation here XXX */
+
+	/* XXX */ status = DAT_ERROR(DAT_NOT_IMPLEMENTED, DAT_NO_SUBTYPE);
+
+bail:
+	return status;
+}
Index: linux-kernel-srq/dat-provider/dapl_srq_resize.c
===================================================================
--- linux-kernel-srq/dat-provider/dapl_srq_resize.c	(revision 2489)
+++ linux-kernel-srq/dat-provider/dapl_srq_resize.c	(working copy)
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved.
- *
- * This Software is licensed under one of the following licenses:
- *
- * 1) under the terms of the "Common Public License 1.0" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/cpl.php.
- *
- * 2) under the terms of the "The BSD License" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/bsd-license.php.
- *
- * 3) under the terms of the "GNU General Public License (GPL) Version 2" a
- *    copy of which is available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/gpl-license.php.
- *
- * Licensee has the right to choose one of the above licenses.
- *
- * Redistributions of source code must retain the above copyright
- * notice and one of the license notices.
- *
- * Redistributions in binary form must reproduce both the above copyright
- * notice, one of the license notices in the documentation
- * and/or other materials provided with the distribution.
- */
-
-/*
- * $Id$
- */
-
-#include "dapl.h"
-#include "dapl_srq_util.h"
-#include "dapl_openib_util.h"
-
-/*
- * dapl_srq_resize
- *
- * Modify the size fo the event queue of a Shared Recieve Queue
- *
- * Input:
- * 	srq_handle
- * 	srq_max_recv_dto
- *
- * Output:
- * 	none
- *
- * Returns:
- * 	DAT_SUCCESS
- * 	DAT_INVALID_HANDLE
- * 	DAT_INVALID_PARAMETER
- * 	DAT_INSUFFICIENT_RESOURCES
- * 	DAT_INVALID_STATE
- */
-
-u32 dapl_srq_resize(DAT_SRQ_HANDLE srq_handle, int srq_max_recv_dto)
-{
-	struct dapl_ia *ia_ptr;
-	struct dapl_srq *srq_ptr;
-	u32 dat_status = DAT_SUCCESS;
-
-	dapl_dbg_log(DAPL_DBG_TYPE_API, "dapl_srq_resize (%p, %d)\n",
-		     srq_handle, srq_max_recv_dto);
-
-	if (DAPL_BAD_HANDLE(srq_handle, DAPL_MAGIC_SRQ)) {
-		dat_status =
-		    DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_SRQ);
-		goto bail;
-	}
-
-	srq_ptr = (struct dapl_srq *)srq_handle;
-	ia_ptr = srq_ptr->header.owner_ia;
-
-	/*
-	 * Check for nonsense requests per the spec
-	 */
-	if (srq_max_recv_dto <= srq_ptr->param.low_watermark) {
-		dat_status = DAT_ERROR(DAT_INVALID_STATE, DAT_NO_SUBTYPE);
-		goto bail;
-	}
-
-	/* XXX Put implementation here XXX */
-
-	/* XXX */ dat_status = DAT_ERROR(DAT_NOT_IMPLEMENTED, DAT_NO_SUBTYPE);
-
-      bail:
-	return dat_status;
-}
Index: linux-kernel-srq/dat-provider/dapl_srq_create.c
===================================================================
--- linux-kernel-srq/dat-provider/dapl_srq_create.c	(revision 2489)
+++ linux-kernel-srq/dat-provider/dapl_srq_create.c	(working copy)
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved.
- *
- * This Software is licensed under one of the following licenses:
- *
- * 1) under the terms of the "Common Public License 1.0" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/cpl.php.
- *
- * 2) under the terms of the "The BSD License" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/bsd-license.php.
- *
- * 3) under the terms of the "GNU General Public License (GPL) Version 2" a
- *    copy of which is available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/gpl-license.php.
- *
- * Licensee has the right to choose one of the above licenses.
- *
- * Redistributions of source code must retain the above copyright
- * notice and one of the license notices.
- *
- * Redistributions in binary form must reproduce both the above copyright
- * notice, one of the license notices in the documentation
- * and/or other materials provided with the distribution.
- */
-
-/*
- * $Id$
- */
-
-#include "dapl.h"
-#include "dapl_ia_util.h"
-#include "dapl_srq_util.h"
-#include "dapl_openib_util.h"
-
-/*
- * dapl_srq_create
- *
- * Create an instance of a Shared Receive Queue that is provided to the
- * consumer at srq_handle.
- *
- * Input:
- *	ia_handle
- *	pz_handle
- *	srq_attr
- *
- * Output:
- *	srq_handle
- *
- * Returns:
- *	DAT_SUCCESS
- *	DAT_INSUFFICIENT_RESOURCES
- *	DAT_INVALID_HANDLE
- *	DAT_INVALID_PARAMETER
- *	?DAT_INVALID_ATTRIBUTE??
- *	DAT_MODEL_NOT_SUPPORTED
- */
-u32 dapl_srq_create(DAT_IA_HANDLE ia_handle, DAT_PZ_HANDLE pz_handle,
-		    struct dat_srq_attr *srq_attr, DAT_SRQ_HANDLE *srq_handle)
-{
-	struct dapl_ia *ia_ptr;
-	struct dapl_srq *srq_ptr;
-	u32 dat_status = DAT_SUCCESS;
-
-	dapl_dbg_log(DAPL_DBG_TYPE_API,
-		     "dapl_srq_create (%p, %p, %p, %p)\n",
-		     ia_handle, pz_handle, srq_attr, srq_handle);
-
-	ia_ptr = (struct dapl_ia *)ia_handle;
-
-	/*
-	 * Verify parameters
-	 */
-	if (DAPL_BAD_HANDLE(ia_ptr, DAPL_MAGIC_IA)) {
-		dat_status =
-		    DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_IA);
-		goto bail;
-	}
-
-	/*
-	 * Verify non-required parameters.
-	 * N.B. Assumption: any parameter that can be
-	 *      modified by dat_ep_modify() is not strictly
-	 *      required when the EP is created
-	 */
-	if (pz_handle != NULL && DAPL_BAD_HANDLE(pz_handle, DAPL_MAGIC_PZ)) {
-		dat_status =
-		    DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_PZ);
-		goto bail;
-	}
-
-	if (srq_handle == NULL) {
-		dat_status = DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG4);
-		goto bail;
-	}
-	if ((unsigned long)srq_attr & 3) {
-		dat_status = DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG3);
-		goto bail;
-	}
-
-	/* Allocate SRQ */
-	srq_ptr = dapl_srq_alloc(ia_ptr, srq_attr);
-	if (srq_ptr == NULL) {
-		dat_status =
-		    DAT_ERROR(DAT_INSUFFICIENT_RESOURCES, DAT_RESOURCE_MEMORY);
-		goto bail;
-	}
-
-	srq_ptr->param.ia_handle = (DAT_IA_HANDLE) ia_ptr;
-	srq_ptr->param.srq_state = DAT_SRQ_STATE_OPERATIONAL;
-	srq_ptr->param.pz_handle = pz_handle;
-
-	/*
-	 * XXX Allocate provider resource here!!!
-	 */
-	/* XXX */ dat_status = DAT_ERROR(DAT_NOT_IMPLEMENTED, DAT_NO_SUBTYPE);
-	/* XXX */ dapl_srq_dealloc(srq_ptr);
-	/* XXX */ goto bail;
-
-	/* Link it onto the IA */
-	dapl_ia_link_srq(ia_ptr, srq_ptr);
-
-	*srq_handle = srq_ptr;
-
-      bail:
-	return dat_status;
-}
Index: linux-kernel-srq/dat-provider/dapl_srq_query.c
===================================================================
--- linux-kernel-srq/dat-provider/dapl_srq_query.c	(revision 2489)
+++ linux-kernel-srq/dat-provider/dapl_srq_query.c	(working copy)
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved.
- *
- * This Software is licensed under one of the following licenses:
- *
- * 1) under the terms of the "Common Public License 1.0" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/cpl.php.
- *
- * 2) under the terms of the "The BSD License" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/bsd-license.php.
- *
- * 3) under the terms of the "GNU General Public License (GPL) Version 2" a
- *    copy of which is available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/gpl-license.php.
- *
- * Licensee has the right to choose one of the above licenses.
- *
- * Redistributions of source code must retain the above copyright
- * notice and one of the license notices.
- *
- * Redistributions in binary form must reproduce both the above copyright
- * notice, one of the license notices in the documentation
- * and/or other materials provided with the distribution.
- */
-
-/*
- * $Id$
- */
-
-#include "dapl.h"
-
-u32 dapl_srq_query(DAT_SRQ_HANDLE srq_handle, struct dat_srq_param *srq_param)
-{
-	struct dapl_srq *srq_ptr;
-	u32 dat_status = DAT_SUCCESS;
-
-	dapl_dbg_log(DAPL_DBG_TYPE_API,
-		     "dapl_srq_query (%p, %x, %p)\n",
-		     srq_handle, srq_param);
-
-	if (DAPL_BAD_HANDLE(srq_handle, DAPL_MAGIC_SRQ)) {
-		dat_status =
-		    DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_SRQ);
-		goto bail;
-	}
-	if (srq_param == NULL) {
-		dat_status = DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG3);
-		goto bail;
-	}
-
-	srq_ptr = (struct dapl_srq *)srq_handle;
-
-	/*
-	 * XXX Need to calculate available_dto_count and outstanding_dto_count
-	 */
-	srq_ptr->param.available_dto_count = DAT_VALUE_UNKNOWN;
-	srq_ptr->param.outstanding_dto_count = DAT_VALUE_UNKNOWN;
-
-	*srq_param = srq_ptr->param;
-
-      bail:
-	return dat_status;
-}
Index: linux-kernel-srq/dat-provider/Makefile
===================================================================
--- linux-kernel-srq/dat-provider/Makefile	(revision 2489)
+++ linux-kernel-srq/dat-provider/Makefile	(working copy)
@@ -82,13 +82,7 @@ PROVIDER_MODULES := \
         dapl_rsp_query                	\
         dapl_set_consumer_context     	\
         dapl_sp_util                  	\
-        dapl_srq_create               	\
-        dapl_srq_free                 	\
-        dapl_srq_post_recv            	\
-        dapl_srq_query                	\
-        dapl_srq_resize               	\
-        dapl_srq_set_lw               	\
-        dapl_srq_util                 	\
+        dapl_srq                 	\
         dapl_timer_util 		\
 	dapl_util
 
Index: linux-kernel-srq/dat-provider/dapl_srq_util.c
===================================================================
--- linux-kernel-srq/dat-provider/dapl_srq_util.c	(revision 2489)
+++ linux-kernel-srq/dat-provider/dapl_srq_util.c	(working copy)
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved.
- *
- * This Software is licensed under one of the following licenses:
- *
- * 1) under the terms of the "Common Public License 1.0" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/cpl.php.
- *
- * 2) under the terms of the "The BSD License" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/bsd-license.php.
- *
- * 3) under the terms of the "GNU General Public License (GPL) Version 2" a
- *    copy of which is available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/gpl-license.php.
- *
- * Licensee has the right to choose one of the above licenses.
- *
- * Redistributions of source code must retain the above copyright
- * notice and one of the license notices.
- *
- * Redistributions in binary form must reproduce both the above copyright
- * notice, one of the license notices in the documentation
- * and/or other materials provided with the distribution.
- */
-
-/*
- * $Id$
- */
-
-#include "dapl_srq_util.h"
-#include "dapl_ia_util.h"
-#include "dapl_cookie.h"
-
-/*
- * dapl_srq_alloc
- *
- * alloc and initialize an SRQ struct
- *
- * Input:
- * 	IA INFO struct ptr
- *	SRQ ATTR ptr
- *
- * Output:
- * 	none
- *
- * Returns:
- * 	pointer to srq
- *
- */
-struct dapl_srq *dapl_srq_alloc(struct dapl_ia *ia_ptr,
-				const struct dat_srq_attr *srq_attr)
-{
-	struct dapl_srq *srq_ptr;
-
-	/* Allocate SRQ */
-	srq_ptr = kmalloc(sizeof *srq_ptr, GFP_ATOMIC);
-	if (!srq_ptr)
-		goto bail;
-
-	/* zero the structure */
-	memset(srq_ptr, 0, sizeof *srq_ptr);
-
-	/*
-	 * initialize the header
-	 */
-	srq_ptr->header.provider = ia_ptr->header.provider;
-	srq_ptr->header.magic = DAPL_MAGIC_SRQ;
-	srq_ptr->header.handle_type = DAT_HANDLE_TYPE_SRQ;
-	srq_ptr->header.owner_ia = ia_ptr;
-	srq_ptr->header.user_context.as_64 = 0;
-	srq_ptr->header.user_context.as_ptr = NULL;
-	atomic_set(&srq_ptr->srq_ref_count, 0);
-
-	dapl_llist_init_entry(&srq_ptr->header.ia_list_entry);
-	spin_lock_init(&srq_ptr->header.lock);
-
-	/*
-	 * Initialize the body. 
-	 * XXX Assume srq_attrs is required
-	 */
-	srq_ptr->param.max_recv_dtos = srq_attr->max_recv_dtos;
-	srq_ptr->param.max_recv_iov = srq_attr->max_recv_iov;
-	srq_ptr->param.low_watermark = srq_attr->low_watermark;
-
-	/* Get a cookie buffer to track outstanding recvs */
-	if (DAT_SUCCESS != dapl_cb_create(&srq_ptr->recv_buffer,
-					 (struct dapl_ep *)srq_ptr,
-					  srq_ptr->param.max_recv_dtos)) {
-		dapl_srq_dealloc(srq_ptr);
-		srq_ptr = NULL;
-		goto bail;
-	}
-
-bail:
-	return srq_ptr;
-}
-
-/*
- * dapl_srq_dealloc
- *
- * Free the passed in SRQ structure.
- *
- * Input:
- * 	SRQ pointer
- *
- * Output:
- * 	none
- *
- * Returns:
- * 	none
- *
- */
-void dapl_srq_dealloc(struct dapl_srq *srq_ptr)
-{
-	dapl_os_assert(srq_ptr->header.magic == DAPL_MAGIC_SRQ);
-
-	/* reset magic to prevent reuse */
-	srq_ptr->header.magic = DAPL_MAGIC_INVALID;
-	dapl_ia_unlink_srq(srq_ptr->header.owner_ia, srq_ptr);
-	dapl_cb_free(&srq_ptr->recv_buffer);
-	/* no need to destroy srq_ptr->header.lock */
-
-	kfree(srq_ptr);
-}
Index: linux-kernel-srq/dat-provider/dapl_srq_util.h
===================================================================
--- linux-kernel-srq/dat-provider/dapl_srq_util.h	(revision 2489)
+++ linux-kernel-srq/dat-provider/dapl_srq_util.h	(working copy)
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved.
- *
- * This Software is licensed under one of the following licenses:
- *
- * 1) under the terms of the "Common Public License 1.0" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/cpl.php.
- *
- * 2) under the terms of the "The BSD License" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/bsd-license.php.
- *
- * 3) under the terms of the "GNU General Public License (GPL) Version 2" a
- *    copy of which is available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/gpl-license.php.
- *
- * Licensee has the right to choose one of the above licenses.
- *
- * Redistributions of source code must retain the above copyright
- * notice and one of the license notices.
- *
- * Redistributions in binary form must reproduce both the above copyright
- * notice, one of the license notices in the documentation
- * and/or other materials provided with the distribution.
- */
-
-/**********************************************************************
- * 
- * HEADER: dapl_srq_util.h
- *
- * PURPOSE: Utility defs & routines for the SRQ data structure
- *
- * $Id$
- **********************************************************************/
-
-#ifndef DAPL_SRQ_UTIL_H
-#define DAPL_SRQ_UTIL_H
-
-#include "dapl.h"
-
-extern struct dapl_srq *dapl_srq_alloc(struct dapl_ia *ia,
-				       const struct dat_srq_attr *srq_attr);
-
-extern void dapl_srq_dealloc(struct dapl_srq *srq_ptr);
-
-#endif /* DAPL_SRQ_UTIL_H */
Index: linux-kernel-srq/dat-provider/dapl_srq_set_lw.c
===================================================================
--- linux-kernel-srq/dat-provider/dapl_srq_set_lw.c	(revision 2489)
+++ linux-kernel-srq/dat-provider/dapl_srq_set_lw.c	(working copy)
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved.
- *
- * This Software is licensed under one of the following licenses:
- *
- * 1) under the terms of the "Common Public License 1.0" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/cpl.php.
- *
- * 2) under the terms of the "The BSD License" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/bsd-license.php.
- *
- * 3) under the terms of the "GNU General Public License (GPL) Version 2" a
- *    copy of which is available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/gpl-license.php.
- *
- * Licensee has the right to choose one of the above licenses.
- *
- * Redistributions of source code must retain the above copyright
- * notice and one of the license notices.
- *
- * Redistributions in binary form must reproduce both the above copyright
- * notice, one of the license notices in the documentation
- * and/or other materials provided with the distribution.
- */
-
-/*
- * $Id$
- */
-
-#include "dapl.h"
-#include "dapl_srq_util.h"
-#include "dapl_openib_util.h"
-
-/*
- * dapl_srq_set_lw
- *
- * DAPL Requirements Version 1.2, 6.5.4
- *
- * Set the low water mark for an SRQ and arm the SRQ to generate an
- * event if it is reached.
- *
- * Input:
- * 	srq_handle
- * 	srq_max_recv_dto
- *
- * Output:
- * 	none
- *
- * Returns:
- * 	DAT_SUCCESS
- * 	DAT_INVALID_HANDLE
- * 	DAT_INVALID_PARAMETER
- * 	DAT_MODEL_NOT_SUPPORTED
- */
-
-u32 dapl_srq_set_lw(DAT_SRQ_HANDLE srq_handle, int low_watermark)
-{
-	struct dapl_srq *srq_ptr;
-	u32 dat_status = DAT_SUCCESS;
-
-	dapl_dbg_log(DAPL_DBG_TYPE_API, "dapl_srq_set_lw (%p, %d)\n",
-		     srq_handle, low_watermark);
-
-	if (DAPL_BAD_HANDLE(srq_handle, DAPL_MAGIC_SRQ)) {
-		dat_status =
-		    DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_SRQ);
-		goto bail;
-	}
-
-	srq_ptr = (struct dapl_srq *)srq_handle;
-
-	/* XXX Put implementation here XXX */
-
-	/* XXX */ dat_status = DAT_ERROR(DAT_NOT_IMPLEMENTED, DAT_NO_SUBTYPE);
-
-      bail:
-	return dat_status;
-}
Index: linux-kernel-srq/dat-provider/dapl_srq_post_recv.c
===================================================================
--- linux-kernel-srq/dat-provider/dapl_srq_post_recv.c	(revision 2489)
+++ linux-kernel-srq/dat-provider/dapl_srq_post_recv.c	(working copy)
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved.
- *
- * This Software is licensed under one of the following licenses:
- *
- * 1) under the terms of the "Common Public License 1.0" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/cpl.php.
- *
- * 2) under the terms of the "The BSD License" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/bsd-license.php.
- *
- * 3) under the terms of the "GNU General Public License (GPL) Version 2" a
- *    copy of which is available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/gpl-license.php.
- *
- * Licensee has the right to choose one of the above licenses.
- *
- * Redistributions of source code must retain the above copyright
- * notice and one of the license notices.
- *
- * Redistributions in binary form must reproduce both the above copyright
- * notice, one of the license notices in the documentation
- * and/or other materials provided with the distribution.
- */
-
-/*
- * $Id$
- */
-
-#include "dapl.h"
-#include "dapl_cookie.h"
-#include "dapl_openib_util.h"
-
-/*
- * dapl_srq_post_recv
- *
- * Post a receive buffer that can be used by any incoming
- * message by any connected EP using the SRQ. Request to receive data
- * over a connection of any ep handle into local_iov
- *
- * Input:
- * 	srq_handle
- * 	num_segments
- * 	local_iov
- * 	user_cookie
- *
- * Output:
- * 	None.
- *
- * Returns:
- * 	DAT_SUCCESS
- * 	DAT_INSUFFICIENT_RESOURCES
- * 	DAT_INVALID_PARAMETER
- * 	DAT_INVALID_HANDLE
- * 	DAT_INVALID_STATE
- * 	DAT_PROTECTION_VIOLATION
- * 	DAT_PROVILEGES_VIOLATION
- */
-u32 dapl_srq_post_recv(DAT_SRQ_HANDLE srq_handle, int num_segments,
-		       struct dat_lmr_triplet *local_iov,
-		       DAT_DTO_COOKIE user_cookie)
-{
-	struct dapl_srq *srq_ptr;
-	struct dapl_cookie *cookie;
-	u32 dat_status;
-
-	dapl_dbg_log(DAPL_DBG_TYPE_API,
-		     "dapl_srq_post_recv (%p, %d, %p, %P)\n",
-		     srq_handle, num_segments, local_iov, user_cookie.as_64);
-
-	if (DAPL_BAD_HANDLE(srq_handle, DAPL_MAGIC_SRQ)) {
-		dat_status =
-		    DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_SRQ);
-		goto bail;
-	}
-
-	srq_ptr = (struct dapl_srq *)srq_handle;
-
-	/*
-	 * Synchronization ok since this buffer is only used for receive
-	 * requests, which aren't allowed to race with each other. The
-	 * app must syncronize access to the SRQ.
-	 */
-	dat_status = dapl_dto_cookie_alloc(&srq_ptr->recv_buffer,
-					   DAPL_DTO_TYPE_RECV,
-					   user_cookie, &cookie);
-	if (DAT_SUCCESS != dat_status) {
-		goto bail;
-	}
-
-	/*
-	 * Take reference before posting to avoid race conditions with
-	 * completions
-	 */
-	atomic_inc(&srq_ptr->recv_count);
-
-	/*
-	 * Invoke provider specific routine to post DTO
-	 */
-	/* XXX Put code here XXX */
-	/* XXX */ dat_status = DAT_ERROR(DAT_NOT_IMPLEMENTED, DAT_NO_SUBTYPE);
-
-	if (dat_status != DAT_SUCCESS) {
-		atomic_dec(&srq_ptr->recv_count);
-		dapl_cookie_dealloc(&srq_ptr->recv_buffer, cookie);
-	}
-
-      bail:
-	return dat_status;
-}
Index: linux-kernel-srq/dat-provider/dapl_srq_free.c
===================================================================
--- linux-kernel-srq/dat-provider/dapl_srq_free.c	(revision 2489)
+++ linux-kernel-srq/dat-provider/dapl_srq_free.c	(working copy)
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved.
- *
- * This Software is licensed under one of the following licenses:
- *
- * 1) under the terms of the "Common Public License 1.0" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/cpl.php.
- *
- * 2) under the terms of the "The BSD License" a copy of which is
- *    available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/bsd-license.php.
- *
- * 3) under the terms of the "GNU General Public License (GPL) Version 2" a
- *    copy of which is available from the Open Source Initiative, see
- *    http://www.opensource.org/licenses/gpl-license.php.
- *
- * Licensee has the right to choose one of the above licenses.
- *
- * Redistributions of source code must retain the above copyright
- * notice and one of the license notices.
- *
- * Redistributions in binary form must reproduce both the above copyright
- * notice, one of the license notices in the documentation
- * and/or other materials provided with the distribution.
- */
-
-/*
- * $Id$
- */
-
-#include "dapl.h"
-#include "dapl_ia_util.h"
-#include "dapl_srq_util.h"
-#include "dapl_openib_util.h"
-
-/*
- * dapl_srq_free
- *
- * Destroy an instance of an SRQ
- *
- * Input:
- *	srq_handle
- *
- * Output:
- *	none
- *
- * Returns:
- *	DAT_SUCCESS
- *	DAT_INVALID_PARAMETER
- *	DAT_INVALID_STATE
- */
-u32 dapl_srq_free(DAT_SRQ_HANDLE srq_handle)
-{
-	struct dapl_srq *srq_ptr;
-	struct dapl_ia *ia_ptr;
-	struct dat_srq_param *param;
-	u32 dat_status = DAT_SUCCESS;
-
-	dapl_dbg_log(DAPL_DBG_TYPE_API, "dapl_srq_free (%p)\n", srq_handle);
-
-	srq_ptr = (struct dapl_srq *)srq_handle;
-	param = &srq_ptr->param;
-
-	/*
-	 * Verify parameter & state
-	 */
-	if (DAPL_BAD_HANDLE(srq_ptr, DAPL_MAGIC_SRQ)) {
-		dat_status =
-		    DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_SRQ);
-		goto bail;
-	}
-
-	if (atomic_read(&srq_ptr->srq_ref_count) != 0) {
-		/*
-		 * The DAPL 1.2 spec says to return DAT_SRQ_IN_USE, which does
-		 * not exist. Have filed the following as an eratta.
-		 */
-		dat_status =
-		    DAT_ERROR(DAT_INVALID_STATE, DAT_INVALID_STATE_SRQ_IN_USE);
-		goto bail;
-	}
-
-	ia_ptr = srq_ptr->header.owner_ia;
-
-	/*
-	 * Do verification of parameters and the state change atomically.
-	 */
-	spin_lock_irqsave(&srq_ptr->header.lock, srq_ptr->header.flags);
-
-	/* Remove the SRQ from the IA */
-	dapl_ia_unlink_srq(ia_ptr, srq_ptr);
-
-	spin_unlock_irqrestore(&srq_ptr->header.lock, srq_ptr->header.flags);
-
-	/*
-	 * Finish tearing everything down.
-	 */
-
-	/*
-	 * Take care of the transport resource
-	 */
-
-	/* XXX Put provider code here!!! */
-
-	/* Free the resource */
-	dapl_srq_dealloc(srq_ptr);
-
-      bail:
-	return dat_status;
-
-}
Index: linux-kernel-srq/patches/alt_dat_provider_makefile
===================================================================
--- linux-kernel-srq/patches/alt_dat_provider_makefile	(revision 2489)
+++ linux-kernel-srq/patches/alt_dat_provider_makefile	(working copy)
@@ -76,13 +76,7 @@ PROVIDER_MODULES := \
         dapl_rsp_query                	\
         dapl_set_consumer_context     	\
         dapl_sp_util                  	\
-        dapl_srq_create               	\
-        dapl_srq_free                 	\
-        dapl_srq_post_recv            	\
-        dapl_srq_query                	\
-        dapl_srq_resize               	\
-        dapl_srq_set_lw               	\
-        dapl_srq_util                 	\
+        dapl_srq                 	\
         dapl_timer_util 		\
 	dapl_util
 




More information about the general mailing list