1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ 2 /* 3 * Copyright (c) 2007 Cisco Systems, Inc. All rights reserved. 4 * Copyright (c) 2004-2007 The University of Tennessee and The University 5 * of Tennessee Research Foundation. All rights 6 * reserved. 7 * Copyright (c) 2015 Los Alamos National Security, LLC. All rights 8 * reserved. 9 * $COPYRIGHT$ 10 * 11 * Additional copyrights may follow 12 * 13 * $HEADER$ 14 */ 15 16 /********************************************************************** 17 * Copyright (C) 2000-2004 by Etnus, LLC. 18 * Copyright (C) 1999 by Etnus, Inc. 19 * Copyright (C) 1997-1998 Dolphin Interconnect Solutions Inc. 20 * 21 * Permission is hereby granted to use, reproduce, prepare derivative 22 * works, and to redistribute to others. 23 * 24 * DISCLAIMER 25 * 26 * Neither Dolphin Interconnect Solutions, Etnus LLC, nor any of their 27 * employees, makes any warranty express or implied, or assumes any 28 * legal liability or responsibility for the accuracy, completeness, 29 * or usefulness of any information, apparatus, product, or process 30 * disclosed, or represents that its use would not infringe privately 31 * owned rights. 32 * 33 * This code was written by 34 * James Cownie: Dolphin Interconnect Solutions. <jcownie@dolphinics.com> 35 * Etnus LLC <jcownie@etnus.com> 36 **********************************************************************/ 37 38 /* Update log 39 * 40 * May 19 1998 JHC: Changed the names of the structs now that we don't 41 * include this directly in mpi_interface.h 42 * Oct 27 1997 JHC: Structure definitions for structures used to hold MPICH 43 * info required by the DLL for dumping message queues. 44 */ 45 46 #ifndef OMPI_MSGQ_DLL_DEFS_H 47 #define OMPI_MSGQ_DLL_DEFS_H 48 49 #include "ompi_common_dll_defs.h" 50 51 /*********************************************************************** 52 * Information associated with a specific process 53 */ 54 55 typedef struct group_t 56 { 57 mqs_taddr_t group_base; /* Where was it in the process */ 58 int ref_count; /* How many references to us */ 59 int entries; /* How many entries */ 60 int* local_to_global; /* The translation table */ 61 } group_t; 62 63 /* Internal structure we hold for each communicator */ 64 typedef struct communicator_t 65 { 66 struct communicator_t * next; 67 group_t * group; /* Translations */ 68 mqs_taddr_t comm_ptr; /* pointer to the communicator in the process memory */ 69 int present; /* validation marker */ 70 mqs_communicator comm_info; /* Info needed at the higher level */ 71 } communicator_t; 72 73 typedef struct mqs_ompi_opal_list_t_pos { 74 mqs_taddr_t current_item; 75 mqs_taddr_t list; 76 mqs_taddr_t sentinel; 77 } mqs_opal_list_t_pos; 78 79 typedef struct { 80 mqs_opal_list_t_pos opal_list_t_pos; 81 mqs_taddr_t current_item; 82 mqs_taddr_t upper_bound; 83 mqs_tword_t header_space; 84 mqs_taddr_t free_list; 85 mqs_tword_t fl_frag_class; /* opal_class_t* */ 86 mqs_tword_t fl_mpool; /* struct mca_mpool_base_module_t* */ 87 mqs_tword_t fl_frag_size; /* size_t */ 88 mqs_tword_t fl_frag_alignment; /* size_t */ 89 mqs_tword_t fl_num_per_alloc; /* size_t */ 90 mqs_tword_t fl_num_allocated; /* size_t */ 91 mqs_tword_t fl_num_initial_alloc; /* size_t */ 92 } mqs_opal_free_list_t_pos; 93 94 95 /* Information for a single process, a list of communicators, some 96 * useful addresses, and the state of the iterators. 97 */ 98 typedef struct 99 { 100 struct communicator_t *communicator_list; /* List of communicators in the process */ 101 102 /* Addresses in the target process */ 103 mqs_taddr_t send_queue_base; /* Where to find the send message queues */ 104 mqs_taddr_t recv_queue_base; /* Where to find the recv message queues */ 105 mqs_taddr_t sendq_base; /* Where to find the send queue */ 106 mqs_taddr_t commlist_base; /* Where to find the list of communicators */ 107 /* Other info we need to remember about it */ 108 mqs_tword_t comm_number_free; /* the number of available positions in 109 * the communicator array. */ 110 mqs_tword_t comm_lowest_free; /* the lowest free communicator */ 111 mqs_tword_t show_internal_requests; /* show or not the Open MPI internal requests */ 112 /* State for the iterators */ 113 struct communicator_t *current_communicator; /* Easy, we're walking a simple list */ 114 115 int world_proc_array_entries; 116 mqs_taddr_t* world_proc_array; 117 118 mqs_opal_free_list_t_pos next_msg; /* And state for the message iterator */ 119 mqs_op_class what; /* What queue are we looking on */ 120 } mpi_process_info_extra; 121 122 #endif