1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ 2 /* 3 * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana 4 * University Research and Technology 5 * Corporation. All rights reserved. 6 * Copyright (c) 2004-2006 The University of Tennessee and The University 7 * of Tennessee Research Foundation. All rights 8 * reserved. 9 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 10 * University of Stuttgart. All rights reserved. 11 * Copyright (c) 2004-2006 The Regents of the University of California. 12 * All rights reserved. 13 * Copyright (c) 2007 Cisco Systems, Inc. All rights reserved. 14 * Copyright (c) 2015 Los Alamos National Security, LLC. All rights 15 * reserved. 16 * $COPYRIGHT$ 17 * 18 * Additional copyrights may follow 19 * 20 * $HEADER$ 21 */ 22 23 #ifndef MCA_MPOOL_BASE_TREE_H 24 #define MCA_MPOOL_BASE_TREE_H 25 26 #include "opal_config.h" 27 28 #define MCA_MPOOL_BASE_TREE_MAX 8 29 #include "opal/mca/mca.h" 30 #include "opal/mca/mpool/mpool.h" 31 #include "opal/mca/rcache/rcache.h" 32 33 BEGIN_C_DECLS 34 35 /* 36 * Data structures for the tree of allocated memory 37 * used for MPI_Alloc_mem and MPI_Free_mem 38 */ 39 40 /** 41 * The item in the tree itself 42 */ 43 struct mca_mpool_base_tree_item_t 44 { 45 opal_free_list_item_t super; /**< the parent class */ 46 void* key; /**< the address this was alloc'd on */ 47 size_t num_bytes; /**< the number of bytes in this alloc, only for 48 debugging reporting with 49 mpi_show_mpi_alloc_mem_leaks */ 50 mca_mpool_base_module_t *mpool; 51 mca_rcache_base_module_t *rcaches[MCA_MPOOL_BASE_TREE_MAX]; /**< the registration caches */ 52 mca_rcache_base_registration_t *regs[MCA_MPOOL_BASE_TREE_MAX]; /**< the registrations */ 53 uint8_t count; /**< length of the mpools/regs array */ 54 }; 55 typedef struct mca_mpool_base_tree_item_t mca_mpool_base_tree_item_t; 56 57 OPAL_DECLSPEC OBJ_CLASS_DECLARATION(mca_mpool_base_tree_item_t); 58 59 /* 60 * initialize/finalize the rb tree 61 */ 62 int mca_mpool_base_tree_init(void); 63 int mca_mpool_base_tree_fini(void); 64 65 /* 66 * insert an item in the rb tree 67 */ 68 int mca_mpool_base_tree_insert(mca_mpool_base_tree_item_t* item); 69 70 /* 71 * remove an item from the rb tree 72 */ 73 int mca_mpool_base_tree_delete(mca_mpool_base_tree_item_t* item); 74 75 76 /** 77 * find the item in the rb tree 78 */ 79 mca_mpool_base_tree_item_t* mca_mpool_base_tree_find(void* base); 80 81 /* 82 * get a tree item from the free list 83 */ 84 mca_mpool_base_tree_item_t* mca_mpool_base_tree_item_get(void); 85 86 /* 87 * put tree item back into the free list 88 */ 89 void mca_mpool_base_tree_item_put(mca_mpool_base_tree_item_t* item); 90 91 /* 92 * For debugging, print a show_help kind of message if there are items 93 * left in the tree. The argument is the number of items to be printed 94 * before becoming silent. 95 */ 96 void mca_mpool_base_tree_print(int); 97 98 END_C_DECLS 99 100 #endif /* MCA_MPOOL_BASE_TREE_H */