14
14
#include <umf/memory_provider_ops.h>
15
15
#include <umf/providers/provider_level_zero.h>
16
16
17
+ #include "provider_ctl_stats_type.h"
17
18
#include "provider_level_zero_internal.h"
18
19
#include "utils_load_library.h"
19
20
#include "utils_log.h"
@@ -73,6 +74,8 @@ typedef struct ze_memory_provider_t {
73
74
size_t min_page_size ;
74
75
75
76
uint32_t device_ordinal ;
77
+
78
+ ctl_stats_t stats ;
76
79
} ze_memory_provider_t ;
77
80
78
81
typedef struct ze_ops_t {
@@ -115,6 +118,16 @@ static void store_last_native_error(int32_t native_error) {
115
118
TLS_last_native_error = native_error ;
116
119
}
117
120
121
+ #define CTL_PROVIDER_TYPE ze_memory_provider_t
122
+ #include "provider_ctl_stats_impl.h"
123
+
124
+ struct ctl ze_memory_ctl_root ;
125
+ static UTIL_ONCE_FLAG ctl_initialized = UTIL_ONCE_FLAG_INIT ;
126
+
127
+ static void initialize_ze_ctl (void ) {
128
+ CTL_REGISTER_MODULE (& ze_memory_ctl_root , stats );
129
+ }
130
+
118
131
static umf_result_t ze2umf_result (ze_result_t result ) {
119
132
switch (result ) {
120
133
case ZE_RESULT_SUCCESS :
@@ -429,13 +442,13 @@ static umf_result_t ze_memory_provider_alloc(void *provider, size_t size,
429
442
}
430
443
}
431
444
432
- return ze2umf_result (ze_result );
445
+ provider_ctl_stats_alloc (ze_provider , size );
446
+
447
+ return UMF_RESULT_SUCCESS ;
433
448
}
434
449
435
450
static umf_result_t ze_memory_provider_free (void * provider , void * ptr ,
436
451
size_t bytes ) {
437
- (void )bytes ;
438
-
439
452
if (ptr == NULL ) {
440
453
return UMF_RESULT_SUCCESS ;
441
454
}
@@ -451,8 +464,15 @@ static umf_result_t ze_memory_provider_free(void *provider, void *ptr,
451
464
.pNext = NULL ,
452
465
.freePolicy = ze_provider -> freePolicyFlags };
453
466
454
- return ze2umf_result (
455
- g_ze_ops .zeMemFreeExt (ze_provider -> context , & desc , ptr ));
467
+ umf_result_t ret =
468
+ ze2umf_result (g_ze_ops .zeMemFreeExt (ze_provider -> context , & desc , ptr ));
469
+ if (ret != UMF_RESULT_SUCCESS ) {
470
+ return ret ;
471
+ }
472
+
473
+ provider_ctl_stats_free (ze_provider , bytes );
474
+
475
+ return UMF_RESULT_SUCCESS ;
456
476
}
457
477
458
478
static umf_result_t query_min_page_size (ze_memory_provider_t * ze_provider ,
@@ -790,6 +810,14 @@ ze_memory_provider_close_ipc_handle(void *provider, void *ptr, size_t size) {
790
810
return UMF_RESULT_SUCCESS ;
791
811
}
792
812
813
+ static umf_result_t ze_ctl (void * provider , int operationType , const char * name ,
814
+ void * arg , size_t size ,
815
+ umf_ctl_query_type_t query_type ) {
816
+ utils_init_once (& ctl_initialized , initialize_ze_ctl );
817
+ return ctl_query (& ze_memory_ctl_root , provider , operationType , name ,
818
+ query_type , arg , size );
819
+ }
820
+
793
821
static umf_memory_provider_ops_t UMF_LEVEL_ZERO_MEMORY_PROVIDER_OPS = {
794
822
.version = UMF_PROVIDER_OPS_VERSION_CURRENT ,
795
823
.initialize = ze_memory_provider_initialize ,
@@ -809,6 +837,7 @@ static umf_memory_provider_ops_t UMF_LEVEL_ZERO_MEMORY_PROVIDER_OPS = {
809
837
.ext_put_ipc_handle = ze_memory_provider_put_ipc_handle ,
810
838
.ext_open_ipc_handle = ze_memory_provider_open_ipc_handle ,
811
839
.ext_close_ipc_handle = ze_memory_provider_close_ipc_handle ,
840
+ .ext_ctl = ze_ctl ,
812
841
};
813
842
814
843
const umf_memory_provider_ops_t * umfLevelZeroMemoryProviderOps (void ) {
0 commit comments