Close adapter after veryfing adapter luid from HDC

Related-To: NEO-4952
Change-Id: Ieac35973895baec92ae7f093b1b693cd60994022
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2020-08-10 09:41:15 +02:00
parent a60b8c4831
commit 9bced7da37
4 changed files with 32 additions and 6 deletions

View File

@ -88,7 +88,12 @@ class WddmMock : public Wddm {
uint64_t *getPagingFenceAddress() override;
void waitOnPagingFenceFromCpu() override;
void createPagingFenceLogger() override;
bool verifyAdapterLuid(LUID adapterLuid) const override { return verifyAdapterLuidReturnValue; }
bool verifyAdapterLuid(LUID adapterLuid) const override {
if (callBaseVerifyAdapterLuid) {
return Wddm::verifyAdapterLuid(adapterLuid);
}
return verifyAdapterLuidReturnValue;
}
bool configureDeviceAddressSpace() {
configureDeviceAddressSpaceResult.called++;
@ -142,6 +147,7 @@ class WddmMock : public Wddm {
NTSTATUS createAllocationStatus = STATUS_SUCCESS;
bool verifyAdapterLuidReturnValue = true;
bool callBaseVerifyAdapterLuid = false;
bool mapGpuVaStatus = true;
bool callBaseDestroyAllocations = true;
bool failOpenSharedHandle = false;

View File

@ -1269,8 +1269,8 @@ HWTEST_F(Wddm20WithMockGdiDllTests, givenNonGen12LPPlatformWhenConfigureDeviceAd
EXPECT_EQ(NEO::windowsMinAddress, wddm->getWddmMinAddress());
}
struct GdiWithMockedCloseFunc : public Gdi {
GdiWithMockedCloseFunc() : Gdi() {
struct GdiWithMockedCloseFunc : public MockGdi {
GdiWithMockedCloseFunc() : MockGdi() {
closeAdapter = mockCloseAdapter;
GdiWithMockedCloseFunc::closeAdapterCalled = 0u;
GdiWithMockedCloseFunc::closeAdapterCalledArgPassed = 0u;
@ -1451,7 +1451,7 @@ TEST(DiscoverDevices, whenDriverInfoHasIncompatibleDriverStoreThenHwDeviceIdIsNo
}
TEST(VerifyHdcTest, givenHdcHandleFromCorrectAdapterLuidWhenVerifyHdcHandleIsCalledThenSuccessIsReturned) {
auto gdi = std::make_unique<MockGdi>();
auto gdi = std::make_unique<GdiWithMockedCloseFunc>();
auto osEnv = std::make_unique<OsEnvironmentWin>();
osEnv->gdi = std::move(gdi);
@ -1466,20 +1466,25 @@ TEST(VerifyHdcTest, givenHdcHandleFromCorrectAdapterLuidWhenVerifyHdcHandleIsCal
RootDeviceEnvironment rootDeviceEnvironment(executionEnvironment);
WddmMock wddm(std::move(hwDeviceId), rootDeviceEnvironment);
wddm.callBaseVerifyAdapterLuid = true;
size_t hdcHandle = 0x1;
auto status = wddm.Wddm::verifyHdcHandle(hdcHandle);
EXPECT_EQ(1u, GdiWithMockedCloseFunc::closeAdapterCalled);
EXPECT_EQ(MockGdi::adapterHandleForHdc, GdiWithMockedCloseFunc::closeAdapterCalledArgPassed);
EXPECT_TRUE(status);
status = wddm.Wddm::verifyHdcHandle(0u);
EXPECT_EQ(1u, GdiWithMockedCloseFunc::closeAdapterCalled);
EXPECT_FALSE(status);
}
TEST(VerifyHdcTest, givenHdcHandleFromInvalidAdapterLuidWhenVerifyHdcHandleIsCalledThenFailureIsReturned) {
auto gdi = std::make_unique<MockGdi>();
auto gdi = std::make_unique<GdiWithMockedCloseFunc>();
auto osEnv = std::make_unique<OsEnvironmentWin>();
osEnv->gdi = std::move(gdi);
@ -1494,6 +1499,7 @@ TEST(VerifyHdcTest, givenHdcHandleFromInvalidAdapterLuidWhenVerifyHdcHandleIsCal
RootDeviceEnvironment rootDeviceEnvironment(executionEnvironment);
WddmMock wddm(std::move(hwDeviceId), rootDeviceEnvironment);
wddm.callBaseVerifyAdapterLuid = true;
size_t hdcHandle = 0x1;
@ -1501,11 +1507,16 @@ TEST(VerifyHdcTest, givenHdcHandleFromInvalidAdapterLuidWhenVerifyHdcHandleIsCal
auto status = wddm.Wddm::verifyHdcHandle(hdcHandle);
EXPECT_EQ(1u, GdiWithMockedCloseFunc::closeAdapterCalled);
EXPECT_EQ(MockGdi::adapterHandleForHdc, GdiWithMockedCloseFunc::closeAdapterCalledArgPassed);
EXPECT_FALSE(status);
MockGdi::adapterLuidToReturn = {0x1234, 0x5679};
status = wddm.Wddm::verifyHdcHandle(hdcHandle);
EXPECT_EQ(2u, GdiWithMockedCloseFunc::closeAdapterCalled);
EXPECT_EQ(MockGdi::adapterHandleForHdc, GdiWithMockedCloseFunc::closeAdapterCalledArgPassed);
EXPECT_FALSE(status);
}