Skip to content

Commit d620108

Browse files
committed
x
1 parent 96e5b38 commit d620108

File tree

3 files changed

+37
-7
lines changed

3 files changed

+37
-7
lines changed

src/memory_props.c

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,40 @@
1717
#include "memory_provider_internal.h"
1818
#include "provider/provider_tracking.h"
1919

20+
// TODO flag - IPC?
2021
umf_result_t
2122
umfGetMemoryPropertiesHandle(const void *ptr,
2223
umf_memory_properties_handle_t *props_handle) {
2324

24-
LOG_DEBUG("umfGetMemoryPropertiesHandle: ptr=%p, props_handle=%p", ptr,
25-
props_handle);
25+
//LOG_DEBUG("umfGetMemoryPropertiesHandle: ptr=%p, props_handle=%p", ptr,
26+
// props_handle);
2627

2728
if (props_handle == NULL) {
2829
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
2930
}
3031

3132
tracker_alloc_info_t *info = NULL;
3233
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &info);
33-
if (ret != UMF_RESULT_SUCCESS) {
34-
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
34+
35+
if (ret == UMF_RESULT_SUCCESS) {
36+
*props_handle = &info->props;
37+
//LOG_DEBUG("umfGetMemoryPropertiesHandle: props_handle=%p, id=%" PRIu64,
38+
// *props_handle, (*props_handle)->id);
39+
return UMF_RESULT_SUCCESS;
3540
}
3641

37-
*props_handle = &info->props;
42+
// try to get IPC info
43+
umf_ipc_info_t ipc_info;
44+
ret = umfMemoryTrackerGetIpcInfo(ptr, &ipc_info);
45+
if (ret != UMF_RESULT_SUCCESS) {
46+
LOG_ERR("Failed to get memory properties handle for ptr=%p", ptr);
47+
return ret;
48+
}
3849

39-
LOG_DEBUG("umfGetMemoryPropertiesHandle: props_handle=%p, id=%" PRIu64,
40-
*props_handle, (*props_handle)->id);
50+
*props_handle = ipc_info.props;
51+
//LOG_DEBUG(
52+
// "umfGetMemoryPropertiesHandle (IPC info): props_handle=%p, id=%" PRIu64,
53+
// *props_handle, (*props_handle)->id);
4154

4255
return UMF_RESULT_SUCCESS;
4356
}
@@ -46,20 +59,24 @@ umf_result_t umfGetMemoryProperty(umf_memory_properties_handle_t props_handle,
4659
umf_memory_property_id_t memory_property_id,
4760
size_t max_property_size, void *value) {
4861

62+
/*
4963
LOG_DEBUG("umfGetMemoryProperty: props_handle=%p, memory_property_id=%d, "
5064
"max_property_size=%zu, value=%p",
5165
props_handle, memory_property_id, max_property_size, value);
66+
*/
5267

5368
if ((value == NULL) || (props_handle == NULL) || (max_property_size == 0)) {
5469
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
5570
}
5671

5772
umf_memory_provider_t *provider = props_handle->provider;
5873

74+
/*
5975
LOG_DEBUG("umfGetMemoryProperty: provider=%p", provider);
6076
LOG_DEBUG("dereferencing value...");
6177
6278
LOG_DEBUG("value: %zu", *(size_t *)value);
79+
*/
6380

6481
switch (memory_property_id) {
6582
case UMF_MEMORY_PROPERTY_INVALID:

src/provider/provider_tracking.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ struct umf_memory_tracker_t {
4747
};
4848

4949
typedef struct tracker_ipc_info_t {
50+
umf_memory_properties_t props;
5051
size_t size;
5152
umf_memory_provider_handle_t provider;
5253
ipc_opened_cache_value_t *ipc_cache_value;
@@ -410,6 +411,14 @@ umfMemoryTrackerAddIpcSegment(umf_memory_tracker_handle_t hTracker,
410411
value->provider = provider;
411412
value->ipc_cache_value = cache_entry;
412413

414+
memset(&value->props, 0, sizeof(umf_memory_properties_t));
415+
value->props.id = utils_atomic_increment_u64(&unique_alloc_id);
416+
value->props.base = (void *)ptr;
417+
value->props.base_size = size;
418+
value->props.provider = provider;
419+
value->props.ptr = (void *)ptr;
420+
value->props.pool = NULL; // TODO
421+
413422
int ret =
414423
critnib_insert(hTracker->ipc_segments_map, (uintptr_t)ptr, value, 0);
415424
if (ret == 0) {
@@ -593,6 +602,8 @@ umf_result_t umfMemoryTrackerGetIpcInfo(const void *ptr,
593602
pIpcInfo->baseSize = rvalue->size;
594603
pIpcInfo->provider = rvalue->provider;
595604

605+
pIpcInfo->props = &rvalue->props;
606+
596607
if (ref_value) {
597608
critnib_release(TRACKER->ipc_segments_map, ref_value);
598609
}

src/provider/provider_tracking.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
5050
tracker_alloc_info_t **info);
5151

5252
typedef struct umf_ipc_info_t {
53+
umf_memory_properties_handle_t props;
54+
5355
void *base;
5456
size_t baseSize;
5557
umf_memory_provider_handle_t provider;

0 commit comments

Comments
 (0)