[ofa-general] [PATCH 1/3] opensm: use malloc instead of cl_qlock_pool in SA processors

Sasha Khapyorsky sashak at voltaire.com
Thu Jan 3 01:41:53 PST 2008


Use regular malloc/free instead of cl_qlock_pool for records allocation
in SA processors. Simple benchmark shows that regular malloc/free is
more than twice faster than cl_qlock_pool allocator and this doesn't
require additional locking (actually it still be faster than non-locking
cl_qpool allocator too).

Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---
 opensm/include/opensm/osm_sa_class_port_info.h  |    4 +-
 opensm/include/opensm/osm_sa_guidinfo_record.h  |    8 +---
 opensm/include/opensm/osm_sa_informinfo.h       |   10 +---
 opensm/include/opensm/osm_sa_lft_record.h       |    8 +---
 opensm/include/opensm/osm_sa_link_record.h      |    7 +--
 opensm/include/opensm/osm_sa_mcmember_record.h  |    4 +-
 opensm/include/opensm/osm_sa_mft_record.h       |    8 +---
 opensm/include/opensm/osm_sa_multipath_record.h |    8 +---
 opensm/include/opensm/osm_sa_node_record.h      |    8 +---
 opensm/include/opensm/osm_sa_path_record.h      |    8 +---
 opensm/include/opensm/osm_sa_pkey_record.h      |    8 +---
 opensm/include/opensm/osm_sa_portinfo_record.h  |    8 +---
 opensm/include/opensm/osm_sa_service_record.h   |    8 +---
 opensm/include/opensm/osm_sa_slvl_record.h      |    8 +---
 opensm/include/opensm/osm_sa_sminfo_record.h    |    4 +-
 opensm/include/opensm/osm_sa_sw_info_record.h   |    3 +-
 opensm/include/opensm/osm_sa_vlarb_record.h     |    8 +---
 opensm/opensm/osm_sa_guidinfo_record.c          |   38 ++++----------
 opensm/opensm/osm_sa_informinfo.c               |   33 +++---------
 opensm/opensm/osm_sa_lft_record.c               |   39 ++++----------
 opensm/opensm/osm_sa_link_record.c              |   33 +++---------
 opensm/opensm/osm_sa_mcmember_record.c          |   38 +++-----------
 opensm/opensm/osm_sa_mft_record.c               |   36 ++++----------
 opensm/opensm/osm_sa_multipath_record.c         |   62 +++++++----------------
 opensm/opensm/osm_sa_node_record.c              |   40 ++++----------
 opensm/opensm/osm_sa_path_record.c              |   49 +++++-------------
 opensm/opensm/osm_sa_pkey_record.c              |   37 ++++----------
 opensm/opensm/osm_sa_portinfo_record.c          |   36 ++++----------
 opensm/opensm/osm_sa_service_record.c           |   49 ++++--------------
 opensm/opensm/osm_sa_slvl_record.c              |   34 +++---------
 opensm/opensm/osm_sa_sminfo_record.c            |   39 ++++----------
 opensm/opensm/osm_sa_sw_info_record.c           |   35 ++++---------
 opensm/opensm/osm_sa_vlarb_record.c             |   41 ++++-----------
 33 files changed, 193 insertions(+), 566 deletions(-)

diff --git a/opensm/include/opensm/osm_sa_class_port_info.h b/opensm/include/opensm/osm_sa_class_port_info.h
index b477cd5..6e4c069 100644
--- a/opensm/include/opensm/osm_sa_class_port_info.h
+++ b/opensm/include/opensm/osm_sa_class_port_info.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -49,8 +49,6 @@
 #define _OSM_CPI_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
-#include <complib/cl_qlockpool.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
diff --git a/opensm/include/opensm/osm_sa_guidinfo_record.h b/opensm/include/opensm/osm_sa_guidinfo_record.h
index b3035c7..c074b7b 100644
--- a/opensm/include/opensm/osm_sa_guidinfo_record.h
+++ b/opensm/include/opensm/osm_sa_guidinfo_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2006-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -48,7 +48,6 @@
 #define _OSM_GIR_RCV_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -100,7 +99,6 @@ typedef struct _osm_gir_rcv {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pool;
 } osm_gir_rcv_t;
 /*
 * FIELDS
@@ -119,10 +117,6 @@ typedef struct _osm_gir_rcv {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	pool
-*		Pool of linkable GUIDInfo Record objects used to generate
-*		the query response.
-*
 * SEE ALSO
 *
 *********/
diff --git a/opensm/include/opensm/osm_sa_informinfo.h b/opensm/include/opensm/osm_sa_informinfo.h
index 5d00dd6..2a4b4ba 100644
--- a/opensm/include/opensm/osm_sa_informinfo.h
+++ b/opensm/include/opensm/osm_sa_informinfo.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -50,9 +50,6 @@
 #define _OSM_SA_INFR_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
-#include <complib/cl_timer.h>
-#include <complib/cl_qlockpool.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -104,7 +101,6 @@ typedef struct _osm_infr_rcv {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pool;
 } osm_infr_rcv_t;
 /*
 * FIELDS
@@ -120,10 +116,6 @@ typedef struct _osm_infr_rcv {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	pool
-*		Pool of linkable InformInfo Record objects used to
-*		generate the query response.
-*
 * SEE ALSO
 *	InformInfo Receiver object
 *********/
diff --git a/opensm/include/opensm/osm_sa_lft_record.h b/opensm/include/opensm/osm_sa_lft_record.h
index 18a43f4..8470490 100644
--- a/opensm/include/opensm/osm_sa_lft_record.h
+++ b/opensm/include/opensm/osm_sa_lft_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -50,7 +50,6 @@
 #define _OSM_LFTR_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -103,7 +102,6 @@ typedef struct _osm_lft {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pool;
 } osm_lftr_rcv_t;
 /*
 * FIELDS
@@ -125,10 +123,6 @@ typedef struct _osm_lft {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	pool
-*		Pool of linkable Linear Forwarding Table Record objects used to
-*               generate the query response.
-*
 * SEE ALSO
 *	Linear Forwarding Table Receiver object
 *********/
diff --git a/opensm/include/opensm/osm_sa_link_record.h b/opensm/include/opensm/osm_sa_link_record.h
index 3104704..d09eb69 100644
--- a/opensm/include/opensm/osm_sa_link_record.h
+++ b/opensm/include/opensm/osm_sa_link_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -49,7 +49,6 @@
 #ifndef _OSM_LR_RCV_H_
 #define _OSM_LR_RCV_H_
 
-#include <complib/cl_qlockpool.h>
 #include <complib/cl_passivelock.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
@@ -102,7 +101,6 @@ typedef struct _osm_lr_rcv {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t lr_pool;
 } osm_lr_rcv_t;
 /*
 * FIELDS
@@ -121,9 +119,6 @@ typedef struct _osm_lr_rcv {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	lr_pool
-*		Pool of link record objects used to generate the query response.
-*
 * SEE ALSO
 *********/
 
diff --git a/opensm/include/opensm/osm_sa_mcmember_record.h b/opensm/include/opensm/osm_sa_mcmember_record.h
index f13bc98..8540a89 100644
--- a/opensm/include/opensm/osm_sa_mcmember_record.h
+++ b/opensm/include/opensm/osm_sa_mcmember_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -50,7 +50,6 @@
 #define _OSM_MCMR_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -105,7 +104,6 @@ typedef struct _osm_mcmr {
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
 	uint16_t mlid_ho;
-	cl_qlock_pool_t pool;
 } osm_mcmr_recv_t;
 
 /*
diff --git a/opensm/include/opensm/osm_sa_mft_record.h b/opensm/include/opensm/osm_sa_mft_record.h
index dd14257..09b922d 100644
--- a/opensm/include/opensm/osm_sa_mft_record.h
+++ b/opensm/include/opensm/osm_sa_mft_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -49,7 +49,6 @@
 #define _OSM_MFTR_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -102,7 +101,6 @@ typedef struct _osm_mft {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pool;
 } osm_mftr_rcv_t;
 /*
 * FIELDS
@@ -124,10 +122,6 @@ typedef struct _osm_mft {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	pool
-*		Pool of linkable Multicast Forwarding Table Record objects used to
-*               generate the query response.
-*
 * SEE ALSO
 *	Multicast Forwarding Table Receiver object
 *********/
diff --git a/opensm/include/opensm/osm_sa_multipath_record.h b/opensm/include/opensm/osm_sa_multipath_record.h
index 8fa1046..afd407d 100644
--- a/opensm/include/opensm/osm_sa_multipath_record.h
+++ b/opensm/include/opensm/osm_sa_multipath_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2006-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -49,8 +49,6 @@
 #define _OSM_MPR_RCV_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
-#include <complib/cl_qlockpool.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -103,7 +101,6 @@ typedef struct _osm_mpr_rcv {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pr_pool;
 } osm_mpr_rcv_t;
 /*
 * FIELDS
@@ -119,9 +116,6 @@ typedef struct _osm_mpr_rcv {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	pr_pool
-*		Pool of multipath record objects used to generate query responses.
-*
 * SEE ALSO
 *	MultiPath Record Receiver object
 *********/
diff --git a/opensm/include/opensm/osm_sa_node_record.h b/opensm/include/opensm/osm_sa_node_record.h
index 36eea27..8f385f8 100644
--- a/opensm/include/opensm/osm_sa_node_record.h
+++ b/opensm/include/opensm/osm_sa_node_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -49,7 +49,6 @@
 #ifndef _OSM_NR_H_
 #define _OSM_NR_H_
 
-#include <complib/cl_qlockpool.h>
 #include <complib/cl_passivelock.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
@@ -101,7 +100,6 @@ typedef struct _osm_nr_recv {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pool;
 } osm_nr_rcv_t;
 /*
 * FIELDS
@@ -120,10 +118,6 @@ typedef struct _osm_nr_recv {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	pool
-*		Pool of linkable node record objects used to generate
-*		the query response.
-*
 * SEE ALSO
 *
 *********/
diff --git a/opensm/include/opensm/osm_sa_path_record.h b/opensm/include/opensm/osm_sa_path_record.h
index 88eb6c3..76d24fc 100644
--- a/opensm/include/opensm/osm_sa_path_record.h
+++ b/opensm/include/opensm/osm_sa_path_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -50,8 +50,6 @@
 #define _OSM_PR_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
-#include <complib/cl_qlockpool.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -104,7 +102,6 @@ typedef struct _osm_pr_rcv {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pr_pool;
 } osm_pr_rcv_t;
 /*
 * FIELDS
@@ -120,9 +117,6 @@ typedef struct _osm_pr_rcv {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	pr_pool
-*		Pool of path record objects used to generate query responses.
-*
 * SEE ALSO
 *	Path Record Receiver object
 *********/
diff --git a/opensm/include/opensm/osm_sa_pkey_record.h b/opensm/include/opensm/osm_sa_pkey_record.h
index 4242a2f..b2f43f0 100644
--- a/opensm/include/opensm/osm_sa_pkey_record.h
+++ b/opensm/include/opensm/osm_sa_pkey_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -37,7 +37,6 @@
 #define _OSM_PKEY_REC_RCV_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -89,7 +88,6 @@ typedef struct _osm_pkey_rec_rcv {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pool;
 } osm_pkey_rec_rcv_t;
 /*
 * FIELDS
@@ -108,10 +106,6 @@ typedef struct _osm_pkey_rec_rcv {
 *  p_lock
 *     Pointer to the serializing lock.
 *
-*  pool
-*     Pool of linkable P_Key Record objects used to generate
-*     the query response.
-*
 * SEE ALSO
 *
 *********/
