Skip to content

Commit c0123da

Browse files
committed
Disconnect zeInitDrivers and zeDriverGet
- Ensure zeInitDrivers and zeDriverGet can get different sets of drivers and their inits do not conflict. - Expanded unit tests to cver this case.
1 parent 3575f4a commit c0123da

File tree

3 files changed

+52
-22
lines changed

3 files changed

+52
-22
lines changed

scripts/templates/ldrddi.cpp.mako

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,11 @@ namespace loader
7070
continue;
7171
%else:
7272
if (!drv.dditable.${n}.${th.get_table_name(n, tags, obj)}.${th.make_pfn_name(n, tags, obj)}) {
73+
%if re.match(r"\w+InitDrivers$", th.make_func_name(n, tags, obj)):
74+
drv.initDriversStatus = ${X}_RESULT_ERROR_UNINITIALIZED;
75+
%else:
7376
drv.initStatus = ${X}_RESULT_ERROR_UNINITIALIZED;
77+
%endif
7478
continue;
7579
}
7680
%endif
@@ -88,7 +92,11 @@ namespace loader
8892
if( ${X}_RESULT_SUCCESS != result ) {
8993
// If Get Drivers fails with Uninitialized, then update the driver init status to prevent reporting this driver in the next get call.
9094
if (${X}_RESULT_ERROR_UNINITIALIZED == result) {
95+
%if re.match(r"\w+InitDrivers$", th.make_func_name(n, tags, obj)):
96+
drv.initDriversStatus = result;
97+
%else:
9198
drv.initStatus = result;
99+
%endif
92100
}
93101
continue;
94102
}

source/loader/ze_ldrddi.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ namespace loader
134134
for( auto& drv : loader::context->zeDrivers )
135135
{
136136
if (!drv.dditable.ze.Global.pfnInitDrivers) {
137-
drv.initStatus = ZE_RESULT_ERROR_UNINITIALIZED;
137+
drv.initDriversStatus = ZE_RESULT_ERROR_UNINITIALIZED;
138138
continue;
139139
}
140140

@@ -147,7 +147,7 @@ namespace loader
147147
if( ZE_RESULT_SUCCESS != result ) {
148148
// If Get Drivers fails with Uninitialized, then update the driver init status to prevent reporting this driver in the next get call.
149149
if (ZE_RESULT_ERROR_UNINITIALIZED == result) {
150-
drv.initStatus = result;
150+
drv.initDriversStatus = result;
151151
}
152152
continue;
153153
}

test/loader_api.cpp

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -119,97 +119,119 @@ TEST(
119119
LoaderInit,
120120
GivenLevelZeroLoaderPresentWhenCallingZeInitDriversThenzeInitThenBothCallsSucceedWithAllTypes) {
121121

122-
uint32_t pCount = 0;
122+
uint32_t pInitDriversCount = 0;
123+
uint32_t pDriverGetCount = 0;
123124
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
124125
desc.flags = UINT32_MAX;
125126
desc.pNext = nullptr;
126127
putenv_safe( const_cast<char *>( "ZEL_TEST_NULL_DRIVER_TYPE=ALL" ) );
127-
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc));
128-
EXPECT_GT(pCount, 0);
128+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pInitDriversCount, nullptr, &desc));
129+
EXPECT_GT(pInitDriversCount, 0);
129130
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInit(0));
131+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeDriverGet(&pDriverGetCount, nullptr));
132+
EXPECT_GT(pDriverGetCount, 0);
130133
}
131134

132135
TEST(
133136
LoaderInit,
134137
GivenLevelZeroLoaderPresentWhenCallingZeInitDriversThenzeInitThenBothCallsSucceedWithGPUTypes) {
135138

136-
uint32_t pCount = 0;
139+
uint32_t pInitDriversCount = 0;
140+
uint32_t pDriverGetCount = 0;
137141
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
138142
desc.flags = UINT32_MAX;
139143
desc.pNext = nullptr;
140144
putenv_safe( const_cast<char *>( "ZEL_TEST_NULL_DRIVER_TYPE=GPU" ) );
141-
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc));
142-
EXPECT_GT(pCount, 0);
145+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pInitDriversCount, nullptr, &desc));
146+
EXPECT_GT(pInitDriversCount, 0);
143147
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInit(ZE_INIT_FLAG_GPU_ONLY));
148+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeDriverGet(&pDriverGetCount, nullptr));
149+
EXPECT_GT(pDriverGetCount, 0);
144150
}
145151

