@@ -15,7 +15,6 @@ urUSMHostAlloc(ur_context_handle_t hContext, const ur_usm_desc_t *pUSMDesc,
15
15
ur_usm_pool_handle_t , size_t size, void **ppMem) {
16
16
17
17
void *Ptr = nullptr ;
18
- ur_result_t RetVal = UR_RESULT_ERROR_INVALID_OPERATION;
19
18
uint32_t Alignment = pUSMDesc ? pUSMDesc->align : 0 ;
20
19
21
20
cl_mem_alloc_flags_intel Flags = 0 ;
@@ -40,23 +39,28 @@ urUSMHostAlloc(ur_context_handle_t hContext, const ur_usm_desc_t *pUSMDesc,
40
39
// First we need to look up the function pointer
41
40
clHostMemAllocINTEL_fn FuncPtr = nullptr ;
42
41
cl_context CLContext = cl_adapter::cast<cl_context>(hContext);
43
- RetVal = cl_ext::getExtFuncFromContext<clHostMemAllocINTEL_fn>(
44
- CLContext, cl_ext::ExtFuncPtrCache->clHostMemAllocINTELCache ,
45
- cl_ext::HostMemAllocName, &FuncPtr);
42
+ if (auto UrResult = cl_ext::getExtFuncFromContext<clHostMemAllocINTEL_fn>(
43
+ CLContext, cl_ext::ExtFuncPtrCache->clHostMemAllocINTELCache ,
44
+ cl_ext::HostMemAllocName, &FuncPtr)) {
45
+ return UrResult;
46
+ }
46
47
47
48
if (FuncPtr) {
48
- Ptr = FuncPtr (CLContext, Properties, size, Alignment,
49
- cl_adapter::cast<cl_int *>(&RetVal));
49
+ cl_int ClResult = CL_SUCCESS;
50
+ Ptr = FuncPtr (CLContext, Properties, size, Alignment, &ClResult);
51
+ if (ClResult == CL_INVALID_BUFFER_SIZE) {
52
+ return UR_RESULT_ERROR_INVALID_USM_SIZE;
53
+ }
54
+ CL_RETURN_ON_FAILURE (ClResult);
50
55
}
51
56
52
57
*ppMem = Ptr;
53
58
54
- // ensure we aligned the allocation correctly
55
- if (RetVal == UR_RESULT_SUCCESS && Alignment != 0 )
56
- assert (reinterpret_cast <std::uintptr_t >(*ppMem) % Alignment == 0 &&
57
- " allocation not aligned correctly" );
59
+ assert ((Alignment == 0 ||
60
+ reinterpret_cast <std::uintptr_t >(*ppMem) % Alignment == 0 ) &&
61
+ " Allocation not aligned correctly!" );
58
62
59
- return RetVal ;
63
+ return UR_RESULT_SUCCESS ;
60
64
}
61
65
62
66
UR_APIEXPORT ur_result_t UR_APICALL
@@ -65,7 +69,6 @@ urUSMDeviceAlloc(ur_context_handle_t hContext, ur_device_handle_t hDevice,
65
69
size_t size, void **ppMem) {
66
70
67
71
void *Ptr = nullptr ;
68
- ur_result_t RetVal = UR_RESULT_ERROR_INVALID_OPERATION;
69
72
uint32_t Alignment = pUSMDesc ? pUSMDesc->align : 0 ;
70
73
71
74
cl_mem_alloc_flags_intel Flags = 0 ;
@@ -92,24 +95,30 @@ urUSMDeviceAlloc(ur_context_handle_t hContext, ur_device_handle_t hDevice,
92
95
// First we need to look up the function pointer
93
96
clDeviceMemAllocINTEL_fn FuncPtr = nullptr ;
94
97
cl_context CLContext = cl_adapter::cast<cl_context>(hContext);
95
- RetVal = cl_ext::getExtFuncFromContext<clDeviceMemAllocINTEL_fn>(
96
- CLContext, cl_ext::ExtFuncPtrCache->clDeviceMemAllocINTELCache ,
97
- cl_ext::DeviceMemAllocName, &FuncPtr);
98
+ if (auto UrResult = cl_ext::getExtFuncFromContext<clDeviceMemAllocINTEL_fn>(
99
+ CLContext, cl_ext::ExtFuncPtrCache->clDeviceMemAllocINTELCache ,
100
+ cl_ext::DeviceMemAllocName, &FuncPtr)) {
101
+ return UrResult;
102
+ }
98
103
99
104
if (FuncPtr) {
105
+ cl_int ClResult = CL_SUCCESS;
100
106
Ptr = FuncPtr (CLContext, cl_adapter::cast<cl_device_id>(hDevice),
101
107
cl_adapter::cast<cl_mem_properties_intel *>(Properties), size,
102
- Alignment, cl_adapter::cast<cl_int *>(&RetVal));
108
+ Alignment, &ClResult);
109
+ if (ClResult == CL_INVALID_BUFFER_SIZE) {
110
+ return UR_RESULT_ERROR_INVALID_USM_SIZE;
111
+ }
112
+ CL_RETURN_ON_FAILURE (ClResult);
103
113
}
104
114
105
115
*ppMem = Ptr;
106
116
107
- // ensure we aligned the allocation correctly
108
- if (RetVal == UR_RESULT_SUCCESS && Alignment != 0 )
109
- assert (reinterpret_cast <std::uintptr_t >(*ppMem) % Alignment == 0 &&
110
- " allocation not aligned correctly" );
117
+ assert ((Alignment == 0 ||
118
+ reinterpret_cast <std::uintptr_t >(*ppMem) % Alignment == 0 ) &&
119
+ " Allocation not aligned correctly!" );
111
120
112
- return RetVal ;
121
+ return UR_RESULT_SUCCESS ;
113
122
}
114
123
115
124
UR_APIEXPORT ur_result_t UR_APICALL
@@ -118,7 +127,6 @@ urUSMSharedAlloc(ur_context_handle_t hContext, ur_device_handle_t hDevice,
118
127
size_t size, void **ppMem) {
119
128
120
129
void *Ptr = nullptr ;
121
- ur_result_t RetVal = UR_RESULT_ERROR_INVALID_OPERATION;
122
130
uint32_t Alignment = pUSMDesc ? pUSMDesc->align : 0 ;
123
131
124
132
cl_mem_alloc_flags_intel Flags = 0 ;
@@ -155,22 +163,29 @@ urUSMSharedAlloc(ur_context_handle_t hContext, ur_device_handle_t hDevice,
155
163
// First we need to look up the function pointer
156
164
clSharedMemAllocINTEL_fn FuncPtr = nullptr ;
157
165
cl_context CLContext = cl_adapter::cast<cl_context>(hContext);
158
- RetVal = cl_ext::getExtFuncFromContext<clSharedMemAllocINTEL_fn>(
159
- CLContext, cl_ext::ExtFuncPtrCache->clSharedMemAllocINTELCache ,
160
- cl_ext::SharedMemAllocName, &FuncPtr);
166
+ if (auto UrResult = cl_ext::getExtFuncFromContext<clSharedMemAllocINTEL_fn>(
167
+ CLContext, cl_ext::ExtFuncPtrCache->clSharedMemAllocINTELCache ,
168
+ cl_ext::SharedMemAllocName, &FuncPtr)) {
169
+ return UrResult;
170
+ }
161
171
162
172
if (FuncPtr) {
173
+ cl_int ClResult = CL_SUCCESS;
163
174
Ptr = FuncPtr (CLContext, cl_adapter::cast<cl_device_id>(hDevice),
164
175
cl_adapter::cast<cl_mem_properties_intel *>(Properties), size,
165
- Alignment, cl_adapter::cast<cl_int *>(&RetVal));
176
+ Alignment, cl_adapter::cast<cl_int *>(&ClResult));
177
+ if (ClResult == CL_INVALID_BUFFER_SIZE) {
178
+ return UR_RESULT_ERROR_INVALID_USM_SIZE;
179
+ }
180
+ CL_RETURN_ON_FAILURE (ClResult);
166
181
}
167
182
168
183
*ppMem = Ptr;
169
184
170
- assert (Alignment == 0 ||
171
- (RetVal == UR_RESULT_SUCCESS &&
172
- reinterpret_cast <std:: uintptr_t >(*ppMem) % Alignment == 0 ) );
173
- return RetVal ;
185
+ assert (( Alignment == 0 ||
186
+ reinterpret_cast <std:: uintptr_t >(*ppMem) % Alignment == 0 ) &&
187
+ " Allocation not aligned correctly! " );
188
+ return UR_RESULT_SUCCESS ;
174
189
}
175
190
176
191
UR_APIEXPORT ur_result_t UR_APICALL urUSMFree (ur_context_handle_t hContext,
@@ -331,14 +346,11 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueUSMMemcpy(
331
346
332
347
UR_APIEXPORT ur_result_t UR_APICALL urEnqueueUSMPrefetch (
333
348
ur_queue_handle_t hQueue, [[maybe_unused]] const void *pMem,
334
- [[maybe_unused]] size_t size, ur_usm_migration_flags_t flags,
349
+ [[maybe_unused]] size_t size,
350
+ [[maybe_unused]] ur_usm_migration_flags_t flags,
335
351
uint32_t numEventsInWaitList, const ur_event_handle_t *phEventWaitList,
336
352
ur_event_handle_t *phEvent) {
337
353
338
- // flags is currently unused so fail if set
339
- if (flags != 0 )
340
- return UR_RESULT_ERROR_INVALID_VALUE;
341
-
342
354
return mapCLErrorToUR (clEnqueueMarkerWithWaitList (
343
355
cl_adapter::cast<cl_command_queue>(hQueue), numEventsInWaitList,
344
356
cl_adapter::cast<const cl_event *>(phEventWaitList),
@@ -504,9 +516,14 @@ urUSMGetMemAllocInfo(ur_context_handle_t hContext, const void *pMem,
504
516
}
505
517
506
518
if (FuncPtr) {
507
- RetVal =
508
- mapCLErrorToUR (FuncPtr (cl_adapter::cast<cl_context>(hContext), pMem,
509
- PropNameCL, propSize, pPropValue, pPropSizeRet));
519
+ size_t CheckPropSize = 0 ;
520
+ size_t *CheckPropSizeRet = pPropSizeRet ? pPropSizeRet : &CheckPropSize;
521
+ RetVal = mapCLErrorToUR (FuncPtr (cl_adapter::cast<cl_context>(hContext),
522
+ pMem, PropNameCL, propSize, pPropValue,
523
+ CheckPropSizeRet));
524
+ if (pPropValue && *CheckPropSizeRet != propSize) {
525
+ return UR_RESULT_ERROR_INVALID_SIZE;
526
+ }
510
527
if (RetVal == UR_RESULT_SUCCESS && pPropValue &&
511
528
propName == UR_USM_ALLOC_INFO_TYPE) {
512
529
auto *AllocTypeCL =
0 commit comments