diff --git a/opensm/include/opensm/osm_sa_portinfo_record.h b/opensm/include/opensm/osm_sa_portinfo_record.h
index 38eabdb..a818f25 100644
--- a/opensm/include/opensm/osm_sa_portinfo_record.h
+++ b/opensm/include/opensm/osm_sa_portinfo_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -50,7 +50,6 @@
 #define _OSM_PIR_RCV_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -102,7 +101,6 @@ typedef struct _osm_pir_rcv {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pool;
 } osm_pir_rcv_t;
 /*
 * FIELDS
@@ -121,10 +119,6 @@ typedef struct _osm_pir_rcv {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	pool
-*		Pool of linkable PortInfo Record objects used to generate
-*		the query response.
-*
 * SEE ALSO
 *
 *********/
diff --git a/opensm/include/opensm/osm_sa_service_record.h b/opensm/include/opensm/osm_sa_service_record.h
index 8884944..43859e0 100644
--- a/opensm/include/opensm/osm_sa_service_record.h
+++ b/opensm/include/opensm/osm_sa_service_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -50,9 +50,7 @@
 #define _OSM_SR_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
 #include <complib/cl_timer.h>
-#include <complib/cl_qlockpool.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -104,7 +102,6 @@ typedef struct _osm_sr_rcv {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t sr_pool;
 	cl_timer_t sr_timer;
 } osm_sr_rcv_t;
 /*
@@ -121,9 +118,6 @@ typedef struct _osm_sr_rcv {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	sr_pool
-*		Pool of Service Record objects used to generate query responses.
-*
 * SEE ALSO
 *	Service Record Receiver object
 *********/
diff --git a/opensm/include/opensm/osm_sa_slvl_record.h b/opensm/include/opensm/osm_sa_slvl_record.h
index c72d5d4..518a0f1 100644
--- a/opensm/include/opensm/osm_sa_slvl_record.h
+++ b/opensm/include/opensm/osm_sa_slvl_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -50,7 +50,6 @@
 #define _OSM_SLVL_REC_RCV_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -102,7 +101,6 @@ typedef struct _osm_slvl_rec_rcv {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pool;
 } osm_slvl_rec_rcv_t;
 /*
 * FIELDS
@@ -121,10 +119,6 @@ typedef struct _osm_slvl_rec_rcv {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	pool
-*		Pool of linkable SLtoVL Mapping Record objects used to generate
-*		the query response.
-*
 * SEE ALSO
 *
 *********/
diff --git a/opensm/include/opensm/osm_sa_sminfo_record.h b/opensm/include/opensm/osm_sa_sminfo_record.h
index ce57925..f4fd1ff 100644
--- a/opensm/include/opensm/osm_sa_sminfo_record.h
+++ b/opensm/include/opensm/osm_sa_sminfo_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -50,7 +50,6 @@
 #define _OSM_SMIR_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -103,7 +102,6 @@ typedef struct _osm_smir {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pool;
 } osm_smir_rcv_t;
 /*
 * FIELDS
diff --git a/opensm/include/opensm/osm_sa_sw_info_record.h b/opensm/include/opensm/osm_sa_sw_info_record.h
index ad1f773..df6f842 100644
--- a/opensm/include/opensm/osm_sa_sw_info_record.h
+++ b/opensm/include/opensm/osm_sa_sw_info_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2006-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -103,7 +103,6 @@ typedef struct _osm_sir_rcv {
 	osm_req_t *p_req;
 	osm_state_mgr_t *p_state_mgr;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pool;
 } osm_sir_rcv_t;
 /*
 * FIELDS
diff --git a/opensm/include/opensm/osm_sa_vlarb_record.h b/opensm/include/opensm/osm_sa_vlarb_record.h
index e823880..1ed8554 100644
--- a/opensm/include/opensm/osm_sa_vlarb_record.h
+++ b/opensm/include/opensm/osm_sa_vlarb_record.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -50,7 +50,6 @@
 #define _OSM_VLARB_REC_RCV_H_
 
 #include <complib/cl_passivelock.h>
-#include <complib/cl_qlist.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_sa_response.h>
@@ -102,7 +101,6 @@ typedef struct _osm_vlarb_rec_rcv {
 	osm_mad_pool_t *p_mad_pool;
 	osm_log_t *p_log;
 	cl_plock_t *p_lock;
-	cl_qlock_pool_t pool;
 } osm_vlarb_rec_rcv_t;
 /*
 * FIELDS
@@ -121,10 +119,6 @@ typedef struct _osm_vlarb_rec_rcv {
 *	p_lock
 *		Pointer to the serializing lock.
 *
-*	pool
-*		Pool of linkable VLArbitration Record objects used to generate
-*		the query response.
-*
 * SEE ALSO
 *
 *********/
diff --git a/opensm/opensm/osm_sa_guidinfo_record.c b/opensm/opensm/osm_sa_guidinfo_record.c
index d955e93..a758888 100644
--- a/opensm/opensm/osm_sa_guidinfo_record.c
+++ b/opensm/opensm/osm_sa_guidinfo_record.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2006-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -62,11 +62,8 @@
 #include <opensm/osm_pkey.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_GIR_RCV_POOL_MIN_SIZE      32
-#define OSM_GIR_RCV_POOL_GROW_SIZE     32
-
 typedef struct _osm_gir_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_guidinfo_record_t rec;
 } osm_gir_item_t;
 
