From 56f2776992285b5aa97d6b80c37977d6fd44510c Mon Sep 17 00:00:00 2001 From: ftillier Date: Wed, 15 Mar 2006 01:00:08 +0000 Subject: [PATCH] [IPoIB] Use regular mutex so PnP callback runs at PASSIVE to support MTHCA driver. Submitted by Leonid Keller (leonid@mellanox.co.il) git-svn-id: svn://openib.tc.cornell.edu/gen1@246 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- trunk/ulp/ipoib/kernel/ipoib_adapter.c | 27 +++++++++++--------------- trunk/ulp/ipoib/kernel/ipoib_adapter.h | 2 +- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/trunk/ulp/ipoib/kernel/ipoib_adapter.c b/trunk/ulp/ipoib/kernel/ipoib_adapter.c index 1ff47f59..e28aff2e 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_adapter.c +++ b/trunk/ulp/ipoib/kernel/ipoib_adapter.c @@ -235,7 +235,8 @@ ipoib_destroy_adapter( * between destruction and AL callbacks (PnP, Query, Destruction). * The lock provides protection */ - cl_mutex_acquire( &p_adapter->mutex ); + KeWaitForMutexObject( + &p_adapter->mutex, Executive, KernelMode, FALSE, NULL ); cl_obj_lock( &p_adapter->obj ); p_adapter->state = IB_PNP_PORT_REMOVE; @@ -248,7 +249,7 @@ ipoib_destroy_adapter( cl_obj_unlock( &p_adapter->obj ); - cl_mutex_release( &p_adapter->mutex ); + KeReleaseMutex( &p_adapter->mutex, FALSE ); cl_obj_destroy( &p_adapter->obj ); @@ -264,7 +265,7 @@ adapter_construct( cl_spinlock_construct( &p_adapter->send_stat_lock ); cl_spinlock_construct( &p_adapter->recv_stat_lock ); cl_qpool_construct( &p_adapter->item_pool ); - cl_mutex_construct( &p_adapter->mutex ); + KeInitializeMutex( &p_adapter->mutex, 0 ); cl_vector_construct( &p_adapter->ip_vector ); cl_perf_construct( &p_adapter->perf ); @@ -316,13 +317,6 @@ adapter_init( return IB_ERROR; } - cl_status = cl_mutex_init( &p_adapter->mutex ); - if( cl_status != CL_SUCCESS ) - { - IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR, - ("cl_mutex_init returned %s\n", cl_status_text[cl_status]) ); - return IB_ERROR; - } /* We manually manage the size and capacity of the vector. */ cl_status = cl_vector_init( &p_adapter->ip_vector, 0, @@ -468,7 +462,6 @@ __adapter_free( cl_qpool_destroy( &p_adapter->item_pool ); cl_spinlock_destroy( &p_adapter->recv_stat_lock ); cl_spinlock_destroy( &p_adapter->send_stat_lock ); - cl_mutex_destroy( &p_adapter->mutex ); cl_obj_deinit( p_obj ); cl_perf_destroy( &p_adapter->perf, TRUE ); @@ -498,13 +491,14 @@ __ipoib_pnp_cb( CL_ASSERT( p_adapter ); /* Synchronize with destruction */ - cl_mutex_acquire( &p_adapter->mutex ); + KeWaitForMutexObject( + &p_adapter->mutex, Executive, KernelMode, FALSE, NULL ); cl_obj_lock( &p_adapter->obj ); old_state = p_adapter->state; cl_obj_unlock( &p_adapter->obj ); if( old_state == IB_PNP_PORT_REMOVE ) { - cl_mutex_release( &p_adapter->mutex ); + KeReleaseMutex( &p_adapter->mutex, FALSE ); IPOIB_TRACE_EXIT( IPOIB_DBG_PNP, ("Aborting - Adapter destroying.\n") ); return IB_NOT_DONE; @@ -646,7 +640,7 @@ __ipoib_pnp_cb( break; } - cl_mutex_release( &p_adapter->mutex ); + KeReleaseMutex( &p_adapter->mutex, FALSE ); IPOIB_EXIT( IPOIB_DBG_PNP ); return status; @@ -767,7 +761,8 @@ __ipoib_pnp_dereg( p_adapter = PARENT_STRUCT( context, ipoib_adapter_t, obj ); /* Synchronize with destruction */ - cl_mutex_acquire( &p_adapter->mutex ); + KeWaitForMutexObject( + &p_adapter->mutex, Executive, KernelMode, FALSE, NULL ); cl_obj_lock( &p_adapter->obj ); @@ -810,7 +805,7 @@ __ipoib_pnp_dereg( /* Dereference the adapter since the previous registration is now gone. */ cl_obj_deref( &p_adapter->obj ); - cl_mutex_release( &p_adapter->mutex ); + KeReleaseMutex( &p_adapter->mutex, FALSE ); IPOIB_EXIT( IPOIB_DBG_INIT ); } diff --git a/trunk/ulp/ipoib/kernel/ipoib_adapter.h b/trunk/ulp/ipoib/kernel/ipoib_adapter.h index d516c9db..066ce03e 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_adapter.h +++ b/trunk/ulp/ipoib/kernel/ipoib_adapter.h @@ -164,7 +164,7 @@ typedef struct _ipoib_adapter cl_qpool_t item_pool; - cl_mutex_t mutex; + KMUTEX mutex; cl_vector_t ip_vector; -- 2.41.0