1
1
openmpi/ompi/mca/bml/r2/bml_r2_btl.h
Galen Shipman c3c83aa3e1 BML (BTL Managment Layer). Allows BTL's to be used outside of the PML. See
bml.h and PML-OB1 for usage. 

This commit was SVN r6815.
2005-08-12 02:41:14 +00:00

93 строки
4.4 KiB
C

/*
* Copyright (c) 2004-2005 The Trustees of Indiana University.
* All rights reserved.
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
* All rights reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
/**
* @file
*/
#ifndef MCA_BML_R2_BTL_H
#define MCA_BML_R2_BTL_H
#include "opal/util/output.h"
#include "mca/btl/btl.h"
#if defined(c_plusplus) || defined(__cplusplus)
extern "C" {
#endif
/**
* Allocate a descriptor for control message
*/
#if OMPI_HAVE_THREAD_SUPPORT
#define MCA_BML_R2_BTL_DES_ALLOC(btl, descriptor, size) \
do { \
if(NULL != (descriptor = btl->btl_cache)) { \
/* atomically acquire the cached descriptor */ \
if(opal_atomic_cmpset_ptr(&btl->btl_cache, descriptor, NULL) == 0) { \
btl->btl_cache = NULL; \
} else { \
descriptor = btl->btl_alloc(btl->btl, sizeof(mca_bml_r2_hdr_t) + \
MCA_BTL_DES_MAX_SEGMENTS * sizeof(mca_btl_base_segment_t)); \
} \
} else { \
descriptor = btl->btl_alloc(btl->btl, sizeof(mca_bml_r2_hdr_t) + \
MCA_BTL_DES_MAX_SEGMENTS * sizeof(mca_btl_base_segment_t)); \
} \
descriptor->des_src->seg_len = size; \
} while(0)
#else
#define MCA_BML_R2_BTL_DES_ALLOC(btl, descriptor, size) \
do { \
if(NULL != (descriptor = btl->btl_cache)) { \
btl->btl_cache = NULL; \
} else { \
descriptor = btl->btl_alloc(btl->btl, sizeof(mca_bml_r2_hdr_t) + \
MCA_BTL_DES_MAX_SEGMENTS * sizeof(mca_btl_base_segment_t)); \
} \
descriptor->des_src->seg_len = size; \
} while(0)
#endif
/**
* Return a descriptor
*/
#if OMPI_HAVE_THREAD_SUPPORT
#define MCA_BML_R2_BTL_DES_RETURN(btl, descriptor) \
do { \
if(NULL == btl->btl_cache) { \
if(opal_atomic_cmpset_ptr(&btl->btl_cache,NULL,descriptor) == 0) { \
btl->btl_free(btl->btl,descriptor); \
} \
} else { \
btl->btl_free(btl->btl,descriptor); \
}
} while(0)
#else
#define MCA_BML_R2_BTL_DES_RETURN(btl, descriptor) \
do { \
if(NULL == btl->btl_cache) { \
btl->btl_cache = descriptor; \
} else { \
btl->btl_free(endpoint->btl,descriptor); \
} \
} while(0)
#endif
#if defined(c_plusplus) || defined(__cplusplus)
}
#endif
#endif