root/opal/mca/shmem/shmem_types.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. opal_shmem_sizeof_shmem_ds

   1 /*
   2  * Copyright (c) 2004-2008 The Trustees of Indiana University and Indiana
   3  *                         University Research and Technology
   4  *                         Corporation.  All rights reserved.
   5  * Copyright (c) 2004-2005 The University of Tennessee and The University
   6  *                         of Tennessee Research Foundation.  All rights
   7  *                         reserved.
   8  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
   9  *                         University of Stuttgart.  All rights reserved.
  10  * Copyright (c) 2004-2005 The Regents of the University of California.
  11  *                         All rights reserved.
  12  * Copyright (c) 2007-2010 Cisco Systems, Inc.  All rights reserved.
  13  * Copyright (c) 2009      Sun Microsystems, Inc.  All rights reserved.
  14  * Copyright (c) 2010      IBM Corporation.  All rights reserved.
  15  * Copyright (c) 2010-2012 Los Alamos National Security, LLC.
  16  *                         All rights reserved.
  17  * $COPYRIGHT$
  18  *
  19  * Additional copyrights may follow
  20  *
  21  * $HEADER$
  22  */
  23 
  24 /**
  25  * @file
  26  *
  27  * shmem (shared memory backing facility) framework types, convenience macros,
  28  * etc.
  29  */
  30 
  31 #ifndef OPAL_SHMEM_TYPES_H
  32 #define OPAL_SHMEM_TYPES_H
  33 
  34 #include "opal_config.h"
  35 
  36 #include <stddef.h>
  37 #include <string.h>
  38 
  39 BEGIN_C_DECLS
  40 
  41 /* ////////////////////////////////////////////////////////////////////////// */
  42 /**
  43  * ds_buf: pointer to opal_shmem_ds_t typedef'd struct
  44  */
  45 
  46 /**
  47  * flag indicating the state (valid/invalid) of the shmem data structure
  48  * 0x0* - reserved for non-internal flags
  49  */
  50 #define OPAL_SHMEM_DS_FLAGS_VALID 0x01
  51 
  52 /**
  53  * 0x1* - reserved for internal flags. that is, flags that will NOT be
  54  * propagated via ds_copy during inter-process information sharing.
  55  */
  56 
  57 /**
  58  * masks out internal flags
  59  */
  60 #define OPAL_SHMEM_DS_FLAGS_INTERNAL_MASK 0x0F
  61 
  62 /**
  63  * invalid id value
  64  */
  65 #define OPAL_SHMEM_DS_ID_INVALID -1
  66 
  67 /**
  68  * macro that sets all bits in flags to 0
  69  */
  70 #define OPAL_SHMEM_DS_RESET_FLAGS(ds_buf)                                      \
  71 do {                                                                           \
  72     (ds_buf)->flags = 0x00;                                                    \
  73 } while (0)
  74 
  75 /**
  76  * sets valid bit in flags to 1
  77  */
  78 #define OPAL_SHMEM_DS_SET_VALID(ds_buf)                                        \
  79 do {                                                                           \
  80     (ds_buf)->flags |= OPAL_SHMEM_DS_FLAGS_VALID;                              \
  81 } while (0)
  82 
  83 /**
  84  * sets valid bit in flags to 0
  85  */
  86 #define OPAL_SHMEM_DS_INVALIDATE(ds_buf)                                       \
  87 do {                                                                           \
  88     (ds_buf)->flags &= ~OPAL_SHMEM_DS_FLAGS_VALID;                             \
  89 } while (0)
  90 
  91 /**
  92  * evaluates to 1 if the valid bit in flags is set to 1.  evaluates to 0
  93  * otherwise.
  94  */
  95 #define OPAL_SHMEM_DS_IS_VALID(ds_buf)                                         \
  96     ( (ds_buf)->flags & OPAL_SHMEM_DS_FLAGS_VALID )
  97 
  98 typedef uint8_t opal_shmem_ds_flag_t;
  99 
 100 /* shared memory segment header */
 101 struct opal_shmem_seg_hdr_t {
 102     /* segment lock */
 103     opal_atomic_lock_t lock;
 104     /* pid of the segment creator */
 105     pid_t cpid;
 106 };
 107 typedef struct opal_shmem_seg_hdr_t opal_shmem_seg_hdr_t;
 108 
 109 struct opal_shmem_ds_t {
 110     /* pid of the shared memory segment creator */
 111     pid_t seg_cpid;
 112     /* state flags */
 113     opal_shmem_ds_flag_t flags;
 114     /* ds id */
 115     int seg_id;
 116     /* size of shared memory segment */
 117     size_t seg_size;
 118     /* base address of shared memory segment */
 119     unsigned char *seg_base_addr;
 120     /* path to backing store -- last element so we can easily calculate the
 121      * "real" size of opal_shmem_ds_t. that is, the amount of the struct that
 122      * is actually being used. for example: if seg_name is something like:
 123      * "foo_baz" and OPAL_PATH_MAX is 4096, we want to know that only a very
 124      * limited amount of the seg_name buffer is actually being used.
 125      */
 126     char seg_name[OPAL_PATH_MAX];
 127 };
 128 typedef struct opal_shmem_ds_t opal_shmem_ds_t;
 129 
 130 /* ////////////////////////////////////////////////////////////////////////// */
 131 /**
 132  * Simply returns the amount of used space. For use when sending the entire
 133  * opal_shmem_ds_t payload isn't viable -- due to the potential disparity
 134  * between the reserved buffer space and what is actually in use.
 135  */
 136 static inline size_t
 137 opal_shmem_sizeof_shmem_ds(const opal_shmem_ds_t *ds_bufp)
 138 {
 139     char *name_base = NULL;
 140     size_t name_buf_offset = offsetof(opal_shmem_ds_t, seg_name);
 141 
 142     name_base = (char *)ds_bufp + name_buf_offset;
 143 
 144     return name_buf_offset + strlen(name_base) + 1;
 145 }
 146 
 147 END_C_DECLS
 148 
 149 #endif /* OPAL_SHMEM_TYPES_H */

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