[openib-general] Re: [PATCHv3][RFC] kDAPL: use cm timers instead of own

James Lentini jlentini at netapp.com
Thu Jun 2 13:18:13 PDT 2005


I'd recommend these changes (see attached):

- use the new microsecond conversion function you sent
- keep a default DAT timeout constant (I propose DAT_TIMEOUT_MAX)
- set the timeout a little differently. Instead of storing it in the
   ep, store it directly in the CM param
- add a kdat.h file to the patches directory. We can start using this
   to place symbols that are in the official DAT spec (like
   DAT_TIMEOUT_INFINITE), but not our linux variant.

Did I call dapl_convert_us_to_kookyib() correctly? You were passing a 
value divided by 1000 to dapl_convert_ms_to_kookyib(), so I assumed 
that I could get rid of that.

What do you think?
james

On Wed, 1 Jun 2005, Tom Duffy wrote:

> This patch takes into account some of the feedback by Sean, it sets the
> retry to 0, so it will do the timeout right.  It also stops the
> conversion of ms to ib at 63 since 64 overflows.  I have tested this
> version using kdapltest in quit, performance, and transaction modes.
>
> James, do you think it good enough to apply?
>
> Signed-off-by: Tom Duffy <tduffy at sun.com>
>
> Index: linux-kernel-timer/test/dapltest/test/dapl_performance_util.c
> ===================================================================
> --- linux-kernel-timer/test/dapltest/test/dapl_performance_util.c	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/test/dapl_performance_util.c	(working copy)
> @@ -538,7 +538,7 @@ DT_performance_wait (
>     pre_ts = DT_Mdep_GetTimeStamp ();
>
>     ret = DT_Tdep_evd_wait ( evd_handle,
> -			DAT_TIMEOUT_INFINITE,
> +			MAX_SCHEDULE_TIMEOUT,
> 			&event);
>
>     post_ts = DT_Mdep_GetTimeStamp ();
> Index: linux-kernel-timer/test/dapltest/test/dapl_performance_client.c
> ===================================================================
> --- linux-kernel-timer/test/dapltest/test/dapl_performance_client.c	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/test/dapl_performance_client.c	(working copy)
> @@ -105,7 +105,7 @@ retry:
>     ret = dat_ep_connect (test_ptr->ep_context.ep_handle,
> 			 test_ptr->remote_ia_addr,
> 			 test_ptr->ep_context.port,
> -			 DAT_TIMEOUT_INFINITE,
> +			 MAX_SCHEDULE_TIMEOUT,
> 			 0,
> 			 (void *) 0,	  /* no private data */
> 			 test_ptr->cmd->qos,
> Index: linux-kernel-timer/test/dapltest/test/dapl_server.c
> ===================================================================
> --- linux-kernel-timer/test/dapltest/test/dapl_server.c	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/test/dapl_server.c	(working copy)
> @@ -580,7 +580,7 @@ DT_cs_Server (Params_t * params_ptr)
>
> 	DT_Mdep_wait_object_wait (
> 		&pt_ptr->synch_wait_object,
> -		DAT_TIMEOUT_INFINITE);
> +		MAX_SCHEDULE_TIMEOUT);
>
> 	/* Send the Server_Info */
> 	DT_Tdep_PT_Debug (1,(phead,"%s: Send Server_Info\n", module));
> Index: linux-kernel-timer/test/dapltest/test/dapl_transaction_test.c
> ===================================================================
> --- linux-kernel-timer/test/dapltest/test/dapl_transaction_test.c	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/test/dapl_transaction_test.c	(working copy)
> @@ -712,7 +712,7 @@ retry:
> 	    ret = dat_ep_connect (test_ptr->ep_context[i].ep_handle,
> 				 test_ptr->remote_ia_addr,
> 				 test_ptr->ep_context[i].ia_port,
> -				 DAT_TIMEOUT_INFINITE,
> +				 MAX_SCHEDULE_TIMEOUT,
> 				  strlen (private_data_str), private_data_str,
> 				 pt_ptr->Params.ReliabilityLevel,
> 				 DAT_CONNECT_DEFAULT_FLAG);
> Index: linux-kernel-timer/test/dapltest/test/dapl_test_util.c
> ===================================================================
> --- linux-kernel-timer/test/dapltest/test/dapl_test_util.c	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/test/dapl_test_util.c	(working copy)
> @@ -261,7 +261,7 @@ DT_cr_event_wait ( DT_Tdep_Print_Head *p
> 	u32      ret;
> 	struct dat_event       event;
>
> -	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_INFINITE, &event);
> +	ret = DT_Tdep_evd_wait (evd_handle, MAX_SCHEDULE_TIMEOUT, &event);
> 	if (ret != DAT_SUCCESS)
> 	{
> 	    DT_Tdep_PT_Printf (phead, "Test Error: dapl_event_wait (CR) failed: %s\n",
> @@ -316,7 +316,7 @@ DT_conn_event_wait (DT_Tdep_Print_Head *
> 	u32      ret;
> 	struct dat_event       event;
>
> -	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_INFINITE, &event);
> +	ret = DT_Tdep_evd_wait (evd_handle, MAX_SCHEDULE_TIMEOUT, &event);
> 	if (ret != DAT_SUCCESS)
> 	{
> 	    DT_Tdep_PT_Printf (phead, "Test Error: dapl_event_wait (CONN) failed: %s\n",
> @@ -369,7 +369,7 @@ DT_disco_event_wait ( DT_Tdep_Print_Head
> 	u32      ret;
> 	struct dat_event       event;
>
> -	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_INFINITE, &event);
> +	ret = DT_Tdep_evd_wait (evd_handle, MAX_SCHEDULE_TIMEOUT, &event);
> 	if (ret != DAT_SUCCESS)
> 	{
> 	    DT_Tdep_PT_Printf (phead, "Test Error: dapl_event_wait (DISCONN) failed: %s\n",
> @@ -492,7 +492,7 @@ DT_dto_event_wait (DT_Tdep_Print_Head *p
> 	u32      ret;
> 	struct dat_event       event;
>
> -	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_INFINITE, &event);
> +	ret = DT_Tdep_evd_wait (evd_handle, MAX_SCHEDULE_TIMEOUT, &event);
> 	if (ret != DAT_SUCCESS)
> 	{
> 	    DT_Tdep_PT_Printf (phead, "Test Error: dapl_event_wait (DTO) failed: %s\n",
> @@ -536,7 +536,7 @@ DT_rmr_event_wait (DT_Tdep_Print_Head *p
> 	u32      ret;
> 	struct dat_event       event;
>
> -	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_INFINITE, &event);
> +	ret = DT_Tdep_evd_wait (evd_handle, MAX_SCHEDULE_TIMEOUT, &event);
> 	if (ret != DAT_SUCCESS)
> 	{
> 	    DT_Tdep_PT_Printf (phead, "Test Error: dapl_event_wait (RMR) failed: %s\n",
> Index: linux-kernel-timer/test/dapltest/test/dapl_client.c
> ===================================================================
> --- linux-kernel-timer/test/dapltest/test/dapl_client.c	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/test/dapl_client.c	(working copy)
> @@ -256,7 +256,7 @@ retry:
>     ret = dat_ep_connect (ep_handle,
> 			 server_netaddr,
> 			 SERVER_PORT_NUMBER,
> -			 DAT_TIMEOUT_INFINITE,
> +			 MAX_SCHEDULE_TIMEOUT,
> 			 0, (void *) 0,  /* no private data */
> 			 params_ptr->ReliabilityLevel,
> 			 DAT_CONNECT_DEFAULT_FLAG);
> Index: linux-kernel-timer/test/dapltest/include/dapl_tdep.h
> ===================================================================
> --- linux-kernel-timer/test/dapltest/include/dapl_tdep.h	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/include/dapl_tdep.h	(working copy)
> @@ -56,7 +56,7 @@ DT_Tdep_evd_free (DAT_EVD_HANDLE 	evd_ha
>
> u32
> DT_Tdep_evd_wait (DAT_EVD_HANDLE 	evd_handle,
> -		  DAT_TIMEOUT   	timeout,
> +		  unsigned long   	timeout,
> 		  struct dat_event    	*event);
> u32
> DT_Tdep_evd_dequeue (DAT_EVD_HANDLE	evd_handle,
> Index: linux-kernel-timer/test/dapltest/include/dapl_proto.h
> ===================================================================
> --- linux-kernel-timer/test/dapltest/include/dapl_proto.h	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/include/dapl_proto.h	(working copy)
> @@ -185,7 +185,7 @@ void 			DT_Mdep_Thread_EXIT ( void * thr
> int				DT_Mdep_wait_object_init ( DT_WAIT_OBJECT *wait_obj);
> int 			DT_Mdep_wait_object_wait (
> 						    DT_WAIT_OBJECT *wait_obj,
> -						     int timeout_val);
> +						     unsigned long timeout_val);
> int 			DT_Mdep_wait_object_wakeup ( DT_WAIT_OBJECT *wait_obj);
> int 			DT_Mdep_wait_object_destroy ( DT_WAIT_OBJECT *wait_obj);
>
> Index: linux-kernel-timer/test/dapltest/include/dapl_transaction_test.h
> ===================================================================
> --- linux-kernel-timer/test/dapltest/include/dapl_transaction_test.h	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/include/dapl_transaction_test.h	(working copy)
> @@ -79,7 +79,7 @@ typedef struct
>     Transaction_Cmd_t       *cmd;
>     struct sockaddr *     remote_ia_addr;
>     DAT_CONN_QUAL           base_port;
> -    DAT_TIMEOUT             time_out;
> +    unsigned long             time_out;
>     int               evd_length;
>     Thread                  *thread;
>
> Index: linux-kernel-timer/test/dapltest/mdep/linux/dapl_mdep_user.c
> ===================================================================
> --- linux-kernel-timer/test/dapltest/mdep/linux/dapl_mdep_user.c	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/mdep/linux/dapl_mdep_user.c	(working copy)
> @@ -411,7 +411,7 @@ DT_Mdep_wait_object_init (
> int
> DT_Mdep_wait_object_wait (
> 	DT_WAIT_OBJECT *wait_obj,
> -	 int timeout_val)
> +	 unsigned long timeout_val)
> {
>     int 		dat_status;
>     int 		pthread_status;
> Index: linux-kernel-timer/test/dapltest/mdep/linux/dapl_mdep_kernel.c
> ===================================================================
> --- linux-kernel-timer/test/dapltest/mdep/linux/dapl_mdep_kernel.c	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/mdep/linux/dapl_mdep_kernel.c	(working copy)
> @@ -252,13 +252,13 @@ DT_Mdep_wait_object_init (
> int
> DT_Mdep_wait_object_wait (
> 	DT_WAIT_OBJECT *wait_obj,
> -	 int timeout_val)
> +	 unsigned long timeout_val)
> {
>     int     expire;
>     int 	dat_status;
>
>     dat_status = DAT_SUCCESS;
> -    if ( DAT_TIMEOUT_INFINITE == timeout_val)
> +    if ( MAX_SCHEDULE_TIMEOUT == timeout_val)
>     {
> 	interruptible_sleep_on (wait_obj);
>     }
> Index: linux-kernel-timer/test/dapltest/kdapl/kdapl_tdep_evd.c
> ===================================================================
> --- linux-kernel-timer/test/dapltest/kdapl/kdapl_tdep_evd.c	(revision 2518)
> +++ linux-kernel-timer/test/dapltest/kdapl/kdapl_tdep_evd.c	(working copy)
> @@ -213,7 +213,7 @@ DT_Tdep_evd_dequeue (DAT_EVD_HANDLE evd_
>
> u32
> DT_Tdep_evd_wait (DAT_EVD_HANDLE evd_handle,
> -		  DAT_TIMEOUT   timeout,
> +		  unsigned long   timeout,
> 		  struct dat_event      *dat_event)
> {
>     u32  dat_status;
> @@ -239,7 +239,7 @@ DT_Tdep_evd_wait (DAT_EVD_HANDLE evd_han
> 	return dat_status;
>     }
>     /* wait for an event */
> -    if (timeout == DAT_TIMEOUT_INFINITE)
> +    if (timeout == MAX_SCHEDULE_TIMEOUT)
>     {
> 	rc = wait_event_interruptible (evd_ptr->wait_object,
> 				       evd_ptr->event_next != NULL);
> Index: linux-kernel-timer/dat-provider/dapl_ep_connect.c
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_ep_connect.c	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_ep_connect.c	(working copy)
> @@ -35,7 +35,6 @@
> #include "dapl_ep_util.h"
> #include "dapl_openib_util.h"
> #include "dapl_evd_util.h"
> -#include "dapl_timer_util.h"
>
> /*
>  * Request a connection be established between the local Endpoint
> @@ -44,7 +43,7 @@
>  */
> u32 dapl_ep_connect(DAT_EP_HANDLE ep_handle,
> 		    struct sockaddr *remote_ia_address,
> -		    DAT_CONN_QUAL remote_conn_qual, DAT_TIMEOUT timeout,
> +		    DAT_CONN_QUAL remote_conn_qual, unsigned long timeout,
> 		    int private_data_size, const void *private_data,
> 		    enum dat_qos qos, enum dat_connect_flags connect_flags)
> {
> @@ -277,23 +276,13 @@ u32 dapl_ep_connect(DAT_EP_HANDLE ep_han
> 		spin_lock_irqsave(&ep_ptr->header.lock, ep_ptr->header.flags);
> 		if (ep_ptr->param.ep_state ==
> 			DAT_EP_STATE_ACTIVE_CONNECTION_PENDING
> -		    && timeout != DAT_TIMEOUT_INFINITE) {
> -			ep_ptr->cxn_timer = kmalloc(sizeof *ep_ptr->cxn_timer,
> -						    GFP_ATOMIC);
> -			if (!ep_ptr->cxn_timer) {
> -				dat_status = DAT_ERROR(DAT_INSUFFICIENT_RESOURCES,
> -						       DAT_RESOURCE_MEMORY);
> -				goto bail;
> -			}
> -
> -			dapl_timer_set(ep_ptr->cxn_timer,
> -				       dapl_ep_timeout, ep_ptr, timeout);
> -		}
> +		    && timeout != MAX_SCHEDULE_TIMEOUT)
> +			ep_ptr->timeout = timeout;
> 		spin_unlock_irqrestore(&ep_ptr->header.lock,
> 				       ep_ptr->header.flags);
> 	}
>
> -      bail:
> +bail:
> 	dapl_dbg_log(DAPL_DBG_TYPE_RTN | DAPL_DBG_TYPE_CM,
> 		     "dapl_ep_connect () returns 0x%x\n", dat_status);
>
> Index: linux-kernel-timer/dat-provider/dapl_evd_connection_callb.c
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_evd_connection_callb.c	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_evd_connection_callb.c	(working copy)
> @@ -32,7 +32,6 @@
> #include "dapl.h"
> #include "dapl_evd_util.h"
> #include "dapl_ep_util.h"
> -#include "dapl_timer_util.h"
>
> /*
>  * dapl_evd_connection_callback
> @@ -87,15 +86,6 @@ void dapl_evd_connection_callback(struct
> 	 */
> 	spin_lock_irqsave(&ep_ptr->header.lock, ep_ptr->header.flags);
>
> -	/*
> -	 * If a connection timer has been set up on this EP, cancel it now
> -	 */
> -	if (ep_ptr->cxn_timer != NULL) {
> -		dapl_timer_cancel(ep_ptr->cxn_timer);
> -		kfree(ep_ptr->cxn_timer);
> -		ep_ptr->cxn_timer = NULL;
> -	}
> -
> 	switch (event) {
> 	case DAT_CONNECTION_EVENT_ESTABLISHED:
> 		{
> Index: linux-kernel-timer/dat-provider/dapl_ep_free.c
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_ep_free.c	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_ep_free.c	(working copy)
> @@ -34,7 +34,6 @@
> #include "dapl_ep_util.h"
> #include "dapl_openib_util.h"
> #include "dapl_ring_buffer_util.h"
> -#include "dapl_timer_util.h"
>
> /*
>  * dapl_ep_free
> @@ -107,12 +106,6 @@ u32 dapl_ep_free(DAT_EP_HANDLE ep_handle
> 	 */
> 	spin_lock_irqsave(&ep_ptr->header.lock, ep_ptr->header.flags);
>
> -	if (ep_ptr->cxn_timer != NULL) {
> -		dapl_timer_cancel(ep_ptr->cxn_timer);
> -		kfree(ep_ptr->cxn_timer);
> -		ep_ptr->cxn_timer = NULL;
> -	}
> -
> 	/* Remove the EP from the IA */
> 	dapl_ia_unlink_ep(ia_ptr, ep_ptr);
>
> Index: linux-kernel-timer/dat-provider/dapl_provider.c
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_provider.c	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_provider.c	(working copy)
> @@ -39,7 +39,6 @@
> #include "dapl_mr_util.h"
> #include "dapl_util.h"
> #include "dapl_openib_util.h"
> -#include "dapl_timer_util.h"
>
> MODULE_LICENSE("Dual BSD/GPL");
> MODULE_DESCRIPTION("DAT Provider for InfiniBand");
> @@ -393,7 +392,6 @@ module_exit(dapl_fini);
> static int __init dapl_init(void)
> {
> 	dapl_dbg_log(DAPL_DBG_TYPE_UTIL, "provider started\n");
> -	dapl_timer_init();
> 	return ib_register_client(&dapl_client);
> }
>
> Index: linux-kernel-timer/dat-provider/dapl_openib_cm.c
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_openib_cm.c	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_openib_cm.c	(working copy)
> @@ -291,6 +291,26 @@ static int dapl_cm_passive_cb_handler(st
> 	return ret;
> }
>
> +/*
> + * approximately transforms miliseconds to 4.096us*2^x
> + * 63(+8) is max return
> + */
> +static inline u8 dapl_convert_ms_to_kookyib(unsigned long ms) {
> +	unsigned long converged = 2;
> +	u8 i;
> +
> +	if (2 > ms)
> +		return 8;
> +
> +	for (i = 1; i < 63; i++) {
> +		if (converged >= ms)
> +			break;
> +		converged = 2*converged;
> +	}
> +
> +	return i+8;
> +}
> +
> static void dapl_path_comp_handler(u64 req_id, void *context, int rec_num)
> {
> 	struct dapl_cm_id *conn = context;
> @@ -324,6 +344,12 @@ static void dapl_path_comp_handler(u64 r
> 	if (conn->dapl_path.mtu > IB_MTU_1024)
> 		conn->dapl_path.mtu = IB_MTU_1024;
>
> +	if (conn->ep && conn->ep->timeout != 0) {
> +		conn->param.remote_cm_response_timeout =
> +				dapl_convert_ms_to_kookyib(conn->ep->timeout/1000);
> +		conn->param.retry_count = 0;
> +	}
> +
> 	conn->param.primary_path = &conn->dapl_path;
> 	conn->param.alternate_path = NULL;
>
> Index: linux-kernel-timer/dat-provider/dapl_timer_util.c
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_timer_util.c	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_timer_util.c	(working copy)
> @@ -1,313 +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.
> - */
> -
> -/*
> - * Routines to add and cancel timer records. A timer record
> - * is put on the global timer queue. If the timer thread is
> - * not running, start it. The timer thread will sleep
> - * until a timer event or until a process wakes it up
> - * to notice a new timer is available; we use a DAPL_WAIT_OBJ
> - * for synchronization.
> - *
> - * If a timer is cancelled, it is simlpy removed from the
> - * queue. The timer may wakeup and notice there is no timer
> - * record to awaken at this time, so it will reset for the
> - * next entry. When there are no timer records to manage,
> - * the timer thread just sleeps until awakened.
> - *
> - * This file also contains the timer handler thread,
> - * embodied in dapl_timer_thread().
> - *
> - * $Id$
> - */
> -
> -#include "dapl.h"
> -#include "dapl_timer_util.h"
> -
> -struct dapl_timer_head {
> -	struct dapl_llist_entry *timer_list_head;
> -	spinlock_t lock;
> -	unsigned long flags;
> -	DAPL_OS_WAIT_OBJECT wait_object;
> -	int thread_id;
> -};
> -
> -static struct dapl_timer_head g_dapl_timer_head;
> -
> -static int dapl_timer_thread(void *arg);
> -
> -void dapl_timer_init(void)
> -{
> -	/*
> -	 * Set up the timer thread elements. The timer thread isn't
> -	 * started until it is actually needed
> -	 */
> -	g_dapl_timer_head.timer_list_head = NULL;
> -	spin_lock_init(&g_dapl_timer_head.lock);
> -	dapl_os_wait_object_init(&g_dapl_timer_head.wait_object);
> -	g_dapl_timer_head.thread_id = -1;
> -}
> -
> -/*
> - * dapl_timer_set
> - *
> - * Set a timer. The timer will invoke the specified function
> - * after a number of useconds expires.
> - *
> - * Input:
> - *      timer    User provided timer structure
> - *      func     Function to invoke when timer expires
> - *      data     Argument passed to func()
> - *      expires  microseconds until timer fires
> - *
> - * Returns:
> - *	no return value
> - *
> - */
> -u32 dapl_timer_set(struct dapl_timer_entry *timer, void (*func) (void *),
> -		   void *data, DAPL_OS_TIMEVAL expires)
> -{
> -	struct dapl_timer_entry *list_ptr;
> -	DAPL_OS_TIMEVAL cur_time;
> -	boolean_t wakeup_tmo_thread;
> -
> -	/*
> -	 * Start the timer thread the first time we need a timer
> -	 */
> -	if ( -1 == g_dapl_timer_head.thread_id ) {
> -		g_dapl_timer_head.thread_id =
> -			kernel_thread(dapl_timer_thread, &g_dapl_timer_head, 0);
> -	}
> -
> -	dapl_llist_init_entry(&timer->list_entry);
> -	wakeup_tmo_thread = FALSE;
> -	dapl_os_get_time(&cur_time);
> -	timer->expires = cur_time + expires;	/* calculate future time */
> -	timer->function = func;
> -	timer->data = data;
> -
> -	/*
> -	 * Put the element on the queue: sorted by wakeup time, eariliest
> -	 * first.
> -	 */
> -	spin_lock_irqsave(&g_dapl_timer_head.lock, g_dapl_timer_head.flags);
> -	/*
> -	 * Deal with 3 cases due to our list structure:
> -	 * 1) list is empty: become the list head
> -	 * 2) New timer is sooner than list head: become the list head
> -	 * 3) otherwise, sort the timer into the list, no need to wake
> -	 *    the timer thread up
> -	 */
> -	if (dapl_llist_is_empty(&g_dapl_timer_head.timer_list_head)) {
> -		/* Case 1: add entry to head of list */
> -		dapl_llist_add_head(&g_dapl_timer_head.timer_list_head,
> -				    (struct dapl_llist_entry *)
> -					&timer->list_entry,
> -				    timer);
> -		wakeup_tmo_thread = TRUE;
> -	} else {
> -		list_ptr = (struct dapl_timer_entry *)
> -		    dapl_llist_peek_head(&g_dapl_timer_head.timer_list_head);
> -
> -		if (timer->expires < list_ptr->expires) {
> -			/* Case 2: add entry to head of list */
> -			dapl_llist_add_head(&g_dapl_timer_head.timer_list_head,
> -					    (struct dapl_llist_entry *)
> -						&timer->list_entry, timer);
> -			wakeup_tmo_thread = TRUE;
> -		} else {
> -			/* Case 3: figure out where entry goes in sorted list */
> -			list_ptr =
> -			    dapl_llist_next_entry(&g_dapl_timer_head.
> -						  timer_list_head,
> -						  (struct dapl_llist_entry *)
> -							&list_ptr->list_entry);
> -
> -			while (list_ptr != NULL) {
> -				if (timer->expires < list_ptr->expires) {
> -					dapl_llist_add_entry(&g_dapl_timer_head.
> -							     timer_list_head,
> -							     (struct dapl_llist_entry *)
> -								&list_ptr->list_entry,
> -							     (struct dapl_llist_entry *)
> -								&timer->list_entry,
> -							     timer);
> -					break;
> -
> -				}
> -				list_ptr =
> -				    dapl_llist_next_entry(&g_dapl_timer_head.
> -							  timer_list_head,
> -							  (struct dapl_llist_entry *)
> -							  &list_ptr->list_entry);
> -			}
> -			if (list_ptr == NULL) {
> -				/* entry goes to the end of the list */
> -				dapl_llist_add_tail(&g_dapl_timer_head.
> -						    timer_list_head,
> -						    (struct dapl_llist_entry *)
> -						    &timer->list_entry, timer);
> -			}
> -		}
> -
> -	}
> -	spin_unlock_irqrestore(&g_dapl_timer_head.lock,
> -			       g_dapl_timer_head.flags);
> -
> -	if (wakeup_tmo_thread == TRUE) {
> -		dapl_os_wait_object_wakeup(&g_dapl_timer_head.wait_object);
> -	}
> -
> -	return DAT_SUCCESS;
> -}
> -
> -/*
> - * dapl_timer_cancel
> - *
> - * Cancel a timer. Simply deletes the timer with no function invocations
> - *
> - * Input:
> - *      timer    User provided timer structure
> - *
> - * Returns:
> - *	no return value
> - */
> -void dapl_timer_cancel(struct dapl_timer_entry *timer)
> -{
> -	spin_lock_irqsave(&g_dapl_timer_head.lock, g_dapl_timer_head.flags);
> -	/*
> -	 * make sure the entry has not been removed by another thread
> -	 */
> -	if (!dapl_llist_is_empty(&g_dapl_timer_head.timer_list_head) &&
> -	    timer->list_entry.list_head == &g_dapl_timer_head.timer_list_head) {
> -		dapl_llist_remove_entry(&g_dapl_timer_head.timer_list_head,
> -					(struct dapl_llist_entry *)
> -						&timer->list_entry);
> -	}
> -	/*
> -	 * If this was the first entry on the queue we could awaken the
> -	 * thread and have it reset the list; but it will just wake up
> -	 * and find that the timer entry has been removed, then go back
> -	 * to sleep, so don't bother.
> -	 */
> -	spin_unlock_irqrestore(&g_dapl_timer_head.lock,
> -			       g_dapl_timer_head.flags);
> -}
> -
> -/*
> - * dapl_timer_thread
> - *
> - * Core worker thread dealing with all timers. Basic algorithm:
> - *	- Sleep until work shows up
> - *	- Take first element of sorted timer list and wake
> - *	  invoke the callback if expired
> - *	- Sleep for the timeout period if not expired
> - *
> - * Input:
> - *      timer_head    Timer head structure to manage timer lists
> - *
> - * Returns:
> - *	int
> - */
> -int dapl_timer_thread(void *arg)
> -{
> -	struct dapl_timer_entry *list_ptr;
> -	DAPL_OS_TIMEVAL cur_time;
> -	struct dapl_timer_head *timer_head;
> -	u32 dat_status;
> -
> -	timer_head = arg;
> -
> -	for (;;) {
> -		if (dapl_llist_is_empty(&timer_head->timer_list_head)) {
> -			dat_status =
> -			    dapl_os_wait_object_wait(&timer_head->wait_object,
> -						     DAT_TIMEOUT_INFINITE);
> -		}
> -
> -		/*
> -		 * Lock policy:
> -		 * While this thread is accessing the timer list, it holds the
> -		 * lock.  Otherwise, it doesn't.
> -		 */
> -		spin_lock_irqsave(&timer_head->lock, timer_head->flags);
> -		while (!dapl_llist_is_empty(&timer_head->timer_list_head)) {
> -			list_ptr = (struct dapl_timer_entry *)
> -			    dapl_llist_peek_head(&g_dapl_timer_head.
> -						 timer_list_head);
> -			dapl_os_get_time(&cur_time);
> -
> -			if (list_ptr->expires <= cur_time) {
> -				/*
> -				 * Remove the entry from the list. Sort out how much
> -				 * time we need to sleep for the next one
> -				 */
> -				list_ptr =
> -				    dapl_llist_remove_head(&timer_head->
> -							   timer_list_head);
> -				spin_unlock_irqrestore(&timer_head->lock,
> -						       timer_head->flags);
> -
> -				/*
> -				 * Invoke the user callback
> -				 */
> -				list_ptr->function(list_ptr->data);
> -				/* timer structure was allocated by caller, we don't
> -				 * free it here.
> -				 */
> -
> -				/* reacquire the lock */
> -				spin_lock_irqsave(&timer_head->lock,
> -					          timer_head->flags);
> -			} else {
> -				spin_unlock_irqrestore(&timer_head->lock,
> -						       timer_head->flags);
> -				dat_status =
> -				    dapl_os_wait_object_wait(&timer_head->
> -							     wait_object,
> -							     (DAT_TIMEOUT)
> -							     (list_ptr->
> -							      expires -
> -							      cur_time));
> -				spin_lock_irqsave(&timer_head->lock,
> -						  timer_head->flags);
> -			}
> -		}
> -		/*
> -		 * release the lock before going back to the top to sleep
> -		 */
> -		spin_unlock_irqrestore(&timer_head->lock, timer_head->flags);
> -
> -		if (dat_status == DAT_INTERNAL_ERROR) {
> -			/*
> -			 * XXX What do we do here?
> -			 */
> -		}
> -	} /* for (;;) */
> -
> -	return 0;
> -}
> Index: linux-kernel-timer/dat-provider/dapl_timer_util.h
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_timer_util.h	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_timer_util.h	(working copy)
> @@ -1,42 +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$
> - */
> -
> -#ifndef DAPL_TIMER_UTIL_H
> -#define DAPL_TIMER_UTIL_H
> -
> -void dapl_timer_init(void);
> -
> -u32 dapl_timer_set(struct dapl_timer_entry *timer, void (*func) (void *),
> -		   void *data, DAPL_OS_TIMEVAL expires);
> -
> -void dapl_timer_cancel(struct dapl_timer_entry *timer);
> -
> -#endif /*  DAPL_TIMER_UTIL_H */
> Index: linux-kernel-timer/dat-provider/dapl_ep_util.c
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_ep_util.c	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_ep_util.c	(working copy)
> @@ -168,9 +168,6 @@ void dapl_ep_dealloc(struct dapl_ep *ep_
> 	if (ep_ptr->send_iov)
> 		kfree(ep_ptr->send_iov);
>
> -	if (ep_ptr->cxn_timer)
> -		kfree(ep_ptr->cxn_timer);
> -
> 	kfree(ep_ptr);
> }
>
> @@ -242,32 +239,6 @@ bail:
> }
>
> /*
> - * dapl_ep_timeout
> - *
> - * If this routine is invoked before a connection occurs, generate an
> - * event
> - */
> -void dapl_ep_timeout(void *arg)
> -{
> -	struct dapl_ep *ep_ptr;
> -
> -	dapl_dbg_log(DAPL_DBG_TYPE_CM, "--> dapl_ep_timeout! ep %lx\n", arg);
> -
> -	ep_ptr = (struct dapl_ep *)arg;
> -
> -	/* reset the EP state */
> -	ep_ptr->param.ep_state = DAT_EP_STATE_DISCONNECTED;
> -
> -	/* Clean up the EP and put the underlying QP into the ERROR state. */
> -	dapl_ib_disconnect_clean(ep_ptr, TRUE);
> -
> -	(void)dapl_evd_post_connection_event((struct dapl_evd *)ep_ptr->param.
> -					     connect_evd_handle,
> -					     DAT_CONNECTION_EVENT_TIMED_OUT,
> -					     (DAT_HANDLE) ep_ptr, 0, NULL);
> -}
> -
> -/*
>  * dapl_ep_state_subtype
>  *
>  * Return the INVALID_STATE connection subtype associated with an
> Index: linux-kernel-timer/dat-provider/dapl_ep_util.h
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_ep_util.h	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_ep_util.h	(working copy)
> @@ -52,8 +52,6 @@ extern u32 dapl_ep_post_send_req(DAT_EP_
> 				 DAPL_DTO_TYPE dto_type,
> 				 enum ib_wr_opcode op_type);
>
> -void dapl_ep_timeout(void *arg);
> -
> enum dat_return_subtype dapl_ep_state_subtype(struct dapl_ep *ep_ptr);
>
> #endif				/*  DAPL_EP_UTIL_H */
> Index: linux-kernel-timer/dat-provider/dapl_util.c
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_util.c	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_util.c	(working copy)
> @@ -33,104 +33,6 @@
> #include "dapl_provider.h"
> #include "dapl_util.h"
>
> -/*
> - * dapl_os_get_time
> - *
> - * Return 64 bit value of current time in microseconds.
> - *
> - * Input:
> - *      loc       User location to place current time
> - *
> - * Returns:
> - *	DAT_SUCCESS
> - */
> -
> -u32 dapl_os_get_time(DAPL_OS_TIMEVAL *loc)
> -{
> -	struct timeval tv;
> -
> -	do_gettimeofday(&tv);
> -	*loc = ((u64) (tv.tv_sec) * 1000000L) + (u64) tv.tv_usec;
> -
> -	return DAT_SUCCESS;
> -}
> -
> -/*
> - * Wait object routines
> - */
> -
> -/*
> - * dapl_os_wait_object_init
> - *
> - * Initialize a wait object
> - *
> - * Input:
> - *	wait_obj
> - *
> - * Returns:
> - *	DAT_SUCCESS
> - *	DAT_INTERNAL_ERROR
> - */
> -u32 dapl_os_wait_object_init(DAPL_OS_WAIT_OBJECT *wait_obj)
> -{
> -	init_waitqueue_head(&wait_obj->wait_queue);
> -
> -	return DAT_SUCCESS;
> -}
> -
> -/* Wait on the supplied wait object, up to the specified time_out.
> - * A timeout of DAT_TIMEOUT_INFINITE will wait indefinitely.
> - * Timeout should be specified in micro seconds.
> - *
> - * Functional returns:
> - *	DAT_SUCCESS -- another thread invoked dapl_os_wait object_wakeup
> - * 	DAT_INVALID_STATE -- someone else is already waiting in this wait
> - * 	object.
> - *			     only one waiter is allowed at a time.
> - *	DAT_ABORT -- another thread invoked dapl_os_wait_object_destroy
> - *	DAT_TIMEOUT -- the specified time limit was reached.
> - */
> -
> -u32 dapl_os_wait_object_wait(DAPL_OS_WAIT_OBJECT *wait_obj,
> -			     DAT_TIMEOUT timeout_val)
> -{
> -	u32 dat_status = DAT_SUCCESS;
> -
> -	if (DAT_TIMEOUT_INFINITE == timeout_val) {
> -		interruptible_sleep_on(&wait_obj->wait_queue);
> -	} else {
> -		int expire;
> -
> -		expire = timeout_val * HZ / 1000000;
> -
> -		while (expire) {
> -			current->state = TASK_INTERRUPTIBLE;
> -			expire = schedule_timeout(expire);
> -		}
> -		dat_status = DAT_ERROR(DAT_TIMEOUT_EXPIRED, 0);
> -	}
> -	return dat_status;
> -}
> -
> -/*
> - * dapl_os_wait_object_wakeup
> - *
> - * Wakeup a thread waiting on a wait object
> - *
> - * Input:
> - *      wait_obj
> - *
> - * Returns:
> - *	DAT_SUCCESS
> - *	DAT_INTERNAL_ERROR
> - */
> -u32 dapl_os_wait_object_wakeup(DAPL_OS_WAIT_OBJECT *wait_obj)
> -{
> -	wake_up_interruptible(&wait_obj->wait_queue);
> -
> -	return DAT_SUCCESS;
> -}
> -
> #ifdef DAPL_DBG
>
> void dapl_dbg_log(DAPL_DBG_TYPE type, const char *fmt, ...)
> Index: linux-kernel-timer/dat-provider/dapl_util.h
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_util.h	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_util.h	(working copy)
> @@ -107,24 +107,6 @@ static inline int dapl_os_atomic_assign(
>  */
>
> /*
> - * The wait object invariant: Presuming a call to dapl_os_wait_object_wait
> - * occurs at some point, there will be at least one wakeup after each call
> - * to dapl_os_wait_object_signal.  I.e. Signals are not ignored, though
> - * they may be coallesced.
> - */
> -typedef struct dapl_os_wait_object {
> -	wait_queue_head_t wait_queue;
> -} DAPL_OS_WAIT_OBJECT;
> -
> -/* function prototypes */
> -u32 dapl_os_wait_object_init(DAPL_OS_WAIT_OBJECT *wait_obj);
> -
> -u32 dapl_os_wait_object_wait(DAPL_OS_WAIT_OBJECT *wait_obj,
> -			     DAT_TIMEOUT timeout_val);
> -
> -u32 dapl_os_wait_object_wakeup(DAPL_OS_WAIT_OBJECT *wait_obj);
> -
> -/*
>  * Memory Functions
>  */
>
> @@ -154,15 +136,6 @@ static inline char *dapl_os_strdup(const
> }
>
> /*
> - * Timer Functions
> - */
> -
> -typedef u64 DAPL_OS_TIMEVAL;
> -
> -/* timer function prototype */
> -u32 dapl_os_get_time(DAPL_OS_TIMEVAL *);
> -
> -/*
>  * *printf format helper. We use the C string constant concatenation
>  * ability to define 64 bit formats, which unfortunatly are non standard
>  * in the C compiler world.
> Index: linux-kernel-timer/dat-provider/dapl_ep_dup_connect.c
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl_ep_dup_connect.c	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl_ep_dup_connect.c	(working copy)
> @@ -32,7 +32,6 @@
> #include "dapl.h"
> #include "dapl_ep_util.h"
> #include "dapl_openib_util.h"
> -#include "dapl_timer_util.h"
>
> /*
>  * dapl_ep_dup_connect
> @@ -63,7 +62,7 @@
>  *	DAT_MODEL_NOT_SUPPORTED
>  */
> u32 dapl_ep_dup_connect(DAT_EP_HANDLE ep_handle, DAT_EP_HANDLE ep_dup_handle,
> -			DAT_TIMEOUT timeout, int private_data_size,
> +			unsigned long timeout, int private_data_size,
> 			const void *private_data, enum dat_qos qos)
> {
> 	struct dapl_ep *ep_dup_ptr;
> @@ -114,6 +113,6 @@ u32 dapl_ep_dup_connect(DAT_EP_HANDLE ep
> 				     private_data_size,
> 				     private_data,
> 				     qos, DAT_CONNECT_DEFAULT_FLAG);
> -      bail:
> +bail:
> 	return dat_status;
> }
> Index: linux-kernel-timer/dat-provider/dapl.h
> ===================================================================
> --- linux-kernel-timer/dat-provider/dapl.h	(revision 2518)
> +++ linux-kernel-timer/dat-provider/dapl.h	(working copy)
> @@ -236,14 +236,6 @@ struct dapl_evd {
> 	struct dapl_cno		*cno_ptr;
> };
>
> -/* DAPL timer entry, used to queue timeouts */
> -struct dapl_timer_entry {
> -	struct dapl_llist_entry list_entry;	/* link entry on ia struct */
> -	DAPL_OS_TIMEVAL expires;
> -	void (*function) (void *);
> -	void *data;
> -};
> -
> /* struct dapl_ep maps to DAT_EP_HANDLE */
> struct dapl_ep {
> 	struct dapl_header header;
> @@ -264,8 +256,7 @@ struct dapl_ep {
> 	/* For passive connections we maintain a back pointer to the CR */
> 	void *cr_ptr;
>
> -	/* pointer to connection timer, if set */
> -	struct dapl_timer_entry *cxn_timer;
> +	unsigned long timeout;
>
> 	/* private data container */
> 	char private_data[DAPL_MAX_PRIVATE_DATA_SIZE];
> @@ -500,14 +491,15 @@ extern u32 dapl_ep_modify(DAT_EP_HANDLE
> extern u32 dapl_ep_connect(DAT_EP_HANDLE ep_handle,
> 			   struct sockaddr *remote_ia_address,
> 			   DAT_CONN_QUAL remote_conn_qual,
> -			   DAT_TIMEOUT timeout,
> +			   unsigned long timeout,
> 			   int private_data_size,
> 			   const void *private_data,
> 			   enum dat_qos quality_of_service,
> 			   enum dat_connect_flags connect_flags);
>
> extern u32 dapl_ep_dup_connect(DAT_EP_HANDLE ep_handle,
> -			       DAT_EP_HANDLE ep_dup_handle, DAT_TIMEOUT timeout,
> +			       DAT_EP_HANDLE ep_dup_handle,
> +			       unsigned long timeout,
> 			       int private_data_size,
> 			       const void *private_data,
> 			       enum dat_qos quality_of_service);
> Index: linux-kernel-timer/patches/alt_dat_provider_makefile
> ===================================================================
> --- linux-kernel-timer/patches/alt_dat_provider_makefile	(revision 2518)
> +++ linux-kernel-timer/patches/alt_dat_provider_makefile	(working copy)
> @@ -71,7 +71,6 @@ PROVIDER_MODULES := \
>         dapl_set_consumer_context     	\
>         dapl_sp_util                  	\
>         dapl_srq                 	\
> -        dapl_timer_util 		\
> 	dapl_util
>
> PROVIDER_OBJS := $(foreach s, $(PROVIDER_MODULES), $(s).o)
> @@ -97,4 +96,4 @@ default:
> endif
>
> clean:
> -	rm -f *.o *.ko
> +	rm -rf *.o *.ko .*.cmd *.mod.* .tmp_versions .*.d .*.o.tmp cscope.out
> Index: linux-kernel-timer/dat/dat.h
> ===================================================================
> --- linux-kernel-timer/dat/dat.h	(revision 2518)
> +++ linux-kernel-timer/dat/dat.h	(working copy)
> @@ -383,11 +383,6 @@ enum dat_completion_flags {
> 	DAT_COMPLETION_BARRIER_FENCE_FLAG = 0x08,
> };
>
> -typedef u32 DAT_TIMEOUT;	/* microseconds */
> -
> -/* timeout = infinity */
> -#define DAT_TIMEOUT_INFINITE    ((DAT_TIMEOUT) ~0)
> -
> /* dat handles */
> typedef void *DAT_HANDLE;
> typedef DAT_HANDLE DAT_CR_HANDLE;
> @@ -1139,12 +1134,12 @@ typedef u32 (*DAT_EP_MODIFY_FUNC)(DAT_EP
> 				  const struct dat_ep_param *);
>
> typedef u32 (*DAT_EP_CONNECT_FUNC)(DAT_EP_HANDLE, struct sockaddr *,
> -				   DAT_CONN_QUAL, DAT_TIMEOUT, int,
> +				   DAT_CONN_QUAL, unsigned long timeout, int,
> 				   const void *, enum dat_qos,
> 				   enum dat_connect_flags);
>
> typedef u32 (*DAT_EP_DUP_CONNECT_FUNC)(DAT_EP_HANDLE, DAT_EP_HANDLE,
> -				       DAT_TIMEOUT, int, const void *,
> +				       unsigned long timeout, int, const void *,
> 				       enum dat_qos);
>
> typedef u32 (*DAT_EP_DISCONNECT_FUNC)(DAT_EP_HANDLE, enum dat_close_flags);
> @@ -1493,7 +1488,7 @@ static inline u32 dat_evd_resize(DAT_EVD
> }
>
> static inline u32 dat_ep_connect(DAT_EP_HANDLE ep, struct sockaddr *ia_addr,
> -				 DAT_CONN_QUAL conn_qual, DAT_TIMEOUT timeout,
> +				 DAT_CONN_QUAL conn_qual, unsigned long timeout,
> 				 int private_data_size,
> 				 const void *private_data, enum dat_qos qos,
> 				 enum dat_connect_flags flags)
> @@ -1533,7 +1528,8 @@ static inline u32 dat_ep_disconnect(DAT_
> }
>
> static inline u32 dat_ep_dup_connect(DAT_EP_HANDLE ep, DAT_EP_HANDLE dup_ep,
> -				     DAT_TIMEOUT timeout, int private_data_size,
> +				     unsigned long timeout,
> +				     int private_data_size,
> 				     const void *private_data, enum dat_qos qos)
> {
>         return DAT_CALL_PROVIDER_FUNC(ep_dup_connect_func, ep, dup_ep, timeout,
>
-------------- next part --------------
Index: test/dapltest/test/dapl_performance_util.c
===================================================================
--- test/dapltest/test/dapl_performance_util.c	(revision 2525)
+++ test/dapltest/test/dapl_performance_util.c	(working copy)
@@ -538,7 +538,7 @@ DT_performance_wait (
     pre_ts = DT_Mdep_GetTimeStamp ();
 
     ret = DT_Tdep_evd_wait ( evd_handle,
-			DAT_TIMEOUT_INFINITE,
+			DAT_TIMEOUT_MAX,
 			&event);
 
     post_ts = DT_Mdep_GetTimeStamp ();
Index: test/dapltest/test/dapl_performance_client.c
===================================================================
--- test/dapltest/test/dapl_performance_client.c	(revision 2525)
+++ test/dapltest/test/dapl_performance_client.c	(working copy)
@@ -105,7 +105,7 @@ retry:
     ret = dat_ep_connect (test_ptr->ep_context.ep_handle,
 			 test_ptr->remote_ia_addr,
 			 test_ptr->ep_context.port,
-			 DAT_TIMEOUT_INFINITE,
+			 DAT_TIMEOUT_MAX,
 			 0,
 			 (void *) 0,	  /* no private data */
 			 test_ptr->cmd->qos,
Index: test/dapltest/test/dapl_server.c
===================================================================
--- test/dapltest/test/dapl_server.c	(revision 2525)
+++ test/dapltest/test/dapl_server.c	(working copy)
@@ -580,7 +580,7 @@ DT_cs_Server (Params_t * params_ptr)
 
 	DT_Mdep_wait_object_wait (
 		&pt_ptr->synch_wait_object,
-		DAT_TIMEOUT_INFINITE);
+		DAT_TIMEOUT_MAX);
 
 	/* Send the Server_Info */
 	DT_Tdep_PT_Debug (1,(phead,"%s: Send Server_Info\n", module));
Index: test/dapltest/test/dapl_transaction_test.c
===================================================================
--- test/dapltest/test/dapl_transaction_test.c	(revision 2525)
+++ test/dapltest/test/dapl_transaction_test.c	(working copy)
@@ -710,12 +710,12 @@ DT_Transaction_Main (void *param)
 
 retry:
 	    ret = dat_ep_connect (test_ptr->ep_context[i].ep_handle,
-				 test_ptr->remote_ia_addr,
-				 test_ptr->ep_context[i].ia_port,
-				 DAT_TIMEOUT_INFINITE,
+				  test_ptr->remote_ia_addr,
+				  test_ptr->ep_context[i].ia_port,
+				  DAT_TIMEOUT_MAX,
 				  strlen (private_data_str), private_data_str,
-				 pt_ptr->Params.ReliabilityLevel,
-				 DAT_CONNECT_DEFAULT_FLAG);
+				  pt_ptr->Params.ReliabilityLevel,
+				  DAT_CONNECT_DEFAULT_FLAG);
 	    if (ret != DAT_SUCCESS)
 	    {
 		DT_Tdep_PT_Printf (phead, "Test[" F64x "]: dat_ep_connect #%d error: %s (0x%x)\n",
Index: test/dapltest/test/dapl_test_util.c
===================================================================
--- test/dapltest/test/dapl_test_util.c	(revision 2525)
+++ test/dapltest/test/dapl_test_util.c	(working copy)
@@ -261,7 +261,7 @@ DT_cr_event_wait ( DT_Tdep_Print_Head *p
 	u32      ret;
 	struct dat_event       event;
 
-	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_INFINITE, &event);
+	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_MAX, &event);
 	if (ret != DAT_SUCCESS)
 	{
 	    DT_Tdep_PT_Printf (phead, "Test Error: dapl_event_wait (CR) failed: %s\n",
@@ -316,7 +316,7 @@ DT_conn_event_wait (DT_Tdep_Print_Head *
 	u32      ret;
 	struct dat_event       event;
 
-	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_INFINITE, &event);
+	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_MAX, &event);
 	if (ret != DAT_SUCCESS)
 	{
 	    DT_Tdep_PT_Printf (phead, "Test Error: dapl_event_wait (CONN) failed: %s\n",
@@ -369,7 +369,7 @@ DT_disco_event_wait ( DT_Tdep_Print_Head
 	u32      ret;
 	struct dat_event       event;
 
-	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_INFINITE, &event);
+	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_MAX, &event);
 	if (ret != DAT_SUCCESS)
 	{
 	    DT_Tdep_PT_Printf (phead, "Test Error: dapl_event_wait (DISCONN) failed: %s\n",
@@ -492,7 +492,7 @@ DT_dto_event_wait (DT_Tdep_Print_Head *p
 	u32      ret;
 	struct dat_event       event;
 
-	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_INFINITE, &event);
+	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_MAX, &event);
 	if (ret != DAT_SUCCESS)
 	{
 	    DT_Tdep_PT_Printf (phead, "Test Error: dapl_event_wait (DTO) failed: %s\n",
@@ -536,7 +536,7 @@ DT_rmr_event_wait (DT_Tdep_Print_Head *p
 	u32      ret;
 	struct dat_event       event;
 
-	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_INFINITE, &event);
+	ret = DT_Tdep_evd_wait (evd_handle, DAT_TIMEOUT_MAX, &event);
 	if (ret != DAT_SUCCESS)
 	{
 	    DT_Tdep_PT_Printf (phead, "Test Error: dapl_event_wait (RMR) failed: %s\n",
Index: test/dapltest/test/dapl_client.c
===================================================================
--- test/dapltest/test/dapl_client.c	(revision 2525)
+++ test/dapltest/test/dapl_client.c	(working copy)
@@ -256,7 +256,7 @@ retry:
     ret = dat_ep_connect (ep_handle,
 			 server_netaddr,
 			 SERVER_PORT_NUMBER,
-			 DAT_TIMEOUT_INFINITE,
+			 DAT_TIMEOUT_MAX,
 			 0, (void *) 0,  /* no private data */
 			 params_ptr->ReliabilityLevel,
 			 DAT_CONNECT_DEFAULT_FLAG);
Index: test/dapltest/include/dapl_tdep.h
===================================================================
--- test/dapltest/include/dapl_tdep.h	(revision 2525)
+++ test/dapltest/include/dapl_tdep.h	(working copy)
@@ -56,7 +56,7 @@ DT_Tdep_evd_free (DAT_EVD_HANDLE 	evd_ha
 
 u32
 DT_Tdep_evd_wait (DAT_EVD_HANDLE 	evd_handle,
-		  DAT_TIMEOUT   	timeout,
+		  unsigned long   	timeout,
 		  struct dat_event    	*event);
 u32
 DT_Tdep_evd_dequeue (DAT_EVD_HANDLE	evd_handle,
Index: test/dapltest/include/dapl_proto.h
===================================================================
--- test/dapltest/include/dapl_proto.h	(revision 2525)
+++ test/dapltest/include/dapl_proto.h	(working copy)
@@ -185,7 +185,7 @@ void 			DT_Mdep_Thread_EXIT ( void * thr
 int				DT_Mdep_wait_object_init ( DT_WAIT_OBJECT *wait_obj);
 int 			DT_Mdep_wait_object_wait (
 						    DT_WAIT_OBJECT *wait_obj,
-						     int timeout_val);
+						     unsigned long timeout_val);
 int 			DT_Mdep_wait_object_wakeup ( DT_WAIT_OBJECT *wait_obj);
 int 			DT_Mdep_wait_object_destroy ( DT_WAIT_OBJECT *wait_obj);
 
Index: test/dapltest/include/dapl_transaction_test.h
===================================================================
--- test/dapltest/include/dapl_transaction_test.h	(revision 2525)
+++ test/dapltest/include/dapl_transaction_test.h	(working copy)
@@ -79,7 +79,7 @@ typedef struct
     Transaction_Cmd_t       *cmd;
     struct sockaddr *     remote_ia_addr;
     DAT_CONN_QUAL           base_port;
-    DAT_TIMEOUT             time_out;
+    unsigned long             time_out;
     int               evd_length;
     Thread                  *thread;
 
Index: test/dapltest/mdep/linux/dapl_mdep_user.c
===================================================================
--- test/dapltest/mdep/linux/dapl_mdep_user.c	(revision 2525)
+++ test/dapltest/mdep/linux/dapl_mdep_user.c	(working copy)
@@ -411,7 +411,7 @@ DT_Mdep_wait_object_init (
 int
 DT_Mdep_wait_object_wait (
 	DT_WAIT_OBJECT *wait_obj,
-	 int timeout_val)
+	 unsigned long timeout_val)
 {
     int 		dat_status;
     int 		pthread_status;
Index: test/dapltest/mdep/linux/dapl_mdep_kernel.c
===================================================================
--- test/dapltest/mdep/linux/dapl_mdep_kernel.c	(revision 2525)
+++ test/dapltest/mdep/linux/dapl_mdep_kernel.c	(working copy)
@@ -252,13 +252,13 @@ DT_Mdep_wait_object_init (
 int
 DT_Mdep_wait_object_wait (
 	DT_WAIT_OBJECT *wait_obj,
-	 int timeout_val)
+	 unsigned long timeout_val)
 {
     int     expire;
     int 	dat_status;
 
     dat_status = DAT_SUCCESS;
-    if ( DAT_TIMEOUT_INFINITE == timeout_val)
+    if ( DAT_TIMEOUT_MAX == timeout_val)
     {
 	interruptible_sleep_on (wait_obj);
     }
Index: test/dapltest/kdapl/kdapl_tdep_evd.c
===================================================================
--- test/dapltest/kdapl/kdapl_tdep_evd.c	(revision 2525)
+++ test/dapltest/kdapl/kdapl_tdep_evd.c	(working copy)
@@ -213,7 +213,7 @@ DT_Tdep_evd_dequeue (DAT_EVD_HANDLE evd_
 
 u32
 DT_Tdep_evd_wait (DAT_EVD_HANDLE evd_handle,
-		  DAT_TIMEOUT   timeout,
+		  unsigned long   timeout,
 		  struct dat_event      *dat_event)
 {
     u32  dat_status;
@@ -239,7 +239,7 @@ DT_Tdep_evd_wait (DAT_EVD_HANDLE evd_han
 	return dat_status;
     }
     /* wait for an event */
-    if (timeout == DAT_TIMEOUT_INFINITE) 
+    if (timeout == DAT_TIMEOUT_MAX) 
     {
 	rc = wait_event_interruptible (evd_ptr->wait_object, 
 				       evd_ptr->event_next != NULL);
Index: dat-provider/dapl_ep_connect.c
===================================================================
--- dat-provider/dapl_ep_connect.c	(revision 2525)
+++ dat-provider/dapl_ep_connect.c	(working copy)
@@ -35,7 +35,6 @@
 #include "dapl_ep_util.h"
 #include "dapl_openib_util.h"
 #include "dapl_evd_util.h"
-#include "dapl_timer_util.h"
 
 /*
  * Request a connection be established between the local Endpoint
@@ -44,7 +43,7 @@
  */
 u32 dapl_ep_connect(DAT_EP_HANDLE ep_handle,
 		    struct sockaddr *remote_ia_address,
-		    DAT_CONN_QUAL remote_conn_qual, DAT_TIMEOUT timeout,
+		    DAT_CONN_QUAL remote_conn_qual, unsigned long timeout,
 		    int private_data_size, const void *private_data,
 		    enum dat_qos qos, enum dat_connect_flags connect_flags)
 {
@@ -52,15 +51,14 @@ u32 dapl_ep_connect(DAT_EP_HANDLE ep_han
 	u32 dat_status = DAT_SUCCESS;
 
 	dapl_dbg_log(DAPL_DBG_TYPE_API | DAPL_DBG_TYPE_CM,
-		     "dapl_ep_connect (%p, {%u.%u.%u.%u}, %X, %d, %d, %p, %x, %x)\n",
+		     "dapl_ep_connect(%p, {%u.%u.%u.%u}, %X, %d, %d, %p, %x, %x)\n",
 		     ep_handle,
 		     remote_ia_address->sa_data[2],
 		     remote_ia_address->sa_data[3],
 		     remote_ia_address->sa_data[4],
 		     remote_ia_address->sa_data[5],
-		     remote_conn_qual,
-		     timeout,
-		     private_data_size, private_data, qos, connect_flags);
+		     remote_conn_qual, timeout, private_data_size, private_data,
+		     qos, connect_flags);
 
 	ep_ptr = (struct dapl_ep *)ep_handle;
 
@@ -90,7 +88,7 @@ u32 dapl_ep_connect(DAT_EP_HANDLE ep_han
 		goto bail;
 	}
 	/*
-	 * If the endpoint needs a QP, associated the QP with it.
+	 * If the endpoint needs a QP, associate the QP with it.
 	 * This needs to be done carefully, in order to:
 	 *  * Avoid allocating under a lock.
 	 *  * Not step on data structures being altered by
@@ -242,11 +240,9 @@ u32 dapl_ep_connect(DAT_EP_HANDLE ep_han
 	ep_ptr->param.remote_port_qual = remote_conn_qual;
 	memcpy(ep_ptr->private_data,private_data,private_data_size);
 
-	dat_status = dapl_ib_connect(ep_handle,
-				     remote_ia_address,
-				     remote_conn_qual,
-				     private_data_size,
-				     ep_ptr->private_data);
+	dat_status = dapl_ib_connect(ep_ptr, remote_ia_address,
+				     remote_conn_qual, timeout, 
+				     private_data_size, ep_ptr->private_data);
 
 	if (dat_status != DAT_SUCCESS) {
 		ep_ptr->param.ep_state = DAT_EP_STATE_UNCONNECTED;
@@ -267,33 +263,9 @@ u32 dapl_ep_connect(DAT_EP_HANDLE ep_han
 						       NULL);
 			dat_status = DAT_SUCCESS;
 		}
-	} else {
-		/*
-		 * Acquire the lock and recheck the state of the EP; this
-		 * thread could have been descheduled after issuing the connect
-		 * request and the EP is now connected. Set up a timer if
-		 * necessary.
-		 */
-		spin_lock_irqsave(&ep_ptr->header.lock, ep_ptr->header.flags);
-		if (ep_ptr->param.ep_state == 
-			DAT_EP_STATE_ACTIVE_CONNECTION_PENDING
-		    && timeout != DAT_TIMEOUT_INFINITE) {
-			ep_ptr->cxn_timer = kmalloc(sizeof *ep_ptr->cxn_timer,
-						    GFP_ATOMIC);
-			if (!ep_ptr->cxn_timer) {
-				dat_status = DAT_ERROR(DAT_INSUFFICIENT_RESOURCES,
-						       DAT_RESOURCE_MEMORY);
-				goto bail;
-			}
-
-			dapl_timer_set(ep_ptr->cxn_timer,
-				       dapl_ep_timeout, ep_ptr, timeout);
-		}
-		spin_unlock_irqrestore(&ep_ptr->header.lock, 
-				       ep_ptr->header.flags);
-	}
+	} 
 
-      bail:
+bail:
 	dapl_dbg_log(DAPL_DBG_TYPE_RTN | DAPL_DBG_TYPE_CM,
 		     "dapl_ep_connect () returns 0x%x\n", dat_status);
 
Index: dat-provider/dapl_evd_connection_callb.c
===================================================================
--- dat-provider/dapl_evd_connection_callb.c	(revision 2527)
+++ dat-provider/dapl_evd_connection_callb.c	(working copy)
@@ -32,7 +32,6 @@
 #include "dapl.h"
 #include "dapl_evd_util.h"
 #include "dapl_ep_util.h"
-#include "dapl_timer_util.h"
 
 /*
  * Connection callback function for ACTIVE connection requests; callbacks
@@ -63,15 +62,6 @@ void dapl_evd_connection_callback(struct
 	 */
 	spin_lock_irqsave(&ep_ptr->header.lock, ep_ptr->header.flags);
 
-	/*
-	 * If a connection timer has been set up on this EP, cancel it now
-	 */
-	if (ep_ptr->cxn_timer != NULL) {
-		dapl_timer_cancel(ep_ptr->cxn_timer);
-		kfree(ep_ptr->cxn_timer);
-		ep_ptr->cxn_timer = NULL;
-	}
-
 	switch (event) {
 	case DAT_CONNECTION_EVENT_ESTABLISHED:
 	{
Index: dat-provider/Makefile
===================================================================
--- dat-provider/Makefile	(revision 2525)
+++ dat-provider/Makefile	(working copy)
@@ -77,7 +77,6 @@ PROVIDER_MODULES := \
         dapl_set_consumer_context     	\
         dapl_sp_util                  	\
         dapl_srq                 	\
-        dapl_timer_util 		\
 	dapl_util
 
 PROVIDER_OBJS := $(foreach s, $(PROVIDER_MODULES), $(s).o)
Index: dat-provider/dapl_ep_free.c
===================================================================
--- dat-provider/dapl_ep_free.c	(revision 2525)
+++ dat-provider/dapl_ep_free.c	(working copy)
@@ -34,7 +34,6 @@
 #include "dapl_ep_util.h"
 #include "dapl_openib_util.h"
 #include "dapl_ring_buffer_util.h"
-#include "dapl_timer_util.h"
 
 /*
  * dapl_ep_free
@@ -107,12 +106,6 @@ u32 dapl_ep_free(DAT_EP_HANDLE ep_handle
 	 */
 	spin_lock_irqsave(&ep_ptr->header.lock, ep_ptr->header.flags);
 
-	if (ep_ptr->cxn_timer != NULL) {
-		dapl_timer_cancel(ep_ptr->cxn_timer);
-		kfree(ep_ptr->cxn_timer);
-		ep_ptr->cxn_timer = NULL;
-	}
-
 	/* Remove the EP from the IA */
 	dapl_ia_unlink_ep(ia_ptr, ep_ptr);
 
Index: dat-provider/dapl_provider.c
===================================================================
--- dat-provider/dapl_provider.c	(revision 2525)
+++ dat-provider/dapl_provider.c	(working copy)
@@ -39,7 +39,6 @@
 #include "dapl_mr_util.h"
 #include "dapl_util.h"
 #include "dapl_openib_util.h"
-#include "dapl_timer_util.h"
 
 MODULE_LICENSE("Dual BSD/GPL");
 MODULE_DESCRIPTION("DAT Provider for InfiniBand");
@@ -393,7 +392,6 @@ module_exit(dapl_fini);
 static int __init dapl_init(void)
 {
 	dapl_dbg_log(DAPL_DBG_TYPE_UTIL, "provider started\n");
-	dapl_timer_init();
 	return ib_register_client(&dapl_client);
 }
 
Index: dat-provider/dapl_openib_cm.c
===================================================================
--- dat-provider/dapl_openib_cm.c	(revision 2525)
+++ dat-provider/dapl_openib_cm.c	(working copy)
@@ -38,7 +38,7 @@
 #include "dapl_evd_util.h"
 #include "dapl_cr_util.h"
 
-#define DAPL_IB_RC_RETRY_COUNT      7
+#define DAPL_IB_RC_RETRY_COUNT      0
 #define DAPL_IB_RNR_RETRY_COUNT     6
 #define DAPL_IB_CM_RESPONSE_TIMEOUT 20      /* 4 sec */
 #define DAPL_IB_MAX_CM_RETRIES      4
@@ -291,6 +291,26 @@ static int dapl_cm_passive_cb_handler(st
 	return ret;
 }
 
+/*
+ * approximately transforms microseconds to 4.096us*2^x
+ * 63(+8) is max return
+ */
+static inline u8 dapl_convert_us_to_kookyib(unsigned long us) {
+        unsigned long ms = us/1000UL, converged = 2;
+        u8 i;
+
+        if (2 > ms)
+                return 8;
+
+        for (i = 1; i < 63; i++) {
+                if (converged >= ms)
+                        break;
+                converged = 2*converged;
+        }
+
+        return i+8;
+}
+
 static void dapl_path_comp_handler(u64 req_id, void *context, int rec_num)
 {
 	struct dapl_cm_id *conn = context;
@@ -410,7 +430,7 @@ error:
  */
 u32 dapl_ib_connect(DAT_EP_HANDLE ep_handle,
 		    struct sockaddr *remote_ia_address,
-		    DAT_CONN_QUAL remote_conn_qual,
+		    DAT_CONN_QUAL remote_conn_qual, unsigned long timeout,
 		    int private_data_size, void *private_data)
 {
 	struct dapl_ia *ia_ptr;
@@ -453,7 +473,8 @@ u32 dapl_ib_connect(DAT_EP_HANDLE ep_han
 	conn->param.private_data_len = private_data_size;
 	conn->param.responder_resources = DAPL_IB_TARGET_MAX;
 	conn->param.initiator_depth = DAPL_IB_INITIATOR_DEPTH;
-	conn->param.remote_cm_response_timeout = DAPL_IB_CM_RESPONSE_TIMEOUT;
+	conn->param.remote_cm_response_timeout = 
+					dapl_convert_us_to_kookyib(timeout);
 	conn->param.retry_count = DAPL_IB_RC_RETRY_COUNT;
 	conn->param.rnr_retry_count = DAPL_IB_RNR_RETRY_COUNT;
 	conn->param.local_cm_response_timeout = DAPL_IB_CM_RESPONSE_TIMEOUT;
Index: dat-provider/dapl_openib_util.h
===================================================================
--- dat-provider/dapl_openib_util.h	(revision 2525)
+++ dat-provider/dapl_openib_util.h	(working copy)
@@ -61,7 +61,7 @@ u32 dapl_ib_qp_modify(struct dapl_ia *ia
 
 u32 dapl_ib_connect(DAT_EP_HANDLE ep_handle,
 		    struct sockaddr *remote_ia_address,
-		    DAT_CONN_QUAL remote_conn_qual,
+		    DAT_CONN_QUAL remote_conn_qual, unsigned long timeout,
 		    int private_data_size, void *private_data);
 
 u32 dapl_ib_disconnect(struct dapl_ep *ep_ptr, enum dat_close_flags close_flags);
Index: dat-provider/dapl_ep_util.c
===================================================================
--- dat-provider/dapl_ep_util.c	(revision 2525)
+++ dat-provider/dapl_ep_util.c	(working copy)
@@ -168,9 +168,6 @@ void dapl_ep_dealloc(struct dapl_ep *ep_
 	if (ep_ptr->send_iov)
 		kfree(ep_ptr->send_iov);
 
-	if (ep_ptr->cxn_timer)
-		kfree(ep_ptr->cxn_timer);
-
 	kfree(ep_ptr);
 }
 
@@ -242,32 +239,6 @@ bail:
 }
 
 /*
- * dapl_ep_timeout
- *
- * If this routine is invoked before a connection occurs, generate an
- * event
- */
-void dapl_ep_timeout(void *arg)
-{
-	struct dapl_ep *ep_ptr;
-
-	dapl_dbg_log(DAPL_DBG_TYPE_CM, "--> dapl_ep_timeout! ep %lx\n", arg);
-
-	ep_ptr = (struct dapl_ep *)arg;
-
-	/* reset the EP state */
-	ep_ptr->param.ep_state = DAT_EP_STATE_DISCONNECTED;
-
-	/* Clean up the EP and put the underlying QP into the ERROR state. */
-	dapl_ib_disconnect_clean(ep_ptr, TRUE);
-
-	(void)dapl_evd_post_connection_event((struct dapl_evd *)ep_ptr->param.
-					     connect_evd_handle,
-					     DAT_CONNECTION_EVENT_TIMED_OUT,
-					     (DAT_HANDLE) ep_ptr, 0, NULL);
-}
-
-/*
  * dapl_ep_state_subtype
  *
  * Return the INVALID_STATE connection subtype associated with an
Index: dat-provider/dapl_ep_util.h
===================================================================
--- dat-provider/dapl_ep_util.h	(revision 2525)
+++ dat-provider/dapl_ep_util.h	(working copy)
@@ -52,8 +52,6 @@ extern u32 dapl_ep_post_send_req(DAT_EP_
 				 DAPL_DTO_TYPE dto_type,
 				 enum ib_wr_opcode op_type);
 
-void dapl_ep_timeout(void *arg);
-
 enum dat_return_subtype dapl_ep_state_subtype(struct dapl_ep *ep_ptr);
 
 #endif				/*  DAPL_EP_UTIL_H */
Index: dat-provider/dapl_util.c
===================================================================
--- dat-provider/dapl_util.c	(revision 2525)
+++ dat-provider/dapl_util.c	(working copy)
@@ -33,104 +33,6 @@
 #include "dapl_provider.h"
 #include "dapl_util.h"
 
-/*
- * dapl_os_get_time
- *
- * Return 64 bit value of current time in microseconds.
- *
- * Input:
- *      loc       User location to place current time
- *
- * Returns:
- *	DAT_SUCCESS
- */
-
-u32 dapl_os_get_time(DAPL_OS_TIMEVAL *loc)
-{
-	struct timeval tv;
-
-	do_gettimeofday(&tv);
-	*loc = ((u64) (tv.tv_sec) * 1000000L) + (u64) tv.tv_usec;
-
-	return DAT_SUCCESS;
-}
-
-/*
- * Wait object routines
- */
-
-/*
- * dapl_os_wait_object_init
- *
- * Initialize a wait object
- *
- * Input:
- *	wait_obj
- *
- * Returns:
- *	DAT_SUCCESS
- *	DAT_INTERNAL_ERROR
- */
-u32 dapl_os_wait_object_init(DAPL_OS_WAIT_OBJECT *wait_obj)
-{
-	init_waitqueue_head(&wait_obj->wait_queue);
-
-	return DAT_SUCCESS;
-}
-
-/* Wait on the supplied wait object, up to the specified time_out.
- * A timeout of DAT_TIMEOUT_INFINITE will wait indefinitely.
- * Timeout should be specified in micro seconds.
- *
- * Functional returns:
- *	DAT_SUCCESS -- another thread invoked dapl_os_wait object_wakeup
- * 	DAT_INVALID_STATE -- someone else is already waiting in this wait
- * 	object.
- *			     only one waiter is allowed at a time.
- *	DAT_ABORT -- another thread invoked dapl_os_wait_object_destroy
- *	DAT_TIMEOUT -- the specified time limit was reached.
- */
-
-u32 dapl_os_wait_object_wait(DAPL_OS_WAIT_OBJECT *wait_obj,
-			     DAT_TIMEOUT timeout_val)
-{
-	u32 dat_status = DAT_SUCCESS;
-
-	if (DAT_TIMEOUT_INFINITE == timeout_val) {
-		interruptible_sleep_on(&wait_obj->wait_queue);
-	} else {
-		int expire;
-
-		expire = timeout_val * HZ / 1000000;
-
-		while (expire) {
-			current->state = TASK_INTERRUPTIBLE;
-			expire = schedule_timeout(expire);
-		}
-		dat_status = DAT_ERROR(DAT_TIMEOUT_EXPIRED, 0);
-	}
-	return dat_status;
-}
-
-/*
- * dapl_os_wait_object_wakeup
- *
- * Wakeup a thread waiting on a wait object
- *
- * Input:
- *      wait_obj
- *
- * Returns:
- *	DAT_SUCCESS
- *	DAT_INTERNAL_ERROR
- */
-u32 dapl_os_wait_object_wakeup(DAPL_OS_WAIT_OBJECT *wait_obj)
-{
-	wake_up_interruptible(&wait_obj->wait_queue);
-
-	return DAT_SUCCESS;
-}
-
 #ifdef DAPL_DBG
 
 void dapl_dbg_log(DAPL_DBG_TYPE type, const char *fmt, ...)
Index: dat-provider/dapl_util.h
===================================================================
--- dat-provider/dapl_util.h	(revision 2525)
+++ dat-provider/dapl_util.h	(working copy)
@@ -107,24 +107,6 @@ static inline int dapl_os_atomic_assign(
  */
 
 /*
- * The wait object invariant: Presuming a call to dapl_os_wait_object_wait
- * occurs at some point, there will be at least one wakeup after each call
- * to dapl_os_wait_object_signal.  I.e. Signals are not ignored, though
- * they may be coallesced.
- */
-typedef struct dapl_os_wait_object {
-	wait_queue_head_t wait_queue;
-} DAPL_OS_WAIT_OBJECT;
-
-/* function prototypes */
-u32 dapl_os_wait_object_init(DAPL_OS_WAIT_OBJECT *wait_obj);
-
-u32 dapl_os_wait_object_wait(DAPL_OS_WAIT_OBJECT *wait_obj,
-			     DAT_TIMEOUT timeout_val);
-
-u32 dapl_os_wait_object_wakeup(DAPL_OS_WAIT_OBJECT *wait_obj);
-
-/*
  * Memory Functions
  */
 
@@ -154,15 +136,6 @@ static inline char *dapl_os_strdup(const
 }
 
 /*
- * Timer Functions
- */
-
-typedef u64 DAPL_OS_TIMEVAL;
-
-/* timer function prototype */
-u32 dapl_os_get_time(DAPL_OS_TIMEVAL *);
-
-/*
  * *printf format helper. We use the C string constant concatenation
  * ability to define 64 bit formats, which unfortunatly are non standard
  * in the C compiler world. 
Index: dat-provider/dapl_ep_dup_connect.c
===================================================================
--- dat-provider/dapl_ep_dup_connect.c	(revision 2525)
+++ dat-provider/dapl_ep_dup_connect.c	(working copy)
@@ -32,7 +32,6 @@
 #include "dapl.h"
 #include "dapl_ep_util.h"
 #include "dapl_openib_util.h"
-#include "dapl_timer_util.h"
 
 /*
  * dapl_ep_dup_connect
@@ -63,7 +62,7 @@
  *	DAT_MODEL_NOT_SUPPORTED
  */
 u32 dapl_ep_dup_connect(DAT_EP_HANDLE ep_handle, DAT_EP_HANDLE ep_dup_handle,
-			DAT_TIMEOUT timeout, int private_data_size,
+			unsigned long timeout, int private_data_size,
 			const void *private_data, enum dat_qos qos)
 {
 	struct dapl_ep *ep_dup_ptr;
@@ -114,6 +113,6 @@ u32 dapl_ep_dup_connect(DAT_EP_HANDLE ep
 				     private_data_size,
 				     private_data,
 				     qos, DAT_CONNECT_DEFAULT_FLAG);
-      bail:
+bail:
 	return dat_status;
 }
Index: dat-provider/dapl.h
===================================================================
--- dat-provider/dapl.h	(revision 2525)
+++ dat-provider/dapl.h	(working copy)
@@ -236,14 +236,6 @@ struct dapl_evd {
 	struct dapl_cno		*cno_ptr;
 };
 
-/* DAPL timer entry, used to queue timeouts */
-struct dapl_timer_entry {
-	struct dapl_llist_entry list_entry;	/* link entry on ia struct */
-	DAPL_OS_TIMEVAL expires;
-	void (*function) (void *);
-	void *data;
-};
-
 /* struct dapl_ep maps to DAT_EP_HANDLE */
 struct dapl_ep {
 	struct dapl_header header;
@@ -264,9 +256,6 @@ struct dapl_ep {
 	/* For passive connections we maintain a back pointer to the CR */
 	void *cr_ptr;
 
-	/* pointer to connection timer, if set */
-	struct dapl_timer_entry *cxn_timer;
-
 	/* private data container */
 	char private_data[DAPL_MAX_PRIVATE_DATA_SIZE];
 
@@ -500,14 +489,15 @@ extern u32 dapl_ep_modify(DAT_EP_HANDLE 
 extern u32 dapl_ep_connect(DAT_EP_HANDLE ep_handle,
 			   struct sockaddr *remote_ia_address,
 			   DAT_CONN_QUAL remote_conn_qual,
-			   DAT_TIMEOUT timeout,
+			   unsigned long timeout,
 			   int private_data_size,
 			   const void *private_data,
 			   enum dat_qos quality_of_service,
 			   enum dat_connect_flags connect_flags);
 
 extern u32 dapl_ep_dup_connect(DAT_EP_HANDLE ep_handle,
-			       DAT_EP_HANDLE ep_dup_handle, DAT_TIMEOUT timeout,
+			       DAT_EP_HANDLE ep_dup_handle,
+			       unsigned long timeout,
 			       int private_data_size,
 			       const void *private_data,
 			       enum dat_qos quality_of_service);
Index: patches/alt_dat_provider_makefile
===================================================================
--- patches/alt_dat_provider_makefile	(revision 2525)
+++ patches/alt_dat_provider_makefile	(working copy)
@@ -71,7 +71,6 @@ PROVIDER_MODULES := \
         dapl_set_consumer_context     	\
         dapl_sp_util                  	\
         dapl_srq                 	\
-        dapl_timer_util 		\
 	dapl_util
 
 PROVIDER_OBJS := $(foreach s, $(PROVIDER_MODULES), $(s).o)
@@ -97,4 +96,4 @@ default:
 endif
 
 clean:
-	rm -f *.o *.ko
+	rm -rf *.o *.ko .*.cmd *.mod.* .tmp_versions .*.d .*.o.tmp cscope.out
Index: dat/dat.h
===================================================================
--- dat/dat.h	(revision 2525)
+++ dat/dat.h	(working copy)
@@ -383,10 +383,7 @@ enum dat_completion_flags {
 	DAT_COMPLETION_BARRIER_FENCE_FLAG = 0x08,
 };
 
-typedef u32 DAT_TIMEOUT;	/* microseconds */
-
-/* timeout = infinity */
-#define DAT_TIMEOUT_INFINITE    ((DAT_TIMEOUT) ~0)
+#define DAT_TIMEOUT_MAX ULONG_MAX
 
 /* dat handles */
 typedef void *DAT_HANDLE;
@@ -1139,12 +1136,12 @@ typedef u32 (*DAT_EP_MODIFY_FUNC)(DAT_EP
 				  const struct dat_ep_param *);
 
 typedef u32 (*DAT_EP_CONNECT_FUNC)(DAT_EP_HANDLE, struct sockaddr *,
-				   DAT_CONN_QUAL, DAT_TIMEOUT, int,
+				   DAT_CONN_QUAL, unsigned long timeout, int,
 				   const void *, enum dat_qos,
 				   enum dat_connect_flags);
 
 typedef u32 (*DAT_EP_DUP_CONNECT_FUNC)(DAT_EP_HANDLE, DAT_EP_HANDLE,
-				       DAT_TIMEOUT, int, const void *,
+				       unsigned long timeout, int, const void *,
 				       enum dat_qos);
 
 typedef u32 (*DAT_EP_DISCONNECT_FUNC)(DAT_EP_HANDLE, enum dat_close_flags);
@@ -1493,7 +1490,7 @@ static inline u32 dat_evd_resize(DAT_EVD
 }
 
 static inline u32 dat_ep_connect(DAT_EP_HANDLE ep, struct sockaddr *ia_addr,
-				 DAT_CONN_QUAL conn_qual, DAT_TIMEOUT timeout,
+				 DAT_CONN_QUAL conn_qual, unsigned long timeout,
 				 int private_data_size,
 				 const void *private_data, enum dat_qos qos,
 				 enum dat_connect_flags flags)
@@ -1533,7 +1530,8 @@ static inline u32 dat_ep_disconnect(DAT_
 }
 
 static inline u32 dat_ep_dup_connect(DAT_EP_HANDLE ep, DAT_EP_HANDLE dup_ep,
-				     DAT_TIMEOUT timeout, int private_data_size,
+				     unsigned long timeout,
+				     int private_data_size,
 				     const void *private_data, enum dat_qos qos)
 {
         return DAT_CALL_PROVIDER_FUNC(ep_dup_connect_func, ep, dup_ep, timeout, 


More information about the general mailing list