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