File indexing completed on 2025-02-22 10:47:26
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 #ifndef PMIX_PTL_H_
0033 #define PMIX_PTL_H_
0034
0035 #include "src/include/pmix_config.h"
0036
0037 #include "src/include/pmix_types.h"
0038
0039 #include "src/mca/base/pmix_mca_base_framework.h"
0040 #include "src/mca/base/pmix_mca_base_var.h"
0041 #include "src/mca/bfrops/bfrops_types.h"
0042 #include "src/mca/mca.h"
0043
0044 #include "ptl_types.h"
0045
0046 BEGIN_C_DECLS
0047
0048
0049 struct pmix_peer_t;
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072 typedef pmix_status_t (*pmix_ptl_init_fn_t)(void);
0073
0074
0075 typedef void (*pmix_ptl_finalize_fn_t)(void);
0076
0077
0078 typedef pmix_status_t (*pmix_ptl_recv_fn_t)(struct pmix_peer_t *peer, pmix_ptl_cbfunc_t cbfunc,
0079 pmix_ptl_tag_t tag);
0080
0081
0082 typedef pmix_status_t (*pmix_ptl_cancel_fn_t)(struct pmix_peer_t *peer, pmix_ptl_tag_t tag);
0083
0084
0085
0086 typedef pmix_status_t (*pmix_ptl_connect_to_peer_fn_t)(struct pmix_peer_t *peer,
0087 pmix_info_t info[],
0088 size_t ninfo,
0089 char **suri);
0090
0091
0092 typedef void (*pmix_ptl_query_servers_fn_t)(char *dirname, pmix_list_t *servers);
0093
0094
0095
0096
0097
0098 typedef pmix_status_t (*pmix_ptl_setup_listener_fn_t)(pmix_info_t info[], size_t ninfo);
0099
0100
0101
0102 typedef pmix_status_t (*pmix_ptl_setup_fork_fn_t)(const pmix_proc_t *proc, char ***env);
0103
0104
0105
0106
0107 struct pmix_ptl_module_t {
0108 char *name;
0109 pmix_ptl_init_fn_t init;
0110 pmix_ptl_finalize_fn_t finalize;
0111 pmix_ptl_recv_fn_t recv;
0112 pmix_ptl_cancel_fn_t cancel;
0113 pmix_ptl_connect_to_peer_fn_t connect_to_peer;
0114 pmix_ptl_query_servers_fn_t query_servers;
0115 pmix_ptl_setup_listener_fn_t setup_listener;
0116 pmix_ptl_setup_fork_fn_t setup_fork;
0117 };
0118 typedef struct pmix_ptl_module_t pmix_ptl_module_t;
0119
0120
0121
0122
0123
0124
0125
0126 #define PMIX_PTL_SEND_RECV(r, p, b, c, d) \
0127 do { \
0128 pmix_ptl_sr_t *ms; \
0129 pmix_peer_t *pr = (pmix_peer_t *) (p); \
0130 if ((p)->finalized) { \
0131 (r) = PMIX_ERR_UNREACH; \
0132 } else { \
0133 ms = PMIX_NEW(pmix_ptl_sr_t); \
0134 PMIX_RETAIN(pr); \
0135 ms->peer = pr; \
0136 ms->bfr = (b); \
0137 ms->cbfunc = (c); \
0138 ms->cbdata = (d); \
0139 PMIX_THREADSHIFT(ms, pmix_ptl_base_send_recv); \
0140 (r) = PMIX_SUCCESS; \
0141 } \
0142 } while (0)
0143
0144
0145
0146 #define PMIX_PTL_SEND_ONEWAY(r, p, b, t) \
0147 do { \
0148 pmix_ptl_queue_t *q; \
0149 pmix_peer_t *pr = (pmix_peer_t *) (p); \
0150 if ((p)->finalized) { \
0151 (r) = PMIX_ERR_UNREACH; \
0152 } else { \
0153 q = PMIX_NEW(pmix_ptl_queue_t); \
0154 PMIX_RETAIN(pr); \
0155 q->peer = pr; \
0156 q->buf = (b); \
0157 q->tag = (t); \
0158 PMIX_THREADSHIFT(q, pmix_ptl_base_send); \
0159 (r) = PMIX_SUCCESS; \
0160 } \
0161 } while (0)
0162
0163 #define PMIX_PTL_RECV(r, c, t) \
0164 do { \
0165 pmix_ptl_posted_recv_t *req; \
0166 req = PMIX_NEW(pmix_ptl_posted_recv_t); \
0167 if (NULL == req) { \
0168 (r) = PMIX_ERR_NOMEM; \
0169 } else { \
0170 req->tag = (t); \
0171 req->cbfunc = (c); \
0172 pmix_event_assign(&(req->ev), pmix_globals.evbase, -1, EV_WRITE, \
0173 pmix_ptl_base_post_recv, req); \
0174 pmix_event_active(&(req->ev), EV_WRITE, 1); \
0175 (r) = PMIX_SUCCESS; \
0176 } \
0177 } while (0)
0178
0179 #define PMIX_PTL_CANCEL(r, t) \
0180 do { \
0181 pmix_ptl_posted_recv_t *req; \
0182 req = PMIX_NEW(pmix_ptl_posted_recv_t); \
0183 if (NULL == req) { \
0184 (r) = PMIX_ERR_NOMEM; \
0185 } else { \
0186 req->tag = (t); \
0187 pmix_event_assign(&(req->ev), pmix_globals.evbase, -1, EV_WRITE, \
0188 pmix_ptl_base_cancel_recv, req); \
0189 pmix_event_active(&(req->ev), EV_WRITE, 1); \
0190 (r) = PMIX_SUCCESS; \
0191 } \
0192 } while (0)
0193
0194
0195 PMIX_EXPORT extern void pmix_ptl_base_send(int sd, short args, void *cbdata);
0196 PMIX_EXPORT extern void pmix_ptl_base_send_recv(int sd, short args, void *cbdata);
0197 PMIX_EXPORT extern void pmix_ptl_base_register_recv(int sd, short args, void *cbdata);
0198 PMIX_EXPORT extern void pmix_ptl_base_cancel_recv(int sd, short args, void *cbdata);
0199
0200
0201
0202
0203
0204
0205 struct pmix_ptl_base_component_t {
0206 pmix_mca_base_component_t base;
0207 int priority;
0208 char *uri;
0209 };
0210 typedef struct pmix_ptl_base_component_t pmix_ptl_base_component_t;
0211
0212
0213 PMIX_EXPORT extern pmix_ptl_module_t pmix_ptl;
0214
0215
0216
0217
0218 #define PMIX_PTL_BASE_VERSION_2_0_0 PMIX_MCA_BASE_VERSION_1_0_0("ptl", 2, 0, 0)
0219
0220 END_C_DECLS
0221
0222 #endif