@@ -83,7 +80,6 @@ typedef struct _osm_gir_search_ctxt {
 void osm_gir_rcv_construct(IN osm_gir_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -91,7 +87,6 @@ void osm_gir_rcv_construct(IN osm_gir_rcv_t * const p_rcv)
 void osm_gir_rcv_destroy(IN osm_gir_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_gir_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -104,8 +99,6 @@ osm_gir_rcv_init(IN osm_gir_rcv_t * const p_rcv,
 		 IN osm_subn_t * const p_subn,
 		 IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status;
-
 	OSM_LOG_ENTER(p_log, osm_gir_rcv_init);
 
 	osm_gir_rcv_construct(p_rcv);
@@ -116,14 +109,8 @@ osm_gir_rcv_init(IN osm_gir_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_GIR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_GIR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_gir_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -142,11 +129,11 @@ __osm_gir_rcv_new_gir(IN osm_gir_rcv_t * const p_rcv,
 
 	OSM_LOG_ENTER(p_rcv->p_log, __osm_gir_rcv_new_gir);
 
-	p_rec_item = (osm_gir_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_gir_rcv_new_gir: ERR 5102: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		status = IB_INSUFFICIENT_RESOURCES;
 		goto Exit;
 	}
@@ -158,7 +145,7 @@ __osm_gir_rcv_new_gir(IN osm_gir_rcv_t * const p_rcv,
 			cl_ntoh16(match_lid), block_num);
 	}
 
-	memset(&p_rec_item->rec, 0, sizeof(p_rec_item->rec));
+	memset(p_rec_item, 0, sizeof(*p_rec_item));
 
 	p_rec_item->rec.lid = match_lid;
 	p_rec_item->rec.block_num = block_num;
@@ -166,8 +153,7 @@ __osm_gir_rcv_new_gir(IN osm_gir_rcv_t * const p_rcv,
 		p_rec_item->rec.guid_info.guid[0] =
 		    osm_physp_get_port_guid(p_req_physp);
 
-	cl_qlist_insert_tail(p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -465,8 +451,7 @@ void osm_gir_rcv_process(IN void *ctx, IN void *data)
 			    (osm_gir_item_t *) cl_qlist_remove_head(&rec_list);
 			while (p_rec_item !=
 			       (osm_gir_item_t *) cl_qlist_end(&rec_list)) {
-				cl_qlock_pool_put(&p_rcv->pool,
-						  &p_rec_item->pool_item);
+				free(p_rec_item);
 				p_rec_item = (osm_gir_item_t *)
 				    cl_qlist_remove_head(&rec_list);
 			}
@@ -514,7 +499,7 @@ void osm_gir_rcv_process(IN void *ctx, IN void *data)
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item =
 			    (osm_gir_item_t *) cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -559,10 +544,9 @@ void osm_gir_rcv_process(IN void *ctx, IN void *data)
 	for (i = 0; i < pre_trim_num_rec; i++) {
 		p_rec_item = (osm_gir_item_t *) cl_qlist_remove_head(&rec_list);
 		/* copy only if not trimmed */
-		if (i < num_rec) {
+		if (i < num_rec)
 			*p_resp_rec = p_rec_item->rec;
-		}
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
diff --git a/opensm/opensm/osm_sa_informinfo.c b/opensm/opensm/osm_sa_informinfo.c
index 71332dc..db58bc0 100644
--- a/opensm/opensm/osm_sa_informinfo.c
+++ b/opensm/opensm/osm_sa_informinfo.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -66,11 +66,8 @@
 #include <opensm/osm_inform.h>
 #include <opensm/osm_pkey.h>
 
-#define OSM_IIR_RCV_POOL_MIN_SIZE      32
-#define OSM_IIR_RCV_POOL_GROW_SIZE     32
-
 typedef struct _osm_iir_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_inform_info_record_t rec;
 } osm_iir_item_t;
 
@@ -89,7 +86,6 @@ typedef struct _osm_iir_search_ctxt {
 void osm_infr_rcv_construct(IN osm_infr_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -99,7 +95,6 @@ void osm_infr_rcv_destroy(IN osm_infr_rcv_t * const p_rcv)
 	CL_ASSERT(p_rcv);
 
 	OSM_LOG_ENTER(p_rcv->p_log, osm_infr_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -112,8 +107,6 @@ osm_infr_rcv_init(IN osm_infr_rcv_t * const p_rcv,
 		  IN osm_subn_t * const p_subn,
 		  IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status = IB_ERROR;
-
 	OSM_LOG_ENTER(p_log, osm_infr_rcv_init);
 
 	osm_infr_rcv_construct(p_rcv);
@@ -124,14 +117,8 @@ osm_infr_rcv_init(IN osm_infr_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_IIR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_IIR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_iir_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_rcv->p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -392,18 +379,17 @@ __osm_sa_inform_info_rec_by_comp_mask(IN osm_infr_rcv_t * const p_rcv,
 		goto Exit;
 	}
 
-	p_rec_item = (osm_iir_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_sa_inform_info_rec_by_comp_mask: ERR 430E: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		goto Exit;
 	}
 
 	memcpy((void *)&p_rec_item->rec, (void *)&p_infr->inform_record,
 	       sizeof(ib_inform_info_record_t));
-	cl_qlist_insert_tail(p_ctxt->p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_ctxt->p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -519,8 +505,7 @@ osm_infr_rcv_process_get_method(IN osm_infr_rcv_t * const p_rcv,
 			    (osm_iir_item_t *) cl_qlist_remove_head(&rec_list);
 			while (p_rec_item !=
 			       (osm_iir_item_t *) cl_qlist_end(&rec_list)) {
-				cl_qlock_pool_put(&p_rcv->pool,
-						  &p_rec_item->pool_item);
+				free(p_rec_item);
 				p_rec_item = (osm_iir_item_t *)
 				    cl_qlist_remove_head(&rec_list);
 			}
@@ -565,7 +550,7 @@ osm_infr_rcv_process_get_method(IN osm_infr_rcv_t * const p_rcv,
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item =
 			    (osm_iir_item_t *) cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -619,7 +604,7 @@ osm_infr_rcv_process_get_method(IN osm_infr_rcv_t * const p_rcv,
 			for (j = 0; j < 4; j++)
 				p_resp_rec->pad[j] = 0;
 		}
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
diff --git a/opensm/opensm/osm_sa_lft_record.c b/opensm/opensm/osm_sa_lft_record.c
index e645569..5f3f208 100644
--- a/opensm/opensm/osm_sa_lft_record.c
+++ b/opensm/opensm/osm_sa_lft_record.c
@@ -60,11 +60,8 @@
 #include <opensm/osm_pkey.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_LFTR_RCV_POOL_MIN_SIZE      32
-#define OSM_LFTR_RCV_POOL_GROW_SIZE     32
-
 typedef struct _osm_lftr_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_lft_record_t rec;
 } osm_lftr_item_t;
 
@@ -81,7 +78,6 @@ typedef struct _osm_lftr_search_ctxt {
 void osm_lftr_rcv_construct(IN osm_lftr_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -89,7 +85,6 @@ void osm_lftr_rcv_construct(IN osm_lftr_rcv_t * const p_rcv)
 void osm_lftr_rcv_destroy(IN osm_lftr_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_lftr_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -102,8 +97,6 @@ osm_lftr_rcv_init(IN osm_lftr_rcv_t * const p_rcv,
 		  IN osm_subn_t * const p_subn,
 		  IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status;
-
 	OSM_LOG_ENTER(p_log, osm_lftr_rcv_init);
 
 	osm_lftr_rcv_construct(p_rcv);
@@ -114,14 +107,8 @@ osm_lftr_rcv_init(IN osm_lftr_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_LFTR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_LFTR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_lftr_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -137,16 +124,16 @@ __osm_lftr_rcv_new_lftr(IN osm_lftr_rcv_t * const p_rcv,
 
 	OSM_LOG_ENTER(p_rcv->p_log, __osm_lftr_rcv_new_lftr);
 
-	p_rec_item = (osm_lftr_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_lftr_rcv_new_lftr: ERR 4402: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		status = IB_INSUFFICIENT_RESOURCES;
 		goto Exit;
 	}
 
-	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG)) {
+	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG))
 		osm_log(p_rcv->p_log, OSM_LOG_DEBUG,
 			"__osm_lftr_rcv_new_lftr: "
 			"New LinearForwardingTable: sw 0x%016" PRIx64
@@ -154,9 +141,8 @@ __osm_lftr_rcv_new_lftr(IN osm_lftr_rcv_t * const p_rcv,
 			cl_ntoh64(osm_node_get_node_guid(p_sw->p_node)),
 			cl_ntoh16(block), cl_ntoh16(lid)
 		    );
-	}
 
-	memset(&p_rec_item->rec, 0, sizeof(ib_lft_record_t));
+	memset(p_rec_item, 0, sizeof(*p_rec_item));
 
 	p_rec_item->rec.lid = lid;
 	p_rec_item->rec.block_num = block;
@@ -165,8 +151,7 @@ __osm_lftr_rcv_new_lftr(IN osm_lftr_rcv_t * const p_rcv,
 	osm_switch_get_fwd_tbl_block(p_sw, cl_ntoh16(block),
 				     p_rec_item->rec.lft);
 
-	cl_qlist_insert_tail(p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -369,8 +354,7 @@ void osm_lftr_rcv_process(IN void *ctx, IN void *data)
 			    (osm_lftr_item_t *) cl_qlist_remove_head(&rec_list);
 			while (p_rec_item !=
 			       (osm_lftr_item_t *) cl_qlist_end(&rec_list)) {
-				cl_qlock_pool_put(&p_rcv->pool,
-						  &p_rec_item->pool_item);
+				free(p_rec_item);
 				p_rec_item = (osm_lftr_item_t *)
 				    cl_qlist_remove_head(&rec_list);
 			}
@@ -418,7 +402,7 @@ void osm_lftr_rcv_process(IN void *ctx, IN void *data)
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item =
 			    (osm_lftr_item_t *) cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -465,10 +449,9 @@ void osm_lftr_rcv_process(IN void *ctx, IN void *data)
 		p_rec_item =
 		    (osm_lftr_item_t *) cl_qlist_remove_head(&rec_list);
 		/* copy only if not trimmed */
-		if (i < num_rec) {
+		if (i < num_rec)
 			*p_resp_rec = p_rec_item->rec;
-		}
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
diff --git a/opensm/opensm/osm_sa_link_record.c b/opensm/opensm/osm_sa_link_record.c
index a6bdc8f..ba239be 100644
--- a/opensm/opensm/osm_sa_link_record.c
+++ b/opensm/opensm/osm_sa_link_record.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -61,11 +61,8 @@
 #include <opensm/osm_pkey.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_LR_RCV_POOL_MIN_SIZE    64
-#define OSM_LR_RCV_POOL_GROW_SIZE   64
-
 typedef struct _osm_lr_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_link_record_t link_rec;
 } osm_lr_item_t;
 
@@ -74,7 +71,6 @@ typedef struct _osm_lr_item {
 void osm_lr_rcv_construct(IN osm_lr_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->lr_pool);
 }
 
 /**********************************************************************
@@ -82,7 +78,6 @@ void osm_lr_rcv_construct(IN osm_lr_rcv_t * const p_rcv)
 void osm_lr_rcv_destroy(IN osm_lr_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_lr_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->lr_pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -95,8 +90,6 @@ osm_lr_rcv_init(IN osm_lr_rcv_t * const p_rcv,
 		IN osm_subn_t * const p_subn,
 		IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status = IB_SUCCESS;
-
 	OSM_LOG_ENTER(p_log, osm_lr_rcv_init);
 
 	osm_lr_rcv_construct(p_rcv);
@@ -107,14 +100,8 @@ osm_lr_rcv_init(IN osm_lr_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	status = cl_qlock_pool_init(&p_rcv->lr_pool,
-				    OSM_LR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_LR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_lr_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_rcv->p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -128,7 +115,7 @@ __osm_lr_rcv_build_physp_link(IN osm_lr_rcv_t * const p_rcv,
 {
 	osm_lr_item_t *p_lr_item;
 
-	p_lr_item = (osm_lr_item_t *) cl_qlock_pool_get(&p_rcv->lr_pool);
+	p_lr_item = malloc(sizeof(*p_lr_item));
 	if (p_lr_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_lr_rcv_build_physp_link: ERR 1801: "
@@ -141,13 +128,14 @@ __osm_lr_rcv_build_physp_link(IN osm_lr_rcv_t * const p_rcv,
 			cl_ntoh16(from_lid), cl_ntoh16(to_lid));
 		return;
 	}
+	memset(p_lr_item, 0, sizeof(*p_lr_item));
 
 	p_lr_item->link_rec.from_port_num = from_port;
 	p_lr_item->link_rec.to_port_num = to_port;
 	p_lr_item->link_rec.to_lid = to_lid;
 	p_lr_item->link_rec.from_lid = from_lid;
 
-	cl_qlist_insert_tail(p_list, (cl_list_item_t *) & p_lr_item->pool_item);
+	cl_qlist_insert_tail(p_list, &p_lr_item->list_item);
 }
 
 /**********************************************************************
@@ -560,8 +548,7 @@ __osm_lr_rcv_respond(IN osm_lr_rcv_t * const p_rcv,
 		/* need to set the mem free ... */
 		p_lr_item = (osm_lr_item_t *) cl_qlist_remove_head(p_list);
 		while (p_lr_item != (osm_lr_item_t *) cl_qlist_end(p_list)) {
-			cl_qlock_pool_put(&p_rcv->lr_pool,
-					  &p_lr_item->pool_item);
+			free(p_lr_item);
 			p_lr_item =
 			    (osm_lr_item_t *) cl_qlist_remove_head(p_list);
 		}
@@ -600,8 +587,7 @@ __osm_lr_rcv_respond(IN osm_lr_rcv_t * const p_rcv,
 		/* Release the quick pool items */
 		p_lr_item = (osm_lr_item_t *) cl_qlist_remove_head(p_list);
 		while (p_lr_item != (osm_lr_item_t *) cl_qlist_end(p_list)) {
-			cl_qlock_pool_put(&p_rcv->lr_pool,
-					  &p_lr_item->pool_item);
+			free(p_lr_item);
 			p_lr_item =
 			    (osm_lr_item_t *) cl_qlist_remove_head(p_list);
 		}
@@ -654,8 +640,7 @@ __osm_lr_rcv_respond(IN osm_lr_rcv_t * const p_rcv,
 				*p_resp_lr = p_lr_item->link_rec;
 				num_copied++;
 			}
-			cl_qlock_pool_put(&p_rcv->lr_pool,
-					  &p_lr_item->pool_item);
+			free(p_lr_item);
 			p_resp_lr++;
 			p_lr_item =
 			    (osm_lr_item_t *) cl_qlist_remove_head(p_list);
diff --git a/opensm/opensm/osm_sa_mcmember_record.c b/opensm/opensm/osm_sa_mcmember_record.c
index 5d5fb8d..ddb1ca5 100644
--- a/opensm/opensm/osm_sa_mcmember_record.c
+++ b/opensm/opensm/osm_sa_mcmember_record.c
@@ -70,11 +70,8 @@
 #include <opensm/osm_inform.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_MCMR_RCV_POOL_MIN_SIZE     32
-#define OSM_MCMR_RCV_POOL_GROW_SIZE    32
-
 typedef struct _osm_mcmr_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_member_rec_t rec;
 } osm_mcmr_item_t;
 
@@ -93,7 +90,6 @@ typedef struct osm_sa_mcmr_search_ctxt {
 void osm_mcmr_rcv_construct(IN osm_mcmr_recv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -103,9 +99,6 @@ void osm_mcmr_rcv_destroy(IN osm_mcmr_recv_t * const p_rcv)
 	CL_ASSERT(p_rcv);
 
 	OSM_LOG_ENTER(p_rcv->p_log, osm_mcmr_rcv_destroy);
-
-	cl_qlock_pool_destroy(&p_rcv->pool);
-
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -119,8 +112,6 @@ osm_mcmr_rcv_init(IN osm_sm_t * const p_sm,
 		  IN osm_subn_t * const p_subn,
 		  IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status = IB_SUCCESS;
-
 	OSM_LOG_ENTER(p_log, osm_mcmr_rcv_init);
 
 	osm_mcmr_rcv_construct(p_rcv);
@@ -133,18 +124,8 @@ osm_mcmr_rcv_init(IN osm_sm_t * const p_sm,
 	p_rcv->p_mad_pool = p_mad_pool;
 	p_rcv->mlid_ho = 0xC000;
 
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_MCMR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_MCMR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_mcmr_item_t), NULL, NULL, NULL);
-	if (status != CL_SUCCESS) {
-		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
-			"osm_mcmr_rcv_init: ERR 1B02: "
-			"qlock pool init failed (%d)\n", status);
-	}
 	OSM_LOG_EXIT(p_rcv->p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -1727,22 +1708,21 @@ __osm_mcmr_rcv_new_mcmr(IN osm_mcmr_recv_t * const p_rcv,
 
 	OSM_LOG_ENTER(p_rcv->p_log, __osm_mcmr_rcv_new_mcmr);
 
-	p_rec_item = (osm_mcmr_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_mcmr_rcv_new_mcmr: ERR 1B15: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		status = IB_INSUFFICIENT_RESOURCES;
 		goto Exit;
 	}
 
-	memset(&p_rec_item->rec, 0, sizeof(p_rec_item->rec));
+	memset(p_rec_item, 0, sizeof(*p_rec_item));
 
 	/* HACK: Untrusted requesters should result with 0 Join
 	   State, Port Guid, and Proxy */
 	p_rec_item->rec = *p_rcvd_rec;
-	cl_qlist_insert_tail(p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -2023,7 +2003,7 @@ __osm_mcmr_query_mgrp(IN osm_mcmr_recv_t * const p_rcv,
 		    (osm_mcmr_item_t *) cl_qlist_remove_head(&rec_list);
 		while (p_rec_item !=
 		       (osm_mcmr_item_t *) cl_qlist_end(&rec_list)) {
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 			p_rec_item =
 			    (osm_mcmr_item_t *) cl_qlist_remove_head(&rec_list);
 		}
@@ -2070,7 +2050,7 @@ __osm_mcmr_query_mgrp(IN osm_mcmr_recv_t * const p_rcv,
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item =
 			    (osm_mcmr_item_t *) cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -2134,7 +2114,7 @@ __osm_mcmr_query_mgrp(IN osm_mcmr_recv_t * const p_rcv,
 				p_resp_rec->proxy_join = 0;
 			}
 		}
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
diff --git a/opensm/opensm/osm_sa_mft_record.c b/opensm/opensm/osm_sa_mft_record.c
index 3968304..f9ac527 100644
--- a/opensm/opensm/osm_sa_mft_record.c
+++ b/opensm/opensm/osm_sa_mft_record.c
@@ -59,11 +59,8 @@
 #include <opensm/osm_pkey.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_MFTR_RCV_POOL_MIN_SIZE      32
-#define OSM_MFTR_RCV_POOL_GROW_SIZE     32
-
 typedef struct _osm_mftr_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_mft_record_t rec;
 } osm_mftr_item_t;
 
@@ -80,7 +77,6 @@ typedef struct _osm_mftr_search_ctxt {
 void osm_mftr_rcv_construct(IN osm_mftr_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -88,7 +84,6 @@ void osm_mftr_rcv_construct(IN osm_mftr_rcv_t * const p_rcv)
 void osm_mftr_rcv_destroy(IN osm_mftr_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_mftr_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -101,8 +96,6 @@ osm_mftr_rcv_init(IN osm_mftr_rcv_t * const p_rcv,
 		  IN osm_subn_t * const p_subn,
 		  IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status;
-
 	OSM_LOG_ENTER(p_log, osm_mftr_rcv_init);
 
 	osm_mftr_rcv_construct(p_rcv);
@@ -113,14 +106,8 @@ osm_mftr_rcv_init(IN osm_mftr_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_MFTR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_MFTR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_mftr_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -138,11 +125,11 @@ __osm_mftr_rcv_new_mftr(IN osm_mftr_rcv_t * const p_rcv,
 
 	OSM_LOG_ENTER(p_rcv->p_log, __osm_mftr_rcv_new_mftr);
 
-	p_rec_item = (osm_mftr_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_mftr_rcv_new_mftr: ERR 4A02: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		status = IB_INSUFFICIENT_RESOURCES;
 		goto Exit;
 	}
@@ -160,7 +147,7 @@ __osm_mftr_rcv_new_mftr(IN osm_mftr_rcv_t * const p_rcv,
 	position_block_num = ((uint16_t) position << 12) |
 	    (block & IB_MCAST_BLOCK_ID_MASK_HO);
 
-	memset(&p_rec_item->rec, 0, sizeof(ib_mft_record_t));
+	memset(p_rec_item, 0, sizeof(*p_rec_item));
 
 	p_rec_item->rec.lid = lid;
 	p_rec_item->rec.position_block_num = cl_hton16(position_block_num);
@@ -168,8 +155,7 @@ __osm_mftr_rcv_new_mftr(IN osm_mftr_rcv_t * const p_rcv,
 	/* copy the mft block */
 	osm_switch_get_mft_block(p_sw, block, position, p_rec_item->rec.mft);
 
-	cl_qlist_insert_tail(p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -399,8 +385,7 @@ void osm_mftr_rcv_process(IN void *ctx, IN void *data)
 			    (osm_mftr_item_t *) cl_qlist_remove_head(&rec_list);
 			while (p_rec_item !=
 			       (osm_mftr_item_t *) cl_qlist_end(&rec_list)) {
-				cl_qlock_pool_put(&p_rcv->pool,
-						  &p_rec_item->pool_item);
+				free(p_rec_item);
 				p_rec_item = (osm_mftr_item_t *)
 				    cl_qlist_remove_head(&rec_list);
 			}
@@ -448,7 +433,7 @@ void osm_mftr_rcv_process(IN void *ctx, IN void *data)
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item =
 			    (osm_mftr_item_t *) cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -495,10 +480,9 @@ void osm_mftr_rcv_process(IN void *ctx, IN void *data)
 		p_rec_item =
 		    (osm_mftr_item_t *) cl_qlist_remove_head(&rec_list);
 		/* copy only if not trimmed */
-		if (i < num_rec) {
+		if (i < num_rec)
 			*p_resp_rec = p_rec_item->rec;
-		}
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
diff --git a/opensm/opensm/osm_sa_multipath_record.c b/opensm/opensm/osm_sa_multipath_record.c
index a37b726..6851cce 100644
--- a/opensm/opensm/osm_sa_multipath_record.c
+++ b/opensm/opensm/osm_sa_multipath_record.c
@@ -67,13 +67,10 @@
 #include <opensm/osm_qos_policy.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_MPR_RCV_POOL_MIN_SIZE	64
-#define OSM_MPR_RCV_POOL_GROW_SIZE	64
-
 #define OSM_SA_MPR_MAX_NUM_PATH        127
 
 typedef struct _osm_mpr_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	const osm_port_t *p_src_port;
 	const osm_port_t *p_dest_port;
 	int hops;
@@ -95,7 +92,6 @@ typedef struct _osm_path_parms {
 void osm_mpr_rcv_construct(IN osm_mpr_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pr_pool);
 }
 
 /**********************************************************************
@@ -103,7 +99,6 @@ void osm_mpr_rcv_construct(IN osm_mpr_rcv_t * const p_rcv)
 void osm_mpr_rcv_destroy(IN osm_mpr_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_mpr_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pr_pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -116,8 +111,6 @@ osm_mpr_rcv_init(IN osm_mpr_rcv_t * const p_rcv,
 		 IN osm_subn_t * const p_subn,
 		 IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status;
-
 	OSM_LOG_ENTER(p_log, osm_mpr_rcv_init);
 
 	osm_mpr_rcv_construct(p_rcv);
@@ -128,14 +121,8 @@ osm_mpr_rcv_init(IN osm_mpr_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	status = cl_qlock_pool_init(&p_rcv->pr_pool,
-				    OSM_MPR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_MPR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_mpr_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_rcv->p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -905,20 +892,21 @@ __osm_mpr_rcv_get_lid_pair_path(IN osm_mpr_rcv_t * const p_rcv,
 			"Src LID 0x%X, Dest LID 0x%X\n",
 			src_lid_ho, dest_lid_ho);
 
-	p_pr_item = (osm_mpr_item_t *) cl_qlock_pool_get(&p_rcv->pr_pool);
+	p_pr_item = malloc(sizeof(*p_pr_item));
 	if (p_pr_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_mpr_rcv_get_lid_pair_path: ERR 4501: "
 			"Unable to allocate path record\n");
 		goto Exit;
 	}
+	memset(p_pr_item, 0, sizeof(*p_pr_item));
 
 	status = __osm_mpr_rcv_get_path_parms(p_rcv, p_mpr, p_src_port,
 					      p_dest_port, dest_lid_ho,
 					      comp_mask, &path_parms);
 
 	if (status != IB_SUCCESS) {
-		cl_qlock_pool_put(&p_rcv->pr_pool, &p_pr_item->pool_item);
+		free(p_pr_item);
 		p_pr_item = NULL;
 		goto Exit;
 	}
@@ -942,8 +930,7 @@ __osm_mpr_rcv_get_lid_pair_path(IN osm_mpr_rcv_t * const p_rcv,
 				"__osm_mpr_rcv_get_lid_pair_path: "
 				"Requested reversible path but failed to get one\n");
 
-			cl_qlock_pool_put(&p_rcv->pr_pool,
-					  &p_pr_item->pool_item);
+			free(p_pr_item);
 			p_pr_item = NULL;
 			goto Exit;
 		}
@@ -1084,9 +1071,7 @@ __osm_mpr_rcv_get_port_pair_paths(IN osm_mpr_rcv_t * const p_rcv,
 							    preference);
 
 		if (p_pr_item) {
-			cl_qlist_insert_tail(p_list,
-					     (cl_list_item_t *) & p_pr_item->
-					     pool_item);
+			cl_qlist_insert_tail(p_list, &p_pr_item->list_item);
 			++path_num;
 		}
 
@@ -1152,9 +1137,7 @@ __osm_mpr_rcv_get_port_pair_paths(IN osm_mpr_rcv_t * const p_rcv,
 							    preference);
 
 		if (p_pr_item) {
-			cl_qlist_insert_tail(p_list,
-					     (cl_list_item_t *) & p_pr_item->
-					     pool_item);
+			cl_qlist_insert_tail(p_list, &p_pr_item->list_item);
 			++path_num;
 		}
 	}
@@ -1471,14 +1454,10 @@ __osm_mpr_rcv_get_apm_paths(IN osm_mpr_rcv_t * const p_rcv,
 			matrix[0][0]->path_rec.dlid, matrix[0][0]->hops,
 			matrix[1][1]->path_rec.slid,
 			matrix[1][1]->path_rec.dlid, matrix[1][1]->hops);
-		cl_qlist_insert_tail(p_list,
-				     (cl_list_item_t *) & matrix[0][0]->
-				     pool_item);
-		cl_qlist_insert_tail(p_list,
-				     (cl_list_item_t *) & matrix[1][1]->
-				     pool_item);
-		cl_qlock_pool_put(&p_rcv->pr_pool, &matrix[0][1]->pool_item);
-		cl_qlock_pool_put(&p_rcv->pr_pool, &matrix[1][0]->pool_item);
+		cl_qlist_insert_tail(p_list, &matrix[0][0]->list_item);
+		cl_qlist_insert_tail(p_list, &matrix[1][1]->list_item);
+		free(matrix[0][1]);
+		free(matrix[1][0]);
 	} else {
 		/* Diag B */
 		osm_log(p_rcv->p_log, OSM_LOG_DEBUG,
@@ -1489,14 +1468,10 @@ __osm_mpr_rcv_get_apm_paths(IN osm_mpr_rcv_t * const p_rcv,
 			matrix[0][1]->path_rec.dlid, matrix[0][1]->hops,
 			matrix[1][0]->path_rec.slid,
 			matrix[1][0]->path_rec.dlid, matrix[1][0]->hops);
-		cl_qlist_insert_tail(p_list,
-				     (cl_list_item_t *) & matrix[0][1]->
-				     pool_item);
-		cl_qlist_insert_tail(p_list,
-				     (cl_list_item_t *) & matrix[1][0]->
-				     pool_item);
-		cl_qlock_pool_put(&p_rcv->pr_pool, &matrix[0][0]->pool_item);
-		cl_qlock_pool_put(&p_rcv->pr_pool, &matrix[1][1]->pool_item);
+		cl_qlist_insert_tail(p_list, &matrix[0][1]->list_item);
+		cl_qlist_insert_tail(p_list, &matrix[1][0]->list_item);
+		free(matrix[0][0]);
+		free(matrix[1][1]);
 	}
 
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -1598,8 +1573,7 @@ __osm_mpr_rcv_respond(IN osm_mpr_rcv_t * const p_rcv,
 		for (i = 0; i < num_rec; i++) {
 			p_mpr_item =
 			    (osm_mpr_item_t *) cl_qlist_remove_head(p_list);
-			cl_qlock_pool_put(&p_rcv->pr_pool,
-					  &p_mpr_item->pool_item);
+			free(p_mpr_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -1634,7 +1608,7 @@ __osm_mpr_rcv_respond(IN osm_mpr_rcv_t * const p_rcv,
 		/* Copy the Path Records from the list into the MAD */
 		*p_resp_pr = p_mpr_item->path_rec;
 
-		cl_qlock_pool_put(&p_rcv->pr_pool, &p_mpr_item->pool_item);
+		free(p_mpr_item);
 		p_resp_pr++;
 	}
 
diff --git a/opensm/opensm/osm_sa_node_record.c b/opensm/opensm/osm_sa_node_record.c
index b94d005..e78e827 100644
--- a/opensm/opensm/osm_sa_node_record.c
+++ b/opensm/opensm/osm_sa_node_record.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -60,11 +60,8 @@
 #include <opensm/osm_pkey.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_NR_RCV_POOL_MIN_SIZE    32
-#define OSM_NR_RCV_POOL_GROW_SIZE   32
-
 typedef struct _osm_nr_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_node_record_t rec;
 } osm_nr_item_t;
 
@@ -81,7 +78,6 @@ typedef struct _osm_nr_search_ctxt {
 void osm_nr_rcv_construct(IN osm_nr_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -89,7 +85,6 @@ void osm_nr_rcv_construct(IN osm_nr_rcv_t * const p_rcv)
 void osm_nr_rcv_destroy(IN osm_nr_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_nr_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -102,8 +97,6 @@ osm_nr_rcv_init(IN osm_nr_rcv_t * const p_rcv,
 		IN osm_subn_t * const p_subn,
 		IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status;
-
 	OSM_LOG_ENTER(p_log, osm_nr_rcv_init);
 
 	osm_nr_rcv_construct(p_rcv);
@@ -114,14 +107,8 @@ osm_nr_rcv_init(IN osm_nr_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_NR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_NR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_nr_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -137,16 +124,16 @@ __osm_nr_rcv_new_nr(IN osm_nr_rcv_t * const p_rcv,
 
 	OSM_LOG_ENTER(p_rcv->p_log, __osm_nr_rcv_new_nr);
 
-	p_rec_item = (osm_nr_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_nr_rcv_new_nr: ERR 1D02: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		status = IB_INSUFFICIENT_RESOURCES;
 		goto Exit;
 	}
 
-	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG)) {
+	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG))
 		osm_log(p_rcv->p_log, OSM_LOG_DEBUG,
 			"__osm_nr_rcv_new_nr: "
 			"New NodeRecord: node 0x%016" PRIx64
@@ -154,9 +141,8 @@ __osm_nr_rcv_new_nr(IN osm_nr_rcv_t * const p_rcv,
 			cl_ntoh64(osm_node_get_node_guid(p_node)),
 			cl_ntoh64(port_guid), cl_ntoh16(lid)
 		    );
-	}
 
-	memset(&p_rec_item->rec, 0, sizeof(ib_node_record_t));
+	memset(p_rec_item, 0, sizeof(*p_rec_item));
 
 	p_rec_item->rec.lid = lid;
 
@@ -164,8 +150,7 @@ __osm_nr_rcv_new_nr(IN osm_nr_rcv_t * const p_rcv,
 	p_rec_item->rec.node_info.port_guid = port_guid;
 	memcpy(&(p_rec_item->rec.node_desc), &(p_node->node_desc),
 	       IB_NODE_DESCRIPTION_SIZE);
-	cl_qlist_insert_tail(p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -459,7 +444,7 @@ void osm_nr_rcv_process(IN void *ctx, IN void *data)
 		/* need to set the mem free ... */
 		p_rec_item = (osm_nr_item_t *) cl_qlist_remove_head(&rec_list);
 		while (p_rec_item != (osm_nr_item_t *) cl_qlist_end(&rec_list)) {
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 			p_rec_item =
 			    (osm_nr_item_t *) cl_qlist_remove_head(&rec_list);
 		}
@@ -506,7 +491,7 @@ void osm_nr_rcv_process(IN void *ctx, IN void *data)
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item =
 			    (osm_nr_item_t *) cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -551,10 +536,9 @@ void osm_nr_rcv_process(IN void *ctx, IN void *data)
 	for (i = 0; i < pre_trim_num_rec; i++) {
 		p_rec_item = (osm_nr_item_t *) cl_qlist_remove_head(&rec_list);
 		/* copy only if not trimmed */
-		if (i < num_rec) {
+		if (i < num_rec)
 			*p_resp_rec = p_rec_item->rec;
-		}
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
diff --git a/opensm/opensm/osm_sa_path_record.c b/opensm/opensm/osm_sa_path_record.c
index 8d26da4..2ea6211 100644
--- a/opensm/opensm/osm_sa_path_record.c
+++ b/opensm/opensm/osm_sa_path_record.c
@@ -73,15 +73,12 @@
 #include <opensm/osm_sa_mcmember_record.h>
 #include <opensm/osm_prefix_route.h>
 
-#define OSM_PR_RCV_POOL_MIN_SIZE    64
-#define OSM_PR_RCV_POOL_GROW_SIZE   64
-
 extern uint8_t osm_get_lash_sl(osm_opensm_t * p_osm,
 			       const osm_port_t * p_src_port,
 			       const osm_port_t * p_dst_port);
 
 typedef struct _osm_pr_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_path_rec_t path_rec;
 } osm_pr_item_t;
 
@@ -111,7 +108,6 @@ static const ib_gid_t zero_gid = { {0x00, 0x00, 0x00, 0x00,
 void osm_pr_rcv_construct(IN osm_pr_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pr_pool);
 }
 
 /**********************************************************************
@@ -119,7 +115,6 @@ void osm_pr_rcv_construct(IN osm_pr_rcv_t * const p_rcv)
 void osm_pr_rcv_destroy(IN osm_pr_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_pr_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pr_pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -132,8 +127,6 @@ osm_pr_rcv_init(IN osm_pr_rcv_t * const p_rcv,
 		IN osm_subn_t * const p_subn,
 		IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status;
-
 	OSM_LOG_ENTER(p_log, osm_pr_rcv_init);
 
 	osm_pr_rcv_construct(p_rcv);
@@ -144,14 +137,8 @@ osm_pr_rcv_init(IN osm_pr_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	status = cl_qlock_pool_init(&p_rcv->pr_pool,
-				    OSM_PR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_PR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_pr_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_rcv->p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -939,20 +926,21 @@ __osm_pr_rcv_get_lid_pair_path(IN osm_pr_rcv_t * const p_rcv,
 			"Src LID 0x%X, Dest LID 0x%X\n",
 			src_lid_ho, dest_lid_ho);
 
-	p_pr_item = (osm_pr_item_t *) cl_qlock_pool_get(&p_rcv->pr_pool);
+	p_pr_item = malloc(sizeof(*p_pr_item));
 	if (p_pr_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_pr_rcv_get_lid_pair_path: ERR 1F01: "
 			"Unable to allocate path record\n");
 		goto Exit;
 	}
+	memset(p_pr_item, 0, sizeof(*p_pr_item));
 
 	status = __osm_pr_rcv_get_path_parms(p_rcv, p_pr, p_src_port,
 					     p_dest_port, dest_lid_ho,
 					     comp_mask, &path_parms);
 
 	if (status != IB_SUCCESS) {
-		cl_qlock_pool_put(&p_rcv->pr_pool, &p_pr_item->pool_item);
+		free(p_pr_item);
 		p_pr_item = NULL;
 		goto Exit;
 	}
@@ -976,8 +964,7 @@ __osm_pr_rcv_get_lid_pair_path(IN osm_pr_rcv_t * const p_rcv,
 				"__osm_pr_rcv_get_lid_pair_path: "
 				"Requested reversible path but failed to get one\n");
 
-			cl_qlock_pool_put(&p_rcv->pr_pool,
-					  &p_pr_item->pool_item);
+			free(p_pr_item);
 			p_pr_item = NULL;
 			goto Exit;
 		}
@@ -1158,9 +1145,7 @@ __osm_pr_rcv_get_port_pair_paths(IN osm_pr_rcv_t * const p_rcv,
 							   preference);
 
 		if (p_pr_item) {
-			cl_qlist_insert_tail(p_list,
-					     (cl_list_item_t *) & p_pr_item->
-					     pool_item);
+			cl_qlist_insert_tail(p_list, &p_pr_item->list_item);
 			++path_num;
 		}
 
@@ -1226,9 +1211,7 @@ __osm_pr_rcv_get_port_pair_paths(IN osm_pr_rcv_t * const p_rcv,
 							   preference);
 
 		if (p_pr_item) {
-			cl_qlist_insert_tail(p_list,
-					     (cl_list_item_t *) & p_pr_item->
-					     pool_item);
+			cl_qlist_insert_tail(p_list, &p_pr_item->list_item);
 			++path_num;
 		}
 	}
@@ -1861,8 +1844,7 @@ __osm_pr_rcv_respond(IN osm_pr_rcv_t * const p_rcv,
 			    (osm_pr_item_t *) cl_qlist_remove_head(p_list);
 			while (p_pr_item !=
 			       (osm_pr_item_t *) cl_qlist_end(p_list)) {
-				cl_qlock_pool_put(&p_rcv->pr_pool,
-						  &p_pr_item->pool_item);
+				free(p_pr_item);
 				p_pr_item = (osm_pr_item_t *)
 				    cl_qlist_remove_head(p_list);
 			}
@@ -1907,8 +1889,7 @@ __osm_pr_rcv_respond(IN osm_pr_rcv_t * const p_rcv,
 		for (i = 0; i < num_rec; i++) {
 			p_pr_item =
 			    (osm_pr_item_t *) cl_qlist_remove_head(p_list);
-			cl_qlock_pool_put(&p_rcv->pr_pool,
-					  &p_pr_item->pool_item);
+			free(p_pr_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -1949,7 +1930,7 @@ __osm_pr_rcv_respond(IN osm_pr_rcv_t * const p_rcv,
 		if (i < num_rec)
 			*p_resp_pr = p_pr_item->path_rec;
 
-		cl_qlock_pool_put(&p_rcv->pr_pool, &p_pr_item->pool_item);
+		free(p_pr_item);
 		p_resp_pr++;
 	}
 
@@ -2113,14 +2094,14 @@ void osm_pr_rcv_process(IN void *context, IN void *data)
 			goto Unlock;
 		}
 
-		p_pr_item =
-		    (osm_pr_item_t *) cl_qlock_pool_get(&p_rcv->pr_pool);
+		p_pr_item = malloc(sizeof(*p_pr_item));
 		if (p_pr_item == NULL) {
 			osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 				"osm_pr_rcv_process: ERR 1F18: "
 				"Unable to allocate path record for MC group\n");
 			goto Unlock;
 		}
+		memset(p_pr_item, 0, sizeof(*p_pr_item));
 
 		/* Copy PathRecord request into response */
 		p_sa_mad = osm_madw_get_sa_mad_ptr(p_madw);
@@ -2157,9 +2138,7 @@ void osm_pr_rcv_process(IN void *context, IN void *data)
 		p_pr_item->path_rec.hop_flow_raw =
 			cl_hton32(hop_limit) | (flow_label << 8);
 
-		cl_qlist_insert_tail(&pr_list, (cl_list_item_t *)
-				     & p_pr_item->pool_item);
-
+		cl_qlist_insert_tail(&pr_list, &p_pr_item->list_item);
 	}
 
       Unlock:
diff --git a/opensm/opensm/osm_sa_pkey_record.c b/opensm/opensm/osm_sa_pkey_record.c
index 4402b94..1e9f50f 100644
--- a/opensm/opensm/osm_sa_pkey_record.c
+++ b/opensm/opensm/osm_sa_pkey_record.c
@@ -51,11 +51,8 @@
 #include <opensm/osm_pkey.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_PKEY_REC_RCV_POOL_MIN_SIZE      32
-#define OSM_PKEY_REC_RCV_POOL_GROW_SIZE     32
-
 typedef struct _osm_pkey_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_pkey_table_record_t rec;
 } osm_pkey_item_t;
 
@@ -73,7 +70,6 @@ typedef struct _osm_pkey_search_ctxt {
 void osm_pkey_rec_rcv_construct(IN osm_pkey_rec_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -81,7 +77,6 @@ void osm_pkey_rec_rcv_construct(IN osm_pkey_rec_rcv_t * const p_rcv)
 void osm_pkey_rec_rcv_destroy(IN osm_pkey_rec_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_pkey_rec_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -94,8 +89,6 @@ osm_pkey_rec_rcv_init(IN osm_pkey_rec_rcv_t * const p_rcv,
 		      IN osm_subn_t * const p_subn,
 		      IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status;
-
 	OSM_LOG_ENTER(p_log, osm_pkey_rec_rcv_init);
 
 	osm_pkey_rec_rcv_construct(p_rcv);
@@ -106,15 +99,8 @@ osm_pkey_rec_rcv_init(IN osm_pkey_rec_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	/* used for matching records collection */
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_PKEY_REC_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_PKEY_REC_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_pkey_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -131,11 +117,11 @@ __osm_sa_pkey_create(IN osm_pkey_rec_rcv_t * const p_rcv,
 
 	OSM_LOG_ENTER(p_rcv->p_log, __osm_sa_pkey_create);
 
-	p_rec_item = (osm_pkey_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_sa_pkey_create: ERR 4602: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		status = IB_INSUFFICIENT_RESOURCES;
 		goto Exit;
 	}
@@ -154,7 +140,7 @@ __osm_sa_pkey_create(IN osm_pkey_rec_rcv_t * const p_rcv,
 			cl_ntoh16(lid), osm_physp_get_port_num(p_physp), block);
 	}
 
-	memset(&p_rec_item->rec, 0, sizeof(p_rec_item->rec));
+	memset(p_rec_item, 0, sizeof(*p_rec_item));
 
 	p_rec_item->rec.lid = lid;
 	p_rec_item->rec.block_num = block;
@@ -162,8 +148,7 @@ __osm_sa_pkey_create(IN osm_pkey_rec_rcv_t * const p_rcv,
 	p_rec_item->rec.pkey_tbl =
 	    *(osm_pkey_tbl_block_get(osm_physp_get_pkey_tbl(p_physp), block));
 
-	cl_qlist_insert_tail(p_ctxt->p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_ctxt->p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -444,8 +429,7 @@ void osm_pkey_rec_rcv_process(IN void *ctx, IN void *data)
 			    (osm_pkey_item_t *) cl_qlist_remove_head(&rec_list);
 			while (p_rec_item !=
 			       (osm_pkey_item_t *) cl_qlist_end(&rec_list)) {
-				cl_qlock_pool_put(&p_rcv->pool,
-						  &p_rec_item->pool_item);
+				free(p_rec_item);
 				p_rec_item = (osm_pkey_item_t *)
 				    cl_qlist_remove_head(&rec_list);
 			}
@@ -494,7 +478,7 @@ void osm_pkey_rec_rcv_process(IN void *ctx, IN void *data)
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item =
 			    (osm_pkey_item_t *) cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -541,10 +525,9 @@ void osm_pkey_rec_rcv_process(IN void *ctx, IN void *data)
 		p_rec_item =
 		    (osm_pkey_item_t *) cl_qlist_remove_head(&rec_list);
 		/* copy only if not trimmed */
-		if (i < num_rec) {
+		if (i < num_rec)
 			*p_resp_rec = p_rec_item->rec;
-		}
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
diff --git a/opensm/opensm/osm_sa_portinfo_record.c b/opensm/opensm/osm_sa_portinfo_record.c
index 22869e6..ed3684c 100644
--- a/opensm/opensm/osm_sa_portinfo_record.c
+++ b/opensm/opensm/osm_sa_portinfo_record.c
@@ -64,11 +64,8 @@
 #include <opensm/osm_pkey.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_PIR_RCV_POOL_MIN_SIZE      32
-#define OSM_PIR_RCV_POOL_GROW_SIZE     32
-
 typedef struct _osm_pir_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_portinfo_record_t rec;
 } osm_pir_item_t;
 
@@ -86,7 +83,6 @@ typedef struct _osm_pir_search_ctxt {
 void osm_pir_rcv_construct(IN osm_pir_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -94,7 +90,6 @@ void osm_pir_rcv_construct(IN osm_pir_rcv_t * const p_rcv)
 void osm_pir_rcv_destroy(IN osm_pir_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_pir_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -107,8 +102,6 @@ osm_pir_rcv_init(IN osm_pir_rcv_t * const p_rcv,
 		 IN osm_subn_t * const p_subn,
 		 IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status;
-
 	OSM_LOG_ENTER(p_log, osm_pir_rcv_init);
 
 	osm_pir_rcv_construct(p_rcv);
@@ -119,14 +112,8 @@ osm_pir_rcv_init(IN osm_pir_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_PIR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_PIR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_pir_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -141,32 +128,30 @@ __osm_pir_rcv_new_pir(IN osm_pir_rcv_t * const p_rcv,
 
 	OSM_LOG_ENTER(p_rcv->p_log, __osm_pir_rcv_new_pir);
 
-	p_rec_item = (osm_pir_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_pir_rcv_new_pir: ERR 2102: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		status = IB_INSUFFICIENT_RESOURCES;
 		goto Exit;
 	}
 
-	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG)) {
+	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG))
 		osm_log(p_rcv->p_log, OSM_LOG_DEBUG,
 			"__osm_pir_rcv_new_pir: "
 			"New PortInfoRecord: port 0x%016" PRIx64
 			", lid 0x%X, port 0x%X\n",
 			cl_ntoh64(osm_physp_get_port_guid(p_physp)),
 			cl_ntoh16(lid), osm_physp_get_port_num(p_physp));
-	}
 
-	memset(&p_rec_item->rec, 0, sizeof(p_rec_item->rec));
+	memset(p_rec_item, 0, sizeof(*p_rec_item));
 
 	p_rec_item->rec.lid = lid;
 	p_rec_item->rec.port_info = p_physp->port_info;
 	p_rec_item->rec.port_num = osm_physp_get_port_num(p_physp);
 
-	cl_qlist_insert_tail(p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -676,8 +661,7 @@ void osm_pir_rcv_process(IN void *ctx, IN void *data)
 			    (osm_pir_item_t *) cl_qlist_remove_head(&rec_list);
 			while (p_rec_item !=
 			       (osm_pir_item_t *) cl_qlist_end(&rec_list)) {
-				cl_qlock_pool_put(&p_rcv->pool,
-						  &p_rec_item->pool_item);
+				free(p_rec_item);
 				p_rec_item = (osm_pir_item_t *)
 				    cl_qlist_remove_head(&rec_list);
 			}
@@ -725,7 +709,7 @@ void osm_pir_rcv_process(IN void *ctx, IN void *data)
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item =
 			    (osm_pir_item_t *) cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -786,7 +770,7 @@ void osm_pir_rcv_process(IN void *ctx, IN void *data)
 			if (trusted_req == FALSE)
 				p_resp_rec->port_info.m_key = 0;
 		}
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
diff --git a/opensm/opensm/osm_sa_service_record.c b/opensm/opensm/osm_sa_service_record.c
index abad29f..fb0193e 100644
--- a/opensm/opensm/osm_sa_service_record.c
+++ b/opensm/opensm/osm_sa_service_record.c
@@ -66,11 +66,8 @@
 #include <opensm/osm_service.h>
 #include <opensm/osm_pkey.h>
 
-#define OSM_SR_RCV_POOL_MIN_SIZE    64
-#define OSM_SR_RCV_POOL_GROW_SIZE   64
-
 typedef struct _osm_sr_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_service_record_t service_rec;
 } osm_sr_item_t;
 
@@ -79,7 +76,6 @@ typedef struct osm_sr_match_item {
 	ib_service_record_t *p_service_rec;
 	ib_net64_t comp_mask;
 	osm_sr_rcv_t *p_rcv;
-
 } osm_sr_match_item_t;
 
 typedef struct _osm_sr_search_ctxt {
@@ -92,7 +88,6 @@ typedef struct _osm_sr_search_ctxt {
 void osm_sr_rcv_construct(IN osm_sr_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->sr_pool);
 	cl_timer_construct(&p_rcv->sr_timer);
 }
 
@@ -101,7 +96,6 @@ void osm_sr_rcv_construct(IN osm_sr_rcv_t * const p_rcv)
 void osm_sr_rcv_destroy(IN osm_sr_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_sr_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->sr_pool);
 	cl_timer_trim(&p_rcv->sr_timer, 1);
 	cl_timer_destroy(&p_rcv->sr_timer);
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -116,8 +110,7 @@ osm_sr_rcv_init(IN osm_sr_rcv_t * const p_rcv,
 		IN osm_subn_t * const p_subn,
 		IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status = IB_ERROR;
-	cl_status_t cl_status;
+	ib_api_status_t status;
 
 	OSM_LOG_ENTER(p_log, osm_sr_rcv_init);
 
@@ -129,20 +122,8 @@ osm_sr_rcv_init(IN osm_sr_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	cl_status = cl_qlock_pool_init(&p_rcv->sr_pool,
-				       OSM_SR_RCV_POOL_MIN_SIZE,
-				       0,
-				       OSM_SR_RCV_POOL_GROW_SIZE,
-				       sizeof(osm_sr_item_t), NULL, NULL, NULL);
-	if (cl_status != CL_SUCCESS)
-		goto Exit;
-
 	status = cl_timer_init(&p_rcv->sr_timer, osm_sr_rcv_lease_cb, p_rcv);
-	if (cl_status != CL_SUCCESS)
-		goto Exit;
 
-	status = IB_SUCCESS;
-      Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
 	return (status);
 }
@@ -315,8 +296,7 @@ __osm_sr_rcv_respond(IN osm_sr_rcv_t * const p_rcv,
 		/* need to set the mem free ... */
 		p_sr_item = (osm_sr_item_t *) cl_qlist_remove_head(p_list);
 		while (p_sr_item != (osm_sr_item_t *) cl_qlist_end(p_list)) {
-			cl_qlock_pool_put(&p_rcv->sr_pool,
-					  &p_sr_item->pool_item);
+			free(p_sr_item);
 			p_sr_item =
 			    (osm_sr_item_t *) cl_qlist_remove_head(p_list);
 		}
@@ -355,8 +335,7 @@ __osm_sr_rcv_respond(IN osm_sr_rcv_t * const p_rcv,
 		/* Release the quick pool items */
 		p_sr_item = (osm_sr_item_t *) cl_qlist_remove_head(p_list);
 		while (p_sr_item != (osm_sr_item_t *) cl_qlist_end(p_list)) {
-			cl_qlock_pool_put(&p_rcv->sr_pool,
-					  &p_sr_item->pool_item);
+			free(p_sr_item);
 			p_sr_item =
 			    (osm_sr_item_t *) cl_qlist_remove_head(p_list);
 		}
@@ -430,8 +409,7 @@ __osm_sr_rcv_respond(IN osm_sr_rcv_t * const p_rcv,
 
 				num_copied++;
 			}
-			cl_qlock_pool_put(&p_rcv->sr_pool,
-					  &p_sr_item->pool_item);
+			free(p_sr_item);
 			p_resp_sr++;
 			p_sr_item =
 			    (osm_sr_item_t *) cl_qlist_remove_head(p_list);
@@ -668,9 +646,7 @@ __get_matching_sr(IN cl_list_item_t * const p_list_item, IN void *context)
 		}
 	}
 
-	p_sr_pool_item =
-	    (osm_sr_item_t *) cl_qlock_pool_get(&p_sr_item->p_rcv->sr_pool);
-
+	p_sr_pool_item = malloc(sizeof(*p_sr_pool_item));
 	if (p_sr_pool_item == NULL) {
 		osm_log(p_sr_item->p_rcv->p_log, OSM_LOG_ERROR,
 			"__get_matching_sr: ERR 2408: "
@@ -680,8 +656,7 @@ __get_matching_sr(IN cl_list_item_t * const p_list_item, IN void *context)
 
 	p_sr_pool_item->service_rec = p_svcr->service_record;
 
-	cl_qlist_insert_tail(&p_sr_item->sr_list,
-			     (cl_list_item_t *) & p_sr_pool_item->pool_item);
+	cl_qlist_insert_tail(&p_sr_item->sr_list, &p_sr_pool_item->list_item);
 
       Exit:
 	return;
@@ -848,7 +823,7 @@ osm_sr_rcv_process_set_method(IN osm_sr_rcv_t * const p_rcv,
 		p_svcr->modified_time = cl_get_time_stamp_sec();
 	}
 
-	p_sr_item = (osm_sr_item_t *) cl_qlock_pool_get(&p_rcv->sr_pool);
+	p_sr_item = malloc(sizeof(*p_sr_item));
 	if (p_sr_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"osm_sr_rcv_process_set_method: ERR 2412: "
@@ -866,8 +841,7 @@ osm_sr_rcv_process_set_method(IN osm_sr_rcv_t * const p_rcv,
 	p_sr_item->service_rec = *p_recvd_service_rec;
 	cl_qlist_init(&sr_list);
 
-	cl_qlist_insert_tail(&sr_list,
-			     (cl_list_item_t *) & p_sr_item->pool_item);
+	cl_qlist_insert_tail(&sr_list, &p_sr_item->list_item);
 
 	__osm_sr_rcv_respond(p_rcv, p_madw, &sr_list);
 
@@ -925,7 +899,7 @@ osm_sr_rcv_process_delete_method(IN osm_sr_rcv_t * const p_rcv,
 
 	cl_plock_release(p_rcv->p_lock);
 
-	p_sr_item = (osm_sr_item_t *) cl_qlock_pool_get(&p_rcv->sr_pool);
+	p_sr_item = malloc(sizeof(*p_sr_item));
 	if (p_sr_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"osm_sr_rcv_process_delete_method: ERR 2413: "
@@ -939,8 +913,7 @@ osm_sr_rcv_process_delete_method(IN osm_sr_rcv_t * const p_rcv,
 	p_sr_item->service_rec = p_svcr->service_record;
 	cl_qlist_init(&sr_list);
 
-	cl_qlist_insert_tail(&sr_list,
-			     (cl_list_item_t *) & p_sr_item->pool_item);
+	cl_qlist_insert_tail(&sr_list, &p_sr_item->list_item);
 
 	if (p_svcr)
 		osm_svcr_delete(p_svcr);
diff --git a/opensm/opensm/osm_sa_slvl_record.c b/opensm/opensm/osm_sa_slvl_record.c
index 8d8e4dc..fd48296 100644
--- a/opensm/opensm/osm_sa_slvl_record.c
+++ b/opensm/opensm/osm_sa_slvl_record.c
@@ -63,11 +63,8 @@
 #include <opensm/osm_pkey.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_SLVL_REC_RCV_POOL_MIN_SIZE    32
-#define OSM_SLVL_REC_RCV_POOL_GROW_SIZE   32
-
 typedef struct _osm_slvl_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_slvl_table_record_t rec;
 } osm_slvl_item_t;
 
@@ -85,7 +82,6 @@ typedef struct _osm_slvl_search_ctxt {
 void osm_slvl_rec_rcv_construct(IN osm_slvl_rec_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -93,7 +89,6 @@ void osm_slvl_rec_rcv_construct(IN osm_slvl_rec_rcv_t * const p_rcv)
 void osm_slvl_rec_rcv_destroy(IN osm_slvl_rec_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_slvl_rec_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -106,8 +101,6 @@ osm_slvl_rec_rcv_init(IN osm_slvl_rec_rcv_t * const p_rcv,
 		      IN osm_subn_t * const p_subn,
 		      IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status;
-
 	OSM_LOG_ENTER(p_log, osm_slvl_rec_rcv_init);
 
 	osm_slvl_rec_rcv_construct(p_rcv);
@@ -118,15 +111,8 @@ osm_slvl_rec_rcv_init(IN osm_slvl_rec_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	/* used for matching records collection */
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_SLVL_REC_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_SLVL_REC_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_slvl_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -143,11 +129,11 @@ __osm_sa_slvl_create(IN osm_slvl_rec_rcv_t * const p_rcv,
 
 	OSM_LOG_ENTER(p_rcv->p_log, __osm_sa_slvl_create);
 
-	p_rec_item = (osm_slvl_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_sa_slvl_create: ERR 2602: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		status = IB_INSUFFICIENT_RESOURCES;
 		goto Exit;
 	}
@@ -166,7 +152,7 @@ __osm_sa_slvl_create(IN osm_slvl_rec_rcv_t * const p_rcv,
 			cl_ntoh16(lid), osm_physp_get_port_num(p_physp),
 			in_port_idx);
 
-	memset(&p_rec_item->rec, 0, sizeof(p_rec_item->rec));
+	memset(p_rec_item, 0, sizeof(*p_rec_item));
 
 	p_rec_item->rec.lid = lid;
 	p_rec_item->rec.out_port_num = osm_physp_get_port_num(p_physp);
@@ -174,8 +160,7 @@ __osm_sa_slvl_create(IN osm_slvl_rec_rcv_t * const p_rcv,
 	p_rec_item->rec.slvl_tbl =
 	    *(osm_physp_get_slvl_tbl(p_physp, in_port_idx));
 
-	cl_qlist_insert_tail(p_ctxt->p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_ctxt->p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -419,8 +404,7 @@ void osm_slvl_rec_rcv_process(IN void *ctx, IN void *data)
 			    (osm_slvl_item_t *) cl_qlist_remove_head(&rec_list);
 			while (p_rec_item !=
 			       (osm_slvl_item_t *) cl_qlist_end(&rec_list)) {
-				cl_qlock_pool_put(&p_rcv->pool,
-						  &p_rec_item->pool_item);
+				free(p_rec_item);
 				p_rec_item = (osm_slvl_item_t *)
 				    cl_qlist_remove_head(&rec_list);
 			}
@@ -469,7 +453,7 @@ void osm_slvl_rec_rcv_process(IN void *ctx, IN void *data)
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item =
 			    (osm_slvl_item_t *) cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -518,7 +502,7 @@ void osm_slvl_rec_rcv_process(IN void *ctx, IN void *data)
 		/* copy only if not trimmed */
 		if (i < num_rec)
 			*p_resp_rec = p_rec_item->rec;
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
diff --git a/opensm/opensm/osm_sa_sminfo_record.c b/opensm/opensm/osm_sa_sminfo_record.c
index 2aa136e..6f84ac7 100644
--- a/opensm/opensm/osm_sa_sminfo_record.c
+++ b/opensm/opensm/osm_sa_sminfo_record.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire, Inc. All rights reserved.
  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
@@ -70,11 +70,8 @@
 #include <opensm/osm_remote_sm.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_SMIR_RCV_POOL_MIN_SIZE     32
-#define OSM_SMIR_RCV_POOL_GROW_SIZE    32
-
 typedef struct _osm_smir_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_sminfo_record_t rec;
 } osm_smir_item_t;
 
@@ -91,7 +88,6 @@ typedef struct _osm_smir_search_ctxt {
 void osm_smir_rcv_construct(IN osm_smir_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -99,9 +95,7 @@ void osm_smir_rcv_construct(IN osm_smir_rcv_t * const p_rcv)
 void osm_smir_rcv_destroy(IN osm_smir_rcv_t * const p_rcv)
 {
 	CL_ASSERT(p_rcv);
-
 	OSM_LOG_ENTER(p_rcv->p_log, osm_smir_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -115,8 +109,6 @@ osm_smir_rcv_init(IN osm_smir_rcv_t * const p_rcv,
 		  IN osm_stats_t * const p_stats,
 		  IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status = IB_SUCCESS;
-
 	OSM_LOG_ENTER(p_log, osm_smir_rcv_init);
 
 	osm_smir_rcv_construct(p_rcv);
@@ -128,14 +120,8 @@ osm_smir_rcv_init(IN osm_smir_rcv_t * const p_rcv,
 	p_rcv->p_stats = p_stats;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_SMIR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_SMIR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_smir_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_rcv->p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 static ib_api_status_t
@@ -152,31 +138,29 @@ __osm_smir_rcv_new_smir(IN osm_smir_rcv_t * const p_rcv,
 
 	OSM_LOG_ENTER(p_rcv->p_log, __osm_smir_rcv_new_smir);
 
-	p_rec_item = (osm_smir_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_smir_rcv_new_smir: ERR 2801: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		status = IB_INSUFFICIENT_RESOURCES;
 		goto Exit;
 	}
 
-	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG)) {
+	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG))
 		osm_log(p_rcv->p_log, OSM_LOG_DEBUG,
 			"__osm_smir_rcv_new_smir: "
 			"New SMInfo: GUID 0x%016" PRIx64 "\n", cl_ntoh64(guid)
 		    );
-	}
 
-	memset(&p_rec_item->rec, 0, sizeof(ib_sminfo_record_t));
+	memset(p_rec_item, 0, sizeof(*p_rec_item));
 
 	p_rec_item->rec.lid = osm_port_get_base_lid(p_port);
 	p_rec_item->rec.sm_info.guid = guid;
 	p_rec_item->rec.sm_info.act_count = act_count;
 	p_rec_item->rec.sm_info.pri_state = pri_state;
 
-	cl_qlist_insert_tail(p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -445,8 +429,7 @@ void osm_smir_rcv_process(IN void *ctx, IN void *data)
 			    (osm_smir_item_t *) cl_qlist_remove_head(&rec_list);
 			while (p_rec_item !=
 			       (osm_smir_item_t *) cl_qlist_end(&rec_list)) {
-				cl_qlock_pool_put(&p_rcv->pool,
-						  &p_rec_item->pool_item);
+				free(p_rec_item);
 				p_rec_item = (osm_smir_item_t *)
 				    cl_qlist_remove_head(&rec_list);
 			}
@@ -493,7 +476,7 @@ void osm_smir_rcv_process(IN void *ctx, IN void *data)
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item =
 			    (osm_smir_item_t *) cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -544,7 +527,7 @@ void osm_smir_rcv_process(IN void *ctx, IN void *data)
 			*p_resp_rec = p_rec_item->rec;
 			p_resp_rec->sm_info.sm_key = 0;
 		}
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
diff --git a/opensm/opensm/osm_sa_sw_info_record.c b/opensm/opensm/osm_sa_sw_info_record.c
index edfe106..a9947e1 100644
--- a/opensm/opensm/osm_sa_sw_info_record.c
+++ b/opensm/opensm/osm_sa_sw_info_record.c
@@ -63,7 +63,7 @@
 #define OSM_SIR_RCV_POOL_GROW_SIZE   32
 
 typedef struct _osm_sir_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_switch_info_record_t rec;
 } osm_sir_item_t;
 
@@ -80,7 +80,6 @@ typedef struct _osm_sir_search_ctxt {
 void osm_sir_rcv_construct(IN osm_sir_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -88,7 +87,6 @@ void osm_sir_rcv_construct(IN osm_sir_rcv_t * const p_rcv)
 void osm_sir_rcv_destroy(IN osm_sir_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_sir_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -101,8 +99,6 @@ osm_sir_rcv_init(IN osm_sir_rcv_t * const p_rcv,
 		 IN osm_subn_t * const p_subn,
 		 IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status;
-
 	OSM_LOG_ENTER(p_log, osm_sir_rcv_init);
 
 	osm_sir_rcv_construct(p_rcv);
@@ -113,14 +109,8 @@ osm_sir_rcv_init(IN osm_sir_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_SIR_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_SIR_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_sir_item_t), NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -135,29 +125,27 @@ __osm_sir_rcv_new_sir(IN osm_sir_rcv_t * const p_rcv,
 
 	OSM_LOG_ENTER(p_rcv->p_log, __osm_sir_rcv_new_sir);
 
-	p_rec_item = (osm_sir_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_sir_rcv_new_sir: ERR 5308: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		status = IB_INSUFFICIENT_RESOURCES;
 		goto Exit;
 	}
 
-	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG)) {
+	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG))
 		osm_log(p_rcv->p_log, OSM_LOG_DEBUG,
 			"__osm_sir_rcv_new_sir: "
 			"New SwitchInfoRecord: lid 0x%X\n", cl_ntoh16(lid)
 		    );
-	}
 
-	memset(&p_rec_item->rec, 0, sizeof(ib_switch_info_record_t));
+	memset(p_rec_item, 0, sizeof(*p_rec_item));
 
 	p_rec_item->rec.lid = lid;
 	p_rec_item->rec.switch_info = p_sw->switch_info;
 
-	cl_qlist_insert_tail(p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -393,7 +381,7 @@ void osm_sir_rcv_process(IN void *ctx, IN void *data)
 		/* need to set the mem free ... */
 		p_rec_item = (osm_sir_item_t *) cl_qlist_remove_head(&rec_list);
 		while (p_rec_item != (osm_sir_item_t *) cl_qlist_end(&rec_list)) {
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 			p_rec_item =
 			    (osm_sir_item_t *) cl_qlist_remove_head(&rec_list);
 		}
@@ -442,7 +430,7 @@ void osm_sir_rcv_process(IN void *ctx, IN void *data)
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item =
 			    (osm_sir_item_t *) cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -487,10 +475,9 @@ void osm_sir_rcv_process(IN void *ctx, IN void *data)
 	for (i = 0; i < pre_trim_num_rec; i++) {
 		p_rec_item = (osm_sir_item_t *) cl_qlist_remove_head(&rec_list);
 		/* copy only if not trimmed */
-		if (i < num_rec) {
+		if (i < num_rec)
 			*p_resp_rec = p_rec_item->rec;
-		}
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
diff --git a/opensm/opensm/osm_sa_vlarb_record.c b/opensm/opensm/osm_sa_vlarb_record.c
index 49d688a..a538a0b 100644
--- a/opensm/opensm/osm_sa_vlarb_record.c
+++ b/opensm/opensm/osm_sa_vlarb_record.c
@@ -63,11 +63,8 @@
 #include <opensm/osm_pkey.h>
 #include <opensm/osm_sa.h>
 
-#define OSM_VLARB_REC_RCV_POOL_MIN_SIZE      32
-#define OSM_VLARB_REC_RCV_POOL_GROW_SIZE     32
-
 typedef struct _osm_vl_arb_item {
-	cl_pool_item_t pool_item;
+	cl_list_item_t list_item;
 	ib_vl_arb_table_record_t rec;
 } osm_vl_arb_item_t;
 
@@ -85,7 +82,6 @@ typedef struct _osm_vl_arb_search_ctxt {
 void osm_vlarb_rec_rcv_construct(IN osm_vlarb_rec_rcv_t * const p_rcv)
 {
 	memset(p_rcv, 0, sizeof(*p_rcv));
-	cl_qlock_pool_construct(&p_rcv->pool);
 }
 
 /**********************************************************************
@@ -93,7 +89,6 @@ void osm_vlarb_rec_rcv_construct(IN osm_vlarb_rec_rcv_t * const p_rcv)
 void osm_vlarb_rec_rcv_destroy(IN osm_vlarb_rec_rcv_t * const p_rcv)
 {
 	OSM_LOG_ENTER(p_rcv->p_log, osm_vlarb_rec_rcv_destroy);
-	cl_qlock_pool_destroy(&p_rcv->pool);
 	OSM_LOG_EXIT(p_rcv->p_log);
 }
 
@@ -106,8 +101,6 @@ osm_vlarb_rec_rcv_init(IN osm_vlarb_rec_rcv_t * const p_rcv,
 		       IN osm_subn_t * const p_subn,
 		       IN osm_log_t * const p_log, IN cl_plock_t * const p_lock)
 {
-	ib_api_status_t status;
-
 	OSM_LOG_ENTER(p_log, osm_vlarb_rec_rcv_init);
 
 	osm_vlarb_rec_rcv_construct(p_rcv);
@@ -118,16 +111,8 @@ osm_vlarb_rec_rcv_init(IN osm_vlarb_rec_rcv_t * const p_rcv,
 	p_rcv->p_resp = p_resp;
 	p_rcv->p_mad_pool = p_mad_pool;
 
-	/* used for matching records collection */
-	status = cl_qlock_pool_init(&p_rcv->pool,
-				    OSM_VLARB_REC_RCV_POOL_MIN_SIZE,
-				    0,
-				    OSM_VLARB_REC_RCV_POOL_GROW_SIZE,
-				    sizeof(osm_vl_arb_item_t),
-				    NULL, NULL, NULL);
-
 	OSM_LOG_EXIT(p_log);
-	return (status);
+	return IB_SUCCESS;
 }
 
 /**********************************************************************
@@ -144,11 +129,11 @@ __osm_sa_vl_arb_create(IN osm_vlarb_rec_rcv_t * const p_rcv,
 
 	OSM_LOG_ENTER(p_rcv->p_log, __osm_sa_vl_arb_create);
 
-	p_rec_item = (osm_vl_arb_item_t *) cl_qlock_pool_get(&p_rcv->pool);
+	p_rec_item = malloc(sizeof(*p_rec_item));
 	if (p_rec_item == NULL) {
 		osm_log(p_rcv->p_log, OSM_LOG_ERROR,
 			"__osm_sa_vl_arb_create: ERR 2A02: "
-			"cl_qlock_pool_get failed\n");
+			"rec_item alloc failed\n");
 		status = IB_INSUFFICIENT_RESOURCES;
 		goto Exit;
 	}
@@ -158,24 +143,22 @@ __osm_sa_vl_arb_create(IN osm_vlarb_rec_rcv_t * const p_rcv,
 	else
 		lid = osm_node_get_base_lid(p_physp->p_node, 0);
 
-	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG)) {
+	if (osm_log_is_active(p_rcv->p_log, OSM_LOG_DEBUG))
 		osm_log(p_rcv->p_log, OSM_LOG_DEBUG,
 			"__osm_sa_vl_arb_create: "
 			"New VLArbitration for: port 0x%016" PRIx64
 			", lid 0x%X, port 0x%X Block:%u\n",
 			cl_ntoh64(osm_physp_get_port_guid(p_physp)),
 			cl_ntoh16(lid), osm_physp_get_port_num(p_physp), block);
-	}
 
-	memset(&p_rec_item->rec, 0, sizeof(p_rec_item->rec));
+	memset(p_rec_item, 0, sizeof(*p_rec_item));
 
 	p_rec_item->rec.lid = lid;
 	p_rec_item->rec.port_num = osm_physp_get_port_num(p_physp);
 	p_rec_item->rec.block_num = block;
 	p_rec_item->rec.vl_arb_tbl = *(osm_physp_get_vla_tbl(p_physp, block));
 
-	cl_qlist_insert_tail(p_ctxt->p_list,
-			     (cl_list_item_t *) & p_rec_item->pool_item);
+	cl_qlist_insert_tail(p_ctxt->p_list, &p_rec_item->list_item);
 
       Exit:
 	OSM_LOG_EXIT(p_rcv->p_log);
@@ -436,8 +419,7 @@ void osm_vlarb_rec_rcv_process(IN void *ctx, IN void *data)
 			    cl_qlist_remove_head(&rec_list);
 			while (p_rec_item !=
 			       (osm_vl_arb_item_t *) cl_qlist_end(&rec_list)) {
-				cl_qlock_pool_put(&p_rcv->pool,
-						  &p_rec_item->pool_item);
+				free(p_rec_item);
 				p_rec_item = (osm_vl_arb_item_t *)
 				    cl_qlist_remove_head(&rec_list);
 			}
@@ -487,7 +469,7 @@ void osm_vlarb_rec_rcv_process(IN void *ctx, IN void *data)
 		for (i = 0; i < num_rec; i++) {
 			p_rec_item = (osm_vl_arb_item_t *)
 			    cl_qlist_remove_head(&rec_list);
-			cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+			free(p_rec_item);
 		}
 
 		osm_sa_send_error(p_rcv->p_resp, p_madw,
@@ -534,10 +516,9 @@ void osm_vlarb_rec_rcv_process(IN void *ctx, IN void *data)
 		p_rec_item =
 		    (osm_vl_arb_item_t *) cl_qlist_remove_head(&rec_list);
 		/* copy only if not trimmed */
-		if (i < num_rec) {
+		if (i < num_rec)
 			*p_resp_rec = p_rec_item->rec;
-		}
-		cl_qlock_pool_put(&p_rcv->pool, &p_rec_item->pool_item);
+		free(p_rec_item);
 		p_resp_rec++;
 	}
 
-- 
1.5.3.4.206.g58ba4




More information about the general mailing list