Skip to content

Commit 62c61c6

Browse files
Jaime ArteagaCompute-Runtime-Automation
authored andcommitted
Have Process Address Tables in the driver fail on mismatched versions
Signed-off-by: Jaime Arteaga <[email protected]>
1 parent 2a44fa1 commit 62c61c6

File tree

3 files changed

+420
-35
lines changed

3 files changed

+420
-35
lines changed

level_zero/api/core/ze_core_loader.cpp

Lines changed: 52 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2019-2020 Intel Corporation
2+
* Copyright (C) 2019-2021 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -22,8 +22,9 @@ zeGetDriverProcAddrTable(
2222
ze_driver_dditable_t *pDdiTable) {
2323
if (nullptr == pDdiTable)
2424
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
25-
if (driver_ddiTable.version < version)
26-
return ZE_RESULT_ERROR_UNKNOWN;
25+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
26+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
27+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
2728
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
2829
ze_result_t result = ZE_RESULT_SUCCESS;
2930
pDdiTable->pfnGet = zeDriverGet;
@@ -48,8 +49,9 @@ zeGetMemProcAddrTable(
4849
ze_mem_dditable_t *pDdiTable) {
4950
if (nullptr == pDdiTable)
5051
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
51-
if (driver_ddiTable.version < version)
52-
return ZE_RESULT_ERROR_UNKNOWN;
52+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
53+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
54+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
5355
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
5456

5557
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -83,8 +85,9 @@ zeGetContextProcAddrTable(
8385
ze_context_dditable_t *pDdiTable) {
8486
if (nullptr == pDdiTable)
8587
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
86-
if (driver_ddiTable.version < version)
87-
return ZE_RESULT_ERROR_UNKNOWN;
88+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
89+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
90+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
8891

8992
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
9093

@@ -118,8 +121,9 @@ zeGetPhysicalMemProcAddrTable(
118121
ze_physical_mem_dditable_t *pDdiTable) {
119122
if (nullptr == pDdiTable)
120123
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
121-
if (driver_ddiTable.version < version)
122-
return ZE_RESULT_ERROR_UNKNOWN;
124+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
125+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
126+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
123127

124128
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
125129

@@ -141,8 +145,9 @@ zeGetVirtualMemProcAddrTable(
141145
ze_virtual_mem_dditable_t *pDdiTable) {
142146
if (nullptr == pDdiTable)
143147
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
144-
if (driver_ddiTable.version < version)
145-
return ZE_RESULT_ERROR_UNKNOWN;
148+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
149+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
150+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
146151
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
147152

148153
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -173,8 +178,9 @@ zeGetGlobalProcAddrTable(
173178
ze_global_dditable_t *pDdiTable) {
174179
if (nullptr == pDdiTable)
175180
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
176-
if (driver_ddiTable.version < version)
177-
return ZE_RESULT_ERROR_UNKNOWN;
181+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
182+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
183+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
178184
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
179185

180186
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -192,8 +198,9 @@ zeGetDeviceProcAddrTable(
192198
ze_device_dditable_t *pDdiTable) {
193199
if (nullptr == pDdiTable)
194200
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
195-
if (driver_ddiTable.version < version)
196-
return ZE_RESULT_ERROR_UNKNOWN;
201+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
202+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
203+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
197204
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
198205

199206
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -237,8 +244,9 @@ zeGetCommandQueueProcAddrTable(
237244
ze_command_queue_dditable_t *pDdiTable) {
238245
if (nullptr == pDdiTable)
239246
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
240-
if (driver_ddiTable.version < version)
241-
return ZE_RESULT_ERROR_UNKNOWN;
247+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
248+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
249+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
242250
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
243251

244252
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -262,8 +270,9 @@ zeGetCommandListProcAddrTable(
262270
ze_command_list_dditable_t *pDdiTable) {
263271
if (nullptr == pDdiTable)
264272
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
265-
if (driver_ddiTable.version < version)
266-
return ZE_RESULT_ERROR_UNKNOWN;
273+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
274+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
275+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
267276
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
268277

269278
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -331,8 +340,9 @@ zeGetFenceProcAddrTable(
331340
ze_fence_dditable_t *pDdiTable) {
332341
if (nullptr == pDdiTable)
333342
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
334-
if (driver_ddiTable.version < version)
335-
return ZE_RESULT_ERROR_UNKNOWN;
343+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
344+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
345+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
336346
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
337347

338348
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -358,8 +368,9 @@ zeGetEventPoolProcAddrTable(
358368
ze_event_pool_dditable_t *pDdiTable) {
359369
if (nullptr == pDdiTable)
360370
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
361-
if (driver_ddiTable.version < version)
362-
return ZE_RESULT_ERROR_UNKNOWN;
371+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
372+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
373+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
363374
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
364375

365376
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -385,8 +396,9 @@ zeGetEventProcAddrTable(
385396
ze_event_dditable_t *pDdiTable) {
386397
if (nullptr == pDdiTable)
387398
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
388-
if (driver_ddiTable.version < version)
389-
return ZE_RESULT_ERROR_UNKNOWN;
399+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
400+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
401+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
390402
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
391403

392404
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -416,8 +428,9 @@ zeGetImageProcAddrTable(
416428
ze_image_dditable_t *pDdiTable) {
417429
if (nullptr == pDdiTable)
418430
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
419-
if (driver_ddiTable.version < version)
420-
return ZE_RESULT_ERROR_UNKNOWN;
431+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
432+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
433+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
421434
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
422435

423436
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -439,8 +452,9 @@ zeGetModuleProcAddrTable(
439452
ze_module_dditable_t *pDdiTable) {
440453
if (nullptr == pDdiTable)
441454
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
442-
if (driver_ddiTable.version < version)
443-
return ZE_RESULT_ERROR_UNKNOWN;
455+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
456+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
457+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
444458
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
445459

446460
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -472,8 +486,9 @@ zeGetModuleBuildLogProcAddrTable(
472486
ze_module_build_log_dditable_t *pDdiTable) {
473487
if (nullptr == pDdiTable)
474488
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
475-
if (driver_ddiTable.version < version)
476-
return ZE_RESULT_ERROR_UNKNOWN;
489+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
490+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
491+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
477492
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
478493

479494
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -493,8 +508,9 @@ zeGetKernelProcAddrTable(
493508
ze_kernel_dditable_t *pDdiTable) {
494509
if (nullptr == pDdiTable)
495510
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
496-
if (driver_ddiTable.version < version)
497-
return ZE_RESULT_ERROR_UNKNOWN;
511+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
512+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
513+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
498514
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
499515

500516
ze_result_t result = ZE_RESULT_SUCCESS;
@@ -534,8 +550,9 @@ zeGetSamplerProcAddrTable(
534550
ze_sampler_dditable_t *pDdiTable) {
535551
if (nullptr == pDdiTable)
536552
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
537-
if (driver_ddiTable.version < version)
538-
return ZE_RESULT_ERROR_UNKNOWN;
553+
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
554+
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
555+
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
539556
driver_ddiTable.enableTracing = getenv_tobool("ZET_ENABLE_API_TRACING_EXP");
540557

541558
ze_result_t result = ZE_RESULT_SUCCESS;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#
2+
# Copyright (C) 2021 Intel Corporation
3+
#
4+
# SPDX-License-Identifier: MIT
5+
#
6+
7+
target_sources(${TARGET_NAME} PRIVATE
8+
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
9+
${CMAKE_CURRENT_SOURCE_DIR}/test_loader.cpp
10+
)

0 commit comments

Comments
 (0)