root/opal/mca/pmix/pmix4x/pmix/src/mca/pshmem/pshmem.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. _segment_ds_reset

   1 /*
   2  * Copyright (c) 2015-2016 Mellanox Technologies, Inc.
   3  *                         All rights reserved.
   4  * Copyright (c) 2017      Intel, Inc. All rights reserved.
   5  * $COPYRIGHT$
   6  *
   7  * Additional copyrights may follow
   8  *
   9  * $HEADER$
  10  */
  11 
  12 #ifndef PMIX_PSHMEM_H
  13 #define PMIX_PSHMEM_H
  14 
  15 #include <src/include/pmix_config.h>
  16 
  17 #include <pmix_common.h>
  18 #include "src/mca/mca.h"
  19 #include "src/mca/base/pmix_mca_base_var.h"
  20 #include "src/mca/base/pmix_mca_base_framework.h"
  21 
  22 
  23 BEGIN_C_DECLS
  24 
  25 #if !defined(MAP_FAILED)
  26 #    define MAP_FAILED ((char*)-1)
  27 #endif /* MAP_FAILED */
  28 
  29 #define PMIX_SHMEM_DS_ID_INVALID -1
  30 
  31 typedef enum {
  32     PMIX_PSHMEM_RONLY,
  33     PMIX_PSHMEM_RW
  34 } pmix_pshmem_access_mode_t;
  35 
  36 typedef struct pmix_pshmem_seg_t {
  37     /* pid of the shared memory segment creator */
  38     pid_t seg_cpid;
  39     /* ds id */
  40     int seg_id;
  41     /* size of shared memory segment */
  42     size_t seg_size;
  43     /* base address of shared memory segment */
  44     unsigned char *seg_base_addr;
  45     char seg_name[PMIX_PATH_MAX];
  46 } pmix_pshmem_seg_t;
  47 
  48 
  49 static inline void _segment_ds_reset(pmix_pshmem_seg_t *sm_seg)
  50 {
  51     sm_seg->seg_cpid = 0;
  52     sm_seg->seg_id = PMIX_SHMEM_DS_ID_INVALID;
  53     sm_seg->seg_size = 0;
  54     memset(sm_seg->seg_name, '\0', PMIX_PATH_MAX);
  55     sm_seg->seg_base_addr = (unsigned char *)MAP_FAILED;
  56 }
  57 
  58 /* initialize the module */
  59 typedef pmix_status_t (*pmix_pshmem_base_module_init_fn_t)(void);
  60 
  61 /* finalize the module */
  62 typedef void (*pmix_pshmem_base_module_finalize_fn_t)(void);
  63 
  64 /**
  65 * create a new shared memory segment and initialize members in structure
  66 * pointed to by sm_seg.
  67 *
  68 * @param sm_seg   pointer to pmix_pshmem_seg_t structure
  69 *
  70 * @param file_name unique string identifier that must be a valid,
  71 *                 writable path (IN).
  72 *
  73 * @param size     size of the shared memory segment.
  74 *
  75 * @return PMIX_SUCCESS on success.
  76 */
  77 typedef int (*pmix_pshmem_base_module_segment_create_fn_t)(pmix_pshmem_seg_t *sm_seg,
  78                                                            const char *file_name, size_t size);
  79 
  80 /**
  81 * attach to an existing shared memory segment initialized by segment_create.
  82 *
  83 * @param sm_seg  pointer to initialized pmix_pshmem_seg_t typedef'd
  84 *                structure (IN/OUT).
  85 *
  86 * @return        base address of shared memory segment on success. returns
  87 *                NULL otherwise.
  88 */
  89 typedef int (*pmix_pshmem_base_module_segment_attach_fn_t)(pmix_pshmem_seg_t *sm_seg,
  90                                                            pmix_pshmem_access_mode_t sm_mode);
  91 
  92 /**
  93 * detach from an existing shared memory segment.
  94 *
  95 * @param sm_seg  pointer to initialized pmix_pshmem_seg_t typedef'd structure
  96 *                (IN/OUT).
  97 *
  98 * @return PMIX_SUCCESS on success.
  99 */
 100 typedef int (*pmix_pshmem_base_module_segment_detach_fn_t)(pmix_pshmem_seg_t *sm_seg);
 101 
 102 /**
 103 * unlink an existing shared memory segment.
 104 *
 105 * @param sm_seg  pointer to initialized pmix_pshmem_seg_t typedef'd structure
 106 *                (IN/OUT).
 107 *
 108 * @return PMIX_SUCCESS on success.
 109 */
 110 typedef int (*pmix_pshmem_base_module_unlink_fn_t)(pmix_pshmem_seg_t *sm_seg);
 111 
 112 
 113 /**
 114 * structure for sm modules
 115 */
 116 typedef struct {
 117     const char *name;
 118     pmix_pshmem_base_module_init_fn_t            init;
 119     pmix_pshmem_base_module_finalize_fn_t        finalize;
 120     pmix_pshmem_base_module_segment_create_fn_t  segment_create;
 121     pmix_pshmem_base_module_segment_attach_fn_t  segment_attach;
 122     pmix_pshmem_base_module_segment_detach_fn_t  segment_detach;
 123     pmix_pshmem_base_module_unlink_fn_t          segment_unlink;
 124 } pmix_pshmem_base_module_t;
 125 
 126 /* define the component structure */
 127 struct pmix_pshmem_base_component_t {
 128     pmix_mca_base_component_t                       base;
 129     pmix_mca_base_component_data_t                  data;
 130     int                                             priority;
 131 };
 132 
 133 typedef struct pmix_pshmem_base_component_t pmix_pshmem_base_component_t;
 134 
 135 PMIX_EXPORT extern pmix_pshmem_base_module_t pmix_pshmem;
 136 
 137 /*
 138  * Macro for use in components that are of type gds
 139  */
 140 #define PMIX_PSHMEM_BASE_VERSION_1_0_0 \
 141     PMIX_MCA_BASE_VERSION_1_0_0("pshmem", 1, 0, 0)
 142 
 143 END_C_DECLS
 144 
 145 #endif /* PMIX_PSHMEM_H */

/* [<][>][^][v][top][bottom][index][help] */