Skip to content

Commit e5d3861

Browse files
committed
add backward compatibility for 0.10.1 ops structs
1 parent 4b3714a commit e5d3861

13 files changed

+329
-26
lines changed

include/umf/providers/provider_devdax_memory.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2024 Intel Corporation
2+
* Copyright (C) 2024-2025 Intel Corporation
33
*
44
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
55
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
@@ -65,6 +65,10 @@ typedef enum umf_devdax_memory_provider_native_error {
6565
UMF_DEVDAX_RESULT_ERROR_PURGE_FORCE_FAILED, ///< Force purging failed
6666
} umf_devdax_memory_provider_native_error_t;
6767

68+
/// @cond
69+
// use 0.11 version of the ops by default
70+
#define umfDevDaxMemoryProviderOps umfDevDaxMemoryProviderOps_0_11
71+
/// @endcond
6872
umf_memory_provider_ops_t *umfDevDaxMemoryProviderOps(void);
6973

7074
#ifdef __cplusplus

include/umf/providers/provider_file_memory.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2024 Intel Corporation
2+
* Copyright (C) 2024-2025 Intel Corporation
33
*
44
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
55
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
@@ -66,6 +66,10 @@ typedef enum umf_file_memory_provider_native_error {
6666
UMF_FILE_RESULT_ERROR_PURGE_FORCE_FAILED, ///< Force purging failed
6767
} umf_file_memory_provider_native_error_t;
6868

69+
/// @cond
70+
// use 0.11 version of the ops by default
71+
#define umfFileMemoryProviderOps umfFileMemoryProviderOps_0_11
72+
/// @endcond
6973
umf_memory_provider_ops_t *umfFileMemoryProviderOps(void);
7074

7175
#ifdef __cplusplus

