예제 #1
0
int mca_memheap_base_static_init(mca_memheap_map_t *map)
{
    /* read and parse segments from /proc/self/maps */
    int ret = OSHMEM_SUCCESS;

    assert(map);
    assert(SYMB_SEG_INDEX <= map->n_segments);

    ret = _load_segments();

    if (OSHMEM_SUCCESS == ret) {
        int i;
        size_t total_mem;

        for (i = 0, total_mem = 0; i < memheap_context.n_segments; i++) {
            map_segment_t *s = &map->mem_segs[map->n_segments];

            memset(s, 0, sizeof(*s));
            MAP_SEGMENT_RESET_FLAGS(s);
            s->seg_id = MAP_SEGMENT_SHM_INVALID;
            s->seg_base_addr = memheap_context.mem_segs[i].start;
            s->end = memheap_context.mem_segs[i].end;
            s->seg_size = ((uintptr_t)s->end - (uintptr_t)s->seg_base_addr);
            s->type = MAP_SEGMENT_STATIC;
            map->n_segments++;

            total_mem += ((uintptr_t)s->end - (uintptr_t)s->seg_base_addr);
        }
        MEMHEAP_VERBOSE(1,
                        "Memheap static memory: %llu byte(s), %d segments",
                        (unsigned long long)total_mem, map->n_segments);
    }

    return ret;
}
예제 #2
0
/**
 * completely resets the contents of *ds_buf
 */
static inline void
shmem_ds_reset(map_segment_t *ds_buf)
{
    OPAL_OUTPUT_VERBOSE(
          (70, oshmem_sshmem_base_framework.framework_output,
           "%s: %s: shmem_ds_resetting "
           "(id: %d, size: %lu, name: %s)\n",
           mca_sshmem_sysv_component.super.base_version.mca_type_name,
           mca_sshmem_sysv_component.super.base_version.mca_component_name,
           ds_buf->seg_id, (unsigned long)ds_buf->seg_size, ds_buf->seg_name)
      );

      MAP_SEGMENT_RESET_FLAGS(ds_buf);
      ds_buf->seg_id = MAP_SEGMENT_SHM_INVALID;
      ds_buf->seg_base_addr = 0;
      ds_buf->end = 0;
      ds_buf->seg_size = 0;
      ds_buf->type = MAP_SEGMENT_UNKNOWN;
      memset(ds_buf->seg_name, '\0', sizeof(ds_buf->seg_name));
}