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