1414#include  <umf/memory_provider_ops.h> 
1515#include  <umf/providers/provider_level_zero.h> 
1616
17+ #include  "memory_provider_internal.h" 
1718#include  "provider_ctl_stats_type.h" 
1819#include  "provider_level_zero_internal.h" 
1920#include  "utils_load_library.h" 
@@ -32,6 +33,7 @@ void fini_ze_global_state(void) {
3233
3334#include  "base_alloc_global.h" 
3435#include  "libumf.h" 
36+ #include  "provider_level_zero_internal.h" 
3537#include  "utils_assert.h" 
3638#include  "utils_common.h" 
3739#include  "utils_concurrency.h" 
@@ -684,26 +686,6 @@ static umf_result_t ze_memory_provider_get_min_page_size(void *provider,
684686    return  UMF_RESULT_SUCCESS ;
685687}
686688
687- static  umf_result_t  ze_memory_provider_purge_lazy (void  * provider , void  * ptr ,
688-                                                   size_t  size ) {
689-     (void )provider ;
690-     (void )ptr ;
691-     (void )size ;
692- 
693-     // TODO not supported yet 
694-     return  UMF_RESULT_ERROR_NOT_SUPPORTED ;
695- }
696- 
697- static  umf_result_t  ze_memory_provider_purge_force (void  * provider , void  * ptr ,
698-                                                    size_t  size ) {
699-     (void )provider ;
700-     (void )ptr ;
701-     (void )size ;
702- 
703-     // TODO not supported yet 
704-     return  UMF_RESULT_ERROR_NOT_SUPPORTED ;
705- }
706- 
707689static  umf_result_t 
708690ze_memory_provider_get_recommended_page_size (void  * provider , size_t  size ,
709691                                             size_t  * pageSize ) {
@@ -725,32 +707,6 @@ static umf_result_t ze_memory_provider_get_name(void *provider,
725707    return  UMF_RESULT_SUCCESS ;
726708}
727709
728- static  umf_result_t  ze_memory_provider_allocation_merge (void  * hProvider ,
729-                                                         void  * lowPtr ,
730-                                                         void  * highPtr ,
731-                                                         size_t  totalSize ) {
732-     (void )hProvider ;
733-     (void )lowPtr ;
734-     (void )highPtr ;
735-     (void )totalSize ;
736- 
737-     // TODO not supported yet 
738-     return  UMF_RESULT_ERROR_NOT_SUPPORTED ;
739- }
740- 
741- static  umf_result_t  ze_memory_provider_allocation_split (void  * provider ,
742-                                                         void  * ptr ,
743-                                                         size_t  totalSize ,
744-                                                         size_t  firstSize ) {
745-     (void )provider ;
746-     (void )ptr ;
747-     (void )totalSize ;
748-     (void )firstSize ;
749- 
750-     // TODO not supported yet 
751-     return  UMF_RESULT_ERROR_NOT_SUPPORTED ;
752- }
753- 
754710typedef  struct  ze_ipc_data_t  {
755711    int  pid ;
756712    ze_ipc_mem_handle_t  ze_handle ;
@@ -871,6 +827,65 @@ static umf_result_t ze_ctl(void *hProvider,
871827                     query_type , arg , size , args );
872828}
873829
830+ static  umf_result_t  ze_memory_provider_get_allocation_properties (
831+     void  * provider , const  void  * ptr ,
832+     umf_memory_property_id_t  memory_property_id , void  * value ,
833+     size_t  max_property_size ) {
834+ 
835+     // unused 
836+     (void )max_property_size ;
837+     (void )ptr ;
838+ 
839+     struct  ze_memory_provider_t  * ze_provider  = 
840+         (struct  ze_memory_provider_t  * )provider ;
841+ 
842+     switch  (memory_property_id ) {
843+     case  UMF_MEMORY_PROPERTY_POINTER_TYPE :
844+         * (umf_usm_memory_type_t  * )value  = 
845+             ze2umf_memory_type (ze_provider -> memory_type );
846+         return  UMF_RESULT_SUCCESS ;
847+ 
848+     case  UMF_MEMORY_PROPERTY_CONTEXT :
849+         * (ze_context_handle_t  * )value  =  ze_provider -> context ;
850+         return  UMF_RESULT_SUCCESS ;
851+ 
852+     case  UMF_MEMORY_PROPERTY_DEVICE :
853+         * (ze_device_handle_t  * )value  =  ze_provider -> device ;
854+         return  UMF_RESULT_SUCCESS ;
855+ 
856+     default :
857+         break ;
858+     }
859+ 
860+     return  UMF_RESULT_ERROR_INVALID_ARGUMENT ;
861+ }
862+ 
863+ static  umf_result_t  ze_memory_provider_get_allocation_properties_size (
864+     void  * provider , umf_memory_property_id_t  memory_property_id , size_t  * size ) {
865+ 
866+     // unused 
867+     (void )provider ;
868+ 
869+     switch  (memory_property_id ) {
870+     case  UMF_MEMORY_PROPERTY_POINTER_TYPE :
871+         * size  =  sizeof (umf_usm_memory_type_t );
872+         return  UMF_RESULT_SUCCESS ;
873+ 
874+     case  UMF_MEMORY_PROPERTY_CONTEXT :
875+         * size  =  sizeof (ze_context_handle_t );
876+         return  UMF_RESULT_SUCCESS ;
877+ 
878+     case  UMF_MEMORY_PROPERTY_DEVICE :
879+         * size  =  sizeof (ze_device_handle_t );
880+         return  UMF_RESULT_SUCCESS ;
881+ 
882+     default :
883+         break ;
884+     }
885+ 
886+     return  UMF_RESULT_ERROR_INVALID_ARGUMENT ;
887+ }
888+ 
874889static  umf_memory_provider_ops_t  UMF_LEVEL_ZERO_MEMORY_PROVIDER_OPS  =  {
875890    .version  =  UMF_PROVIDER_OPS_VERSION_CURRENT ,
876891    .initialize  =  ze_memory_provider_initialize ,
@@ -881,16 +896,20 @@ static umf_memory_provider_ops_t UMF_LEVEL_ZERO_MEMORY_PROVIDER_OPS = {
881896    .get_recommended_page_size  =  ze_memory_provider_get_recommended_page_size ,
882897    .get_min_page_size  =  ze_memory_provider_get_min_page_size ,
883898    .get_name  =  ze_memory_provider_get_name ,
884-     .ext_purge_lazy  =  ze_memory_provider_purge_lazy ,
885-     .ext_purge_force  =  ze_memory_provider_purge_force ,
886-     .ext_allocation_merge  =  ze_memory_provider_allocation_merge ,
887-     .ext_allocation_split  =  ze_memory_provider_allocation_split ,
899+     .ext_purge_lazy  =  NULL ,
900+     .ext_purge_force  =  NULL ,
901+     .ext_allocation_merge  =  NULL ,
902+     .ext_allocation_split  =  NULL ,
888903    .ext_get_ipc_handle_size  =  ze_memory_provider_get_ipc_handle_size ,
889904    .ext_get_ipc_handle  =  ze_memory_provider_get_ipc_handle ,
890905    .ext_put_ipc_handle  =  ze_memory_provider_put_ipc_handle ,
891906    .ext_open_ipc_handle  =  ze_memory_provider_open_ipc_handle ,
892907    .ext_close_ipc_handle  =  ze_memory_provider_close_ipc_handle ,
893908    .ext_ctl  =  ze_ctl ,
909+     .ext_get_allocation_properties  = 
910+         ze_memory_provider_get_allocation_properties ,
911+     .ext_get_allocation_properties_size  = 
912+         ze_memory_provider_get_allocation_properties_size ,
894913};
895914
896915const  umf_memory_provider_ops_t  * umfLevelZeroMemoryProviderOps (void ) {
0 commit comments