146152
TEST(
147153
LoaderInit,
148154
GivenZeInitDriversUnsupportedOnTheDriverWhenCallingZeInitDriversThenUninitializedReturned) {
149155

150-
uint32_t pCount = 0;
156+
uint32_t pInitDriversCount = 0;
157+
uint32_t pDriverGetCount = 0;
151158
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
152159
desc.flags = UINT32_MAX;
153160
desc.pNext = nullptr;
154161
putenv_safe( const_cast<char *>( "ZEL_TEST_MISSING_API=zeInitDrivers" ) );
155-
EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInitDrivers(&pCount, nullptr, &desc));
162+
EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInitDrivers(&pInitDriversCount, nullptr, &desc));
163+
EXPECT_EQ(pInitDriversCount, 0);
156164
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInit(0));
165+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeDriverGet(&pDriverGetCount, nullptr));
166+
EXPECT_GT(pDriverGetCount, 0);
157167
}
158168

159169
TEST(
160170
LoaderInit,
161171
GivenLevelZeroLoaderPresentWhenCallingZeInitDriversThenzeInitThenBothCallsSucceedWithNPUTypes) {
162172

163-
uint32_t pCount = 0;
173+
uint32_t pInitDriversCount = 0;
174+
uint32_t pDriverGetCount = 0;
164175
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
165176
desc.flags = UINT32_MAX;
166177
desc.pNext = nullptr;
167178
putenv_safe( const_cast<char *>( "ZEL_TEST_NULL_DRIVER_TYPE=NPU" ) );
168-
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc));
169-
EXPECT_GT(pCount, 0);
179+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pInitDriversCount, nullptr, &desc));
180+
EXPECT_GT(pInitDriversCount, 0);
170181
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInit(ZE_INIT_FLAG_VPU_ONLY));
182+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeDriverGet(&pDriverGetCount, nullptr));
183+
EXPECT_GT(pDriverGetCount, 0);
171184
}
172185

173186
TEST(
174187
LoaderInit,
175188
GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithAllTypes) {
176189

177-
uint32_t pCount = 0;
190+
uint32_t pInitDriversCount = 0;
191+
uint32_t pDriverGetCount = 0;
178192
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
179193
desc.flags = UINT32_MAX;
180194
desc.pNext = nullptr;
181195
putenv_safe( const_cast<char *>( "ZEL_TEST_NULL_DRIVER_TYPE=ALL" ) );
182196
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInit(0));
183-
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc));
184-
EXPECT_GT(pCount, 0);
197+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pInitDriversCount, nullptr, &desc));
198+
EXPECT_GT(pInitDriversCount, 0);
199+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeDriverGet(&pDriverGetCount, nullptr));
200+
EXPECT_GT(pDriverGetCount, 0);
185201
}
186202

187203
TEST(
188204
LoaderInit,
189205
GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithGPUTypes) {
190206

191-
uint32_t pCount = 0;
207+
uint32_t pInitDriversCount = 0;
208+
uint32_t pDriverGetCount = 0;
192209
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
193210
desc.flags = UINT32_MAX;
194211
desc.pNext = nullptr;
195212
putenv_safe( const_cast<char *>( "ZEL_TEST_NULL_DRIVER_TYPE=GPU" ) );
196213
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInit(ZE_INIT_FLAG_GPU_ONLY));
197-
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc));
198-
EXPECT_GT(pCount, 0);
214+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pInitDriversCount, nullptr, &desc));
215+
EXPECT_GT(pInitDriversCount, 0);
216+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeDriverGet(&pDriverGetCount, nullptr));
217+
EXPECT_GT(pDriverGetCount, 0);
199218
}
200219

201220
TEST(
202221
LoaderInit,
203222
GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithNPUTypes) {
204223

205-
uint32_t pCount = 0;
224+
uint32_t pInitDriversCount = 0;
225+
uint32_t pDriverGetCount = 0;
206226
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
207227
desc.flags = UINT32_MAX;
208228
desc.pNext = nullptr;
209229
putenv_safe( const_cast<char *>( "ZEL_TEST_NULL_DRIVER_TYPE=NPU" ) );
210230
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInit(ZE_INIT_FLAG_VPU_ONLY));
211-
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc));
212-
EXPECT_GT(pCount, 0);
231+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pInitDriversCount, nullptr, &desc));
232+
EXPECT_GT(pInitDriversCount, 0);
233+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeDriverGet(&pDriverGetCount, nullptr));
234+
EXPECT_GT(pDriverGetCount, 0);
213235
}
214236

215237
} // namespace

0 commit comments

Comments
 (0)