1 /*
2 * Copyright (C) by Argonne National Laboratory
3 * See COPYRIGHT in top-level directory
4 */
5
6 #ifndef MPIDU_GENQ_SHMEM_POOL_H_INCLUDED
7 #define MPIDU_GENQ_SHMEM_POOL_H_INCLUDED
8
9 #include "mpidimpl.h"
10 #include "mpidu_genqi_shmem_types.h"
11 #include "mpidu_genq_shmem_queue.h"
12
13 #include <stdlib.h>
14 #include <stdint.h>
15 #include <string.h>
16
17 int MPIDU_genq_shmem_pool_create_unsafe(uintptr_t cell_size, uintptr_t cells_per_proc,
18 uintptr_t num_proc, int rank,
19 MPIDU_genq_shmem_pool_t * pool);
20 int MPIDU_genq_shmem_pool_destroy_unsafe(MPIDU_genq_shmem_pool_t pool);
21
MPIDU_genq_shmem_pool_cell_alloc(MPIDU_genq_shmem_pool_t pool,void ** cell)22 static inline int MPIDU_genq_shmem_pool_cell_alloc(MPIDU_genq_shmem_pool_t pool, void **cell)
23 {
24 int rc = MPI_SUCCESS;
25 MPIDU_genqi_shmem_pool_s *pool_obj = (MPIDU_genqi_shmem_pool_s *) pool;
26
27 *cell = NULL;
28
29 MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_GENQ_SHMEM_POOL_CELL_ALLOC);
30 MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_GENQ_SHMEM_POOL_CELL_ALLOC);
31
32 rc = MPIDU_genq_shmem_queue_dequeue(pool, &pool_obj->free_queues[pool_obj->rank], cell);
33 MPIR_ERR_CHECK(rc);
34
35 fn_exit:
36 MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_GENQ_SHMEM_POOL_CELL_ALLOC);
37 return rc;
38 fn_fail:
39 goto fn_exit;
40 }
41
MPIDU_genq_shmem_pool_cell_free(MPIDU_genq_shmem_pool_t pool,void * cell)42 static inline int MPIDU_genq_shmem_pool_cell_free(MPIDU_genq_shmem_pool_t pool, void *cell)
43 {
44 int rc = MPI_SUCCESS;
45 MPIDU_genqi_shmem_cell_header_s *cell_h = CELL_TO_HEADER(cell);
46 MPIDU_genqi_shmem_pool_s *pool_obj = (MPIDU_genqi_shmem_pool_s *) pool;
47
48 MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_GENQ_SHMEM_POOL_CELL_FREE);
49 MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_GENQ_SHMEM_POOL_CELL_FREE);
50
51 rc = MPIDU_genq_shmem_queue_enqueue(pool, &pool_obj->free_queues[cell_h->block_idx], cell);
52 MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_GENQ_SHMEM_POOL_CELL_FREE);
53 return rc;
54 }
55
56 #endif /* ifndef MPIDU_GENQ_SHMEM_POOL_H_INCLUDED */
57