/** * Copyright (C) Mellanox Technologies Ltd. 2018. ALL RIGHTS RESERVED. * * See file LICENSE for terms. */ #ifndef UCT_CUDA_IPC_CACHE_H_ #define UCT_CUDA_IPC_CACHE_H_ #include #include #include "cuda_ipc_md.h" #include #include typedef struct uct_cuda_ipc_cache uct_cuda_ipc_cache_t; typedef struct uct_cuda_ipc_cache_region uct_cuda_ipc_cache_region_t; typedef struct uct_cuda_ipc_rem_memh uct_cuda_ipc_rem_memh_t; struct uct_cuda_ipc_cache_region { ucs_pgt_region_t super; /**< Base class - page table region */ ucs_list_link_t list; /**< List element */ uct_cuda_ipc_key_t key; /**< Remote memory key */ void *mapped_addr; /**< Local mapped address */ }; struct uct_cuda_ipc_cache { pthread_rwlock_t lock; /**< protests the page table */ ucs_pgtable_t pgtable; /**< Page table to hold the regions */ char *name; /**< Name */ }; ucs_status_t uct_cuda_ipc_create_cache(uct_cuda_ipc_cache_t **cache, const char *name); void uct_cuda_ipc_destroy_cache(uct_cuda_ipc_cache_t *cache); ucs_status_t uct_cuda_ipc_cache_map_memhandle(void *arg, uct_cuda_ipc_key_t *key, void **mapped_addr); #endif