src/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,13 @@ set(UMF_SOURCES
7676
memspaces/memspace_highest_bandwidth.c
7777
memspaces/memspace_lowest_latency.c
7878
memspaces/memspace_numa.c
79+
provider/provider_coarse_deprecated.c
7980
provider/provider_cuda.c
81+
provider/provider_deprecated.c
8082
provider/provider_devdax_memory.c
83+
provider/provider_devdax_memory_deprecated.c
8184
provider/provider_file_memory.c
85+
provider/provider_file_memory_deprecated.c
8286
provider/provider_fixed_memory.c
8387
provider/provider_level_zero.c
8488
provider/provider_os_memory.c

src/libumf.def

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,20 @@ EXPORTS
1414
umfTearDown
1515
umfGetCurrentVersion
1616
umfCloseIPCHandle
17+
umfCoarseMemoryProviderGetStats ; deprecated
18+
umfCoarseMemoryProviderOps ; deprecated
1719
umfCUDAMemoryProviderOps
1820
umfCUDAMemoryProviderParamsCreate
1921
umfCUDAMemoryProviderParamsDestroy
2022
umfCUDAMemoryProviderParamsSetContext
2123
umfCUDAMemoryProviderParamsSetDevice
2224
umfCUDAMemoryProviderParamsSetMemoryType
23-
umfDevDaxMemoryProviderOps
25+
umfDevDaxMemoryProviderOps=umfDevDaxMemoryProviderOps_0_10 ; deprecated
2426
umfDevDaxMemoryProviderParamsCreate
2527
umfDevDaxMemoryProviderParamsDestroy
2628
umfDevDaxMemoryProviderParamsSetDeviceDax
2729
umfDevDaxMemoryProviderParamsSetProtection
28-
umfFileMemoryProviderOps
30+
umfFileMemoryProviderOps=umfFileMemoryProviderOps_0_10 ; deprecated
2931
umfFileMemoryProviderParamsCreate
3032
umfFileMemoryProviderParamsDestroy
3133
umfFileMemoryProviderParamsSetPath
@@ -118,6 +120,8 @@ EXPORTS
118120
umfScalablePoolParamsSetGranularity
119121
umfScalablePoolParamsSetKeepAllMemory
120122
; Added in UMF_0.11
123+
umfDevDaxMemoryProviderOps_0_11 ; redefined 0.10
124+
umfFileMemoryProviderOps_0_11 ; redefined 0.10
121125
umfFixedMemoryProviderOps
122126
umfFixedMemoryProviderParamsCreate
123127
umfFixedMemoryProviderParamsDestroy

src/libumf.map

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,20 @@ UMF_0.10 {
88
umfTearDown;
99
umfGetCurrentVersion;
1010
umfCloseIPCHandle;
11+
umfCoarseMemoryProviderGetStats; # deprecated
12+
umfCoarseMemoryProviderOps; # deprecated
1113
umfCUDAMemoryProviderOps;
1214
umfCUDAMemoryProviderParamsCreate;
1315
umfCUDAMemoryProviderParamsDestroy;
1416
umfCUDAMemoryProviderParamsSetContext;
1517
umfCUDAMemoryProviderParamsSetDevice;
1618
umfCUDAMemoryProviderParamsSetMemoryType;
17-
umfDevDaxMemoryProviderOps;
19+
umfDevDaxMemoryProviderOps; # deprecated
1820
umfDevDaxMemoryProviderParamsCreate;
1921
umfDevDaxMemoryProviderParamsDestroy;
2022
umfDevDaxMemoryProviderParamsSetDeviceDax;
2123
umfDevDaxMemoryProviderParamsSetProtection;
22-
umfFileMemoryProviderOps;
24+
umfFileMemoryProviderOps; # deprecated
2325
umfFileMemoryProviderParamsCreate;
2426
umfFileMemoryProviderParamsDestroy;
2527
umfFileMemoryProviderParamsSetPath;
@@ -116,6 +118,8 @@ UMF_0.10 {
116118
};
117119

118120
UMF_0.11 {
121+
umfDevDaxMemoryProviderOps_0_11; # redefined 0.10
122+
umfFileMemoryProviderOps_0_11; # redefined 0.10
119123
umfFixedMemoryProviderOps;
120124
umfFixedMemoryProviderParamsCreate;
121125
umfFixedMemoryProviderParamsDestroy;

src/memory_provider.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
*
3-
* Copyright (C) 2023-2024 Intel Corporation
3+
* Copyright (C) 2023-2025 Intel Corporation
44
*
55
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
66
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
@@ -11,13 +11,15 @@
1111
#include <stdbool.h>
1212
#include <stdio.h>
1313
#include <stdlib.h>
14+
#include <string.h>
1415

1516
#include <umf/memory_provider.h>
1617

1718
#include "base_alloc.h"
1819
#include "base_alloc_global.h"
1920
#include "libumf.h"
2021
#include "memory_provider_internal.h"
22+
#include "provider_deprecated.h"
2123
#include "utils_assert.h"
2224

2325
typedef struct umf_memory_provider_t {
@@ -163,7 +165,7 @@ umf_result_t umfMemoryProviderCreate(const umf_memory_provider_ops_t *ops,
163165
void *params,
164166
umf_memory_provider_handle_t *hProvider) {
165167
libumfInit();
166-
if (!ops || !hProvider || !validateOps(ops)) {
168+
if (!ops || !hProvider) {
167169
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
168170
}
169171

@@ -197,12 +199,7 @@ umf_result_t umfMemoryProviderCreate(const umf_memory_provider_ops_t *ops,
197199
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY;
198200
}
199201

200-
assert(ops->version == UMF_VERSION_CURRENT);
201-
202-
provider->ops = *ops;
203-
204-
assignOpsExtDefaults(&(provider->ops));
205-
assignOpsIpcDefaults(&(provider->ops));
202+
provider->ops = ops_current_ver;
206203

207204
void *provider_priv;
208205
umf_result_t ret = ops->initialize(params, &provider_priv);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
2+
/*
3+
* Copyright (C) 2025 Intel Corporation
4+
*
5+
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
6+
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7+
*/
8+
9+
#include <umf.h>
10+
#include <umf/memory_provider.h>
11+
#include <umf/memory_provider_ops.h>
12+
13+
#include "utils_log.h"
14+
15+
umf_memory_provider_ops_t *umfCoarseMemoryProviderOps(void) {
16+
LOG_ERR("Coarse Provider is deprecated!");
17+
return NULL;
18+
}
19+
20+
typedef struct coarse_memory_provider_stats_t {
21+
size_t alloc_size;
22+
size_t used_size;
23+
size_t num_upstream_blocks;
24+
size_t num_all_blocks;
25+
size_t num_free_blocks;
26+
} coarse_memory_provider_stats_t;
27+
28+
coarse_memory_provider_stats_t
29+
umfCoarseMemoryProviderGetStats(umf_memory_provider_handle_t provider) {
30+
(void)provider;
31+
LOG_ERR("Coarse Provider is deprecated!");
32+
coarse_memory_provider_stats_t ret = {0};
33+
return ret;
34+
}

src/provider/provider_deprecated.c

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* Copyright (C) 2025 Intel Corporation
3+
*
4+
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
5+
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
*/
7+
8+
#include <assert.h>
9+
#include <string.h>
10+
11+
#include <umf.h>
12+
#include <umf/memory_provider.h>
13+
#include <umf/memory_provider_ops.h>
14+
15+
#include "provider_deprecated.h"
16+
17+
umf_result_t umfDefaultFree_0_10(void *provider, void *ptr, size_t size) {
18+
(void)provider;
19+
(void)ptr;
20+
(void)size;
21+
return UMF_RESULT_ERROR_NOT_SUPPORTED;
22+
}
23+
24+
umf_result_t
25+
umfTranslateMemoryProviderOps_0_10(umf_memory_provider_ops_0_10_t *ops_0_10,
26+
umf_memory_provider_ops_t *ops) {
27+
ops->version = UMF_PROVIDER_OPS_VERSION_CURRENT;
28+
ops->alloc = ops_0_10->alloc;
29+
30+
// in UMF 0.10 the free() was a part of ext and could be NULL
31+
if (ops_0_10->ext.free != NULL) {
32+
ops->free = ops_0_10->ext.free;
33+
} else {
34+
ops->free = umfDefaultFree_0_10;
35+
}
36+
37+
ops->get_last_native_error = ops_0_10->get_last_native_error;
38+
ops->get_recommended_page_size = ops_0_10->get_recommended_page_size;
39+
ops->get_min_page_size = ops_0_10->get_min_page_size;
40+
ops->get_name = ops_0_10->get_name;
41+
ops->initialize = ops_0_10->initialize;
42+
ops->finalize = ops_0_10->finalize;
43+
44+
ops->ext.purge_lazy = ops_0_10->ext.purge_lazy;
45+
ops->ext.purge_force = ops_0_10->ext.purge_force;
46+
ops->ext.allocation_merge = ops_0_10->ext.allocation_merge;
47+
ops->ext.allocation_split = ops_0_10->ext.allocation_split;
48+
49+
// IPC hasn't changed
50+
assert(sizeof(umf_memory_provider_ipc_ops_t) ==
51+
sizeof(umf_memory_provider_ipc_ops_0_10_t));
52+
memcpy(&ops->ipc, &ops_0_10->ipc, sizeof(ops_0_10->ipc));
53+
54+
return UMF_RESULT_SUCCESS;
55+
}

src/provider/provider_deprecated.h

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
*
3+
* Copyright (C) 2025 Intel Corporation
4+
*
5+
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
6+
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7+
*
8+
*/
9+
10+
#ifndef UMF_PROVIDER_DEPRECATED_H
11+
#define UMF_PROVIDER_DEPRECATED_H 1
12+
13+
#include <umf/base.h>
14+
15+
#ifdef __cplusplus
16+
extern "C" {
17+
#endif
18+
19+
// define Memory Provider ops structure 0.10
20+
// NOTE: in UMF 0.10 the free() was optional and was a part of the "ext"
21+
// structure
22+
typedef struct umf_memory_provider_ext_ops_0_10_t {
23+
umf_result_t (*free)(void *provider, void *ptr, size_t size);
24+
umf_result_t (*purge_lazy)(void *provider, void *ptr, size_t size);
25+
umf_result_t (*purge_force)(void *provider, void *ptr, size_t size);
26+
umf_result_t (*allocation_merge)(void *hProvider, void *lowPtr,
27+
void *highPtr, size_t totalSize);
28+
umf_result_t (*allocation_split)(void *hProvider, void *ptr,
29+
size_t totalSize, size_t firstSize);
30+
} umf_memory_provider_ext_ops_0_10_t;
31+
32+
typedef struct umf_memory_provider_ipc_ops_0_10_t {
33+
umf_result_t (*get_ipc_handle_size)(void *provider, size_t *size);
34+
umf_result_t (*get_ipc_handle)(void *provider, const void *ptr, size_t size,
35+
void *providerIpcData);
36+
umf_result_t (*put_ipc_handle)(void *provider, void *providerIpcData);
37+
umf_result_t (*open_ipc_handle)(void *provider, void *providerIpcData,
38+
void **ptr);
39+
umf_result_t (*close_ipc_handle)(void *provider, void *ptr, size_t size);
40+
} umf_memory_provider_ipc_ops_0_10_t;
41+
42+
typedef struct umf_memory_provider_ops_0_10_t {
43+
uint32_t version;
44+
umf_result_t (*initialize)(void *params, void **provider);
45+
void (*finalize)(void *provider);
46+
umf_result_t (*alloc)(void *provider, size_t size, size_t alignment,
47+
void **ptr);
48+
void (*get_last_native_error)(void *provider, const char **ppMessage,
49+
int32_t *pError);
50+
umf_result_t (*get_recommended_page_size)(void *provider, size_t size,
51+
size_t *pageSize);
52+
umf_result_t (*get_min_page_size)(void *provider, void *ptr,
53+
size_t *pageSize);
54+
const char *(*get_name)(void *provider);
55+
umf_memory_provider_ext_ops_0_10_t ext;
56+
umf_memory_provider_ipc_ops_0_10_t ipc;
57+
} umf_memory_provider_ops_0_10_t;
58+
59+
umf_result_t umfDefaultFree_0_10(void *provider, void *ptr, size_t size);
60+
61+
umf_result_t
62+
umfTranslateMemoryProviderOps_0_10(umf_memory_provider_ops_0_10_t *ops_0_10,
63+
umf_memory_provider_ops_t *ops);
64+
65+
#ifdef __cplusplus
66+
}
67+
#endif
68+
69+
#endif /* #ifndef UMF_PROVIDER_DEPRECATED_H */

src/provider/provider_devdax_memory.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2024 Intel Corporation
2+
* Copyright (C) 2024-2025 Intel Corporation
33
*
44
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
55
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
@@ -529,8 +529,8 @@ static umf_result_t devdax_free(void *provider, void *ptr, size_t size) {
529529
return coarse_free(devdax_provider->coarse, ptr, size);
530530
}
531531

532-
static umf_memory_provider_ops_t UMF_DEVDAX_MEMORY_PROVIDER_OPS = {
533-
.version = UMF_VERSION_CURRENT,
532+
umf_memory_provider_ops_0_11_t UMF_DEVDAX_MEMORY_PROVIDER_OPS_0_11 = {
533+
.version = UMF_PROVIDER_OPS_VERSION_CURRENT,
534534
.initialize = devdax_initialize,
535535
.finalize = devdax_finalize,
536536
.alloc = devdax_alloc,
@@ -547,10 +547,11 @@ static umf_memory_provider_ops_t UMF_DEVDAX_MEMORY_PROVIDER_OPS = {
547547
.ipc.get_ipc_handle = devdax_get_ipc_handle,
548548
.ipc.put_ipc_handle = devdax_put_ipc_handle,
549549
.ipc.open_ipc_handle = devdax_open_ipc_handle,
550-
.ipc.close_ipc_handle = devdax_close_ipc_handle};
550+
.ipc.close_ipc_handle = devdax_close_ipc_handle,
551+
};
551552

552-
umf_memory_provider_ops_t *umfDevDaxMemoryProviderOps(void) {
553-
return &UMF_DEVDAX_MEMORY_PROVIDER_OPS;
553+
umf_memory_provider_ops_0_11_t *umfDevDaxMemoryProviderOps_0_11(void) {
554+
return &UMF_DEVDAX_MEMORY_PROVIDER_OPS_0_11;
554555
}
555556

556557
umf_result_t umfDevDaxMemoryProviderParamsCreate(

0 commit comments

Comments
 (0)