@@ -27,6 +27,9 @@ typedef struct ze_memory_provider_t {
27
27
ze_context_handle_t context ;
28
28
ze_device_handle_t device ;
29
29
ze_memory_type_t memory_type ;
30
+
31
+ ze_device_handle_t * resident_device_handles ;
32
+ uint32_t resident_device_count ;
30
33
} ze_memory_provider_t ;
31
34
32
35
typedef struct ze_ops_t {
@@ -48,6 +51,9 @@ typedef struct ze_ops_t {
48
51
ze_ipc_mem_handle_t ,
49
52
ze_ipc_memory_flags_t , void * * );
50
53
ze_result_t (* zeMemCloseIpcHandle )(ze_context_handle_t , void * );
54
+ ze_result_t (* zeContextMakeMemoryResident )(ze_context_handle_t ,
55
+ ze_device_handle_t , void * ,
56
+ size_t );
51
57
} ze_ops_t ;
52
58
53
59
static ze_ops_t g_ze_ops ;
@@ -78,11 +84,14 @@ static void init_ze_global_state(void) {
78
84
util_get_symbol_addr (0 , "zeMemOpenIpcHandle" , lib_name );
79
85
* (void * * )& g_ze_ops .zeMemCloseIpcHandle =
80
86
util_get_symbol_addr (0 , "zeMemCloseIpcHandle" , lib_name );
87
+ * (void * * )& g_ze_ops .zeContextMakeMemoryResident =
88
+ util_get_symbol_addr (0 , "zeContextMakeMemoryResident" , lib_name );
81
89
82
90
if (!g_ze_ops .zeMemAllocHost || !g_ze_ops .zeMemAllocDevice ||
83
91
!g_ze_ops .zeMemAllocShared || !g_ze_ops .zeMemFree ||
84
92
!g_ze_ops .zeMemGetIpcHandle || !g_ze_ops .zeMemOpenIpcHandle ||
85
- !g_ze_ops .zeMemCloseIpcHandle ) {
93
+ !g_ze_ops .zeMemCloseIpcHandle ||
94
+ !g_ze_ops .zeContextMakeMemoryResident ) {
86
95
// g_ze_ops.zeMemPutIpcHandle can be NULL because it was introduced
87
96
// starting from Level Zero 1.6
88
97
LOG_ERR ("Required Level Zero symbols not found." );
@@ -181,6 +190,15 @@ static umf_result_t ze_memory_provider_alloc(void *provider, size_t size,
181
190
return UMF_RESULT_ERROR_MEMORY_PROVIDER_SPECIFIC ;
182
191
}
183
192
193
+ for (uint32_t i = 0 ; i < ze_provider -> resident_device_count ; i ++ ) {
194
+ ze_result = g_ze_ops .zeContextMakeMemoryResident (
195
+ ze_provider -> context , ze_provider -> resident_device_handles [i ],
196
+ * resultPtr , size );
197
+ if (ze_result != ZE_RESULT_SUCCESS ) {
198
+ break ;
199
+ }
200
+ }
201
+
184
202
// TODO add error reporting
185
203
return (ze_result == ZE_RESULT_SUCCESS )
186
204
? UMF_RESULT_SUCCESS
0 commit comments