/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/* vim: set ft=c.mpich : */
/*
* (C) 2016 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
#ifndef MPIDU_SHM_H_INCLUDED
#define MPIDU_SHM_H_INCLUDED
#define MPIDU_SHM_MAX_FNAME_LEN 256
#define MPIDU_SHM_CACHE_LINE_LEN 64
typedef struct MPIDU_shm_barrier {
OPA_int_t val;
OPA_int_t wait;
} MPIDU_shm_barrier_t;
typedef struct MPIDU_shm_seg {
size_t segment_len;
/* Handle to shm seg */
MPL_shm_hnd_t hnd;
/* Pointers */
char *base_addr;
/* Misc */
char file_name[MPIDU_SHM_MAX_FNAME_LEN];
int base_descs;
int symmetrical;
} MPIDU_shm_seg_t;
typedef struct MPIDU_shm_seg_info {
size_t size;
char *addr;
} MPIDU_shm_seg_info_t;
int MPIDU_shm_seg_alloc(size_t len, void **ptr_p, MPL_memory_class class);
int MPIDU_shm_seg_commit(MPIDU_shm_seg_t * memory, MPIDU_shm_barrier_t ** barrier,
int num_local, int local_rank, int local_procs_0, int rank,
MPL_memory_class class);
int MPIDU_shm_seg_destroy(MPIDU_shm_seg_t * memory, int num_local);
int MPIDU_shm_barrier_init(MPIDU_shm_barrier_t * barrier_region,
MPIDU_shm_barrier_t ** barrier, int init_values);
int MPIDU_shm_barrier(MPIDU_shm_barrier_t * barrier, int num_local);
#endif /* MPIDU_SHM_H_INCLUDED */