Skip to content

Commit af7cb3f

Browse files
Test closing GEM worker is blocking during cleanup
Added test checking if closing GEM worker during DRM memory manager clean up is blocking. Related-To: NEO-6213 Signed-off-by: Krystian Chmielewski <[email protected]>
1 parent dc534c8 commit af7cb3f

File tree

3 files changed

+29
-4
lines changed

3 files changed

+29
-4
lines changed

opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3188,6 +3188,15 @@ TEST_F(DrmMemoryManagerBasic, givenDisabledAsyncDeleterFlagWhenMemoryManagerIsCr
31883188
memoryManager.commonCleanup();
31893189
}
31903190

3191+
TEST_F(DrmMemoryManagerBasic, givenWorkerToCloseWhenCommonCleanupIsCalledThenClosingIsBlocking) {
3192+
MockDrmMemoryManager memoryManager(gemCloseWorkerMode::gemCloseWorkerInactive, false, true, executionEnvironment);
3193+
memoryManager.gemCloseWorker.reset(new MockDrmGemCloseWorker(memoryManager));
3194+
auto pWorker = static_cast<MockDrmGemCloseWorker *>(memoryManager.gemCloseWorker.get());
3195+
3196+
memoryManager.commonCleanup();
3197+
EXPECT_TRUE(pWorker->wasBlocking);
3198+
}
3199+
31913200
TEST_F(DrmMemoryManagerBasic, givenDefaultDrmMemoryManagerWhenItIsQueriedForInternalHeapBaseThenInternalHeapBaseIsReturned) {
31923201
std::unique_ptr<TestedDrmMemoryManager> memoryManager(new (std::nothrow) TestedDrmMemoryManager(false,
31933202
true,

shared/source/os_interface/linux/drm_gem_close_worker.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2018-2021 Intel Corporation
2+
* Copyright (C) 2018-2022 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -27,13 +27,13 @@ enum class gemCloseWorkerMode {
2727
class DrmGemCloseWorker {
2828
public:
2929
DrmGemCloseWorker(DrmMemoryManager &memoryManager);
30-
~DrmGemCloseWorker();
30+
MOCKABLE_VIRTUAL ~DrmGemCloseWorker();
3131

3232
DrmGemCloseWorker(const DrmGemCloseWorker &) = delete;
3333
DrmGemCloseWorker &operator=(const DrmGemCloseWorker &) = delete;
3434

3535
void push(BufferObject *allocation);
36-
void close(bool blocking);
36+
MOCKABLE_VIRTUAL void close(bool blocking);
3737

3838
bool isEmpty();
3939

shared/test/common/mocks/linux/mock_drm_memory_manager.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2018-2021 Intel Corporation
2+
* Copyright (C) 2018-2022 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -124,4 +124,20 @@ class TestedDrmMemoryManager : public MemoryManagerCreate<DrmMemoryManager> {
124124
bool alignedMallocShouldFail = false;
125125
size_t alignedMallocSizeRequired = 0u;
126126
};
127+
128+
struct MockDrmGemCloseWorker : DrmGemCloseWorker {
129+
using DrmGemCloseWorker::DrmGemCloseWorker;
130+
131+
void close(bool blocking) override {
132+
wasBlocking = blocking;
133+
DrmGemCloseWorker::close(blocking);
134+
}
135+
bool wasBlocking = false;
136+
};
137+
138+
struct MockDrmMemoryManager : DrmMemoryManager {
139+
using DrmMemoryManager::DrmMemoryManager;
140+
using DrmMemoryManager::gemCloseWorker;
141+
};
142+
127143
} // namespace NEO

0 commit comments

Comments
 (0)