mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
L0Debug - move apiEvents queue to DebugSessionImp
- the logic of reading api events is OS agnostic Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
9203f8787b
commit
023f9df999
@ -715,6 +715,32 @@ void DebugSessionImp::generateEventsForStoppedThreads(const std::vector<EuThread
|
||||
}
|
||||
}
|
||||
|
||||
ze_result_t DebugSessionImp::readEvent(uint64_t timeout, zet_debug_event_t *outputEvent) {
|
||||
|
||||
if (outputEvent) {
|
||||
outputEvent->type = ZET_DEBUG_EVENT_TYPE_INVALID;
|
||||
outputEvent->flags = 0;
|
||||
} else {
|
||||
return ZE_RESULT_ERROR_INVALID_NULL_POINTER;
|
||||
}
|
||||
|
||||
do {
|
||||
std::unique_lock<std::mutex> lock(asyncThreadMutex);
|
||||
|
||||
if (timeout > 0 && apiEvents.size() == 0) {
|
||||
apiEventCondition.wait_for(lock, std::chrono::milliseconds(timeout));
|
||||
}
|
||||
|
||||
if (apiEvents.size() > 0) {
|
||||
*outputEvent = apiEvents.front();
|
||||
apiEvents.pop();
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
} while (timeout == UINT64_MAX && asyncThread.threadActive);
|
||||
|
||||
return ZE_RESULT_NOT_READY;
|
||||
}
|
||||
|
||||
void DebugSessionImp::validateAndSetStateSaveAreaHeader(const std::vector<char> &data) {
|
||||
auto pStateSaveArea = reinterpret_cast<const SIP::StateSaveAreaHeader *>(data.data());
|
||||
if (0 == strcmp(pStateSaveArea->versionHeader.magic, "tssarea")) {
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "level_zero/tools/source/debug/debug_session.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <condition_variable>
|
||||
#include <mutex>
|
||||
#include <queue>
|
||||
|
||||
@ -37,11 +38,14 @@ struct DebugSessionImp : DebugSession {
|
||||
|
||||
ze_result_t readRegisters(ze_device_thread_t thread, uint32_t type, uint32_t start, uint32_t count, void *pRegisterValues) override;
|
||||
ze_result_t writeRegisters(ze_device_thread_t thread, uint32_t type, uint32_t start, uint32_t count, void *pRegisterValues) override;
|
||||
ze_result_t readEvent(uint64_t timeout, zet_debug_event_t *event) override;
|
||||
|
||||
static const SIP::regset_desc *getSbaRegsetDesc();
|
||||
static uint32_t typeToRegsetFlags(uint32_t type);
|
||||
constexpr static int64_t interruptTimeout = 2000;
|
||||
|
||||
using ApiEventQueue = std::queue<zet_debug_event_t>;
|
||||
|
||||
protected:
|
||||
MOCKABLE_VIRTUAL ze_result_t readRegistersImp(EuThread::ThreadId thread, uint32_t type, uint32_t start, uint32_t count, void *pRegisterValues);
|
||||
MOCKABLE_VIRTUAL ze_result_t writeRegistersImp(EuThread::ThreadId thread, uint32_t type, uint32_t start, uint32_t count, void *pRegisterValues);
|
||||
@ -120,6 +124,12 @@ struct DebugSessionImp : DebugSession {
|
||||
std::vector<std::pair<ze_device_thread_t, bool>> pendingInterrupts;
|
||||
std::vector<EuThread::ThreadId> newlyStoppedThreads;
|
||||
std::vector<char> stateSaveAreaHeader;
|
||||
|
||||
ThreadHelper asyncThread;
|
||||
std::mutex asyncThreadMutex;
|
||||
|
||||
ApiEventQueue apiEvents;
|
||||
std::condition_variable apiEventCondition;
|
||||
};
|
||||
|
||||
} // namespace L0
|
||||
|
@ -652,36 +652,6 @@ void DebugSessionLinux::readStateSaveAreaHeader() {
|
||||
}
|
||||
}
|
||||
|
||||
ze_result_t DebugSessionLinux::readEvent(uint64_t timeout, zet_debug_event_t *outputEvent) {
|
||||
|
||||
if (outputEvent) {
|
||||
outputEvent->type = ZET_DEBUG_EVENT_TYPE_INVALID;
|
||||
outputEvent->flags = 0;
|
||||
} else {
|
||||
return ZE_RESULT_ERROR_INVALID_NULL_POINTER;
|
||||
}
|
||||
|
||||
if (clientHandle == invalidClientHandle) {
|
||||
return ZE_RESULT_ERROR_UNINITIALIZED;
|
||||
}
|
||||
|
||||
do {
|
||||
std::unique_lock<std::mutex> lock(asyncThreadMutex);
|
||||
|
||||
if (timeout > 0 && clientHandleToConnection[clientHandle]->apiEvents.size() == 0) {
|
||||
apiEventCondition.wait_for(lock, std::chrono::milliseconds(timeout));
|
||||
}
|
||||
|
||||
if (clientHandleToConnection[clientHandle]->apiEvents.size() > 0) {
|
||||
*outputEvent = clientHandleToConnection[clientHandle]->apiEvents.front();
|
||||
clientHandleToConnection[clientHandle]->apiEvents.pop();
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
} while (timeout == UINT64_MAX && asyncThread.threadActive);
|
||||
|
||||
return ZE_RESULT_NOT_READY;
|
||||
}
|
||||
|
||||
ze_result_t DebugSessionLinux::readEventImp(prelim_drm_i915_debug_event *drmDebugEvent) {
|
||||
auto res = ioctl(PRELIM_I915_DEBUG_IOCTL_READ_EVENT, drmDebugEvent);
|
||||
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include "third_party/uapi/prelim/drm/i915_drm.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <condition_variable>
|
||||
#include <mutex>
|
||||
#include <queue>
|
||||
#include <unordered_set>
|
||||
@ -36,7 +35,6 @@ struct DebugSessionLinux : DebugSessionImp {
|
||||
ze_result_t initialize() override;
|
||||
|
||||
bool closeConnection() override;
|
||||
ze_result_t readEvent(uint64_t timeout, zet_debug_event_t *event) override;
|
||||
ze_result_t readMemory(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc, size_t size, void *buffer) override;
|
||||
ze_result_t writeMemory(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc, size_t size, const void *buffer) override;
|
||||
ze_result_t acknowledgeEvent(const zet_debug_event_t *event) override;
|
||||
@ -79,7 +77,6 @@ struct DebugSessionLinux : DebugSessionImp {
|
||||
static constexpr size_t maxEventSize = 4096;
|
||||
|
||||
using ContextHandle = uint64_t;
|
||||
using ApiEventQueue = std::queue<zet_debug_event_t>;
|
||||
|
||||
struct ContextParams {
|
||||
ContextHandle handle = 0;
|
||||
@ -149,7 +146,6 @@ struct DebugSessionLinux : DebugSessionImp {
|
||||
uint64_t contextStateSaveAreaGpuVa = 0;
|
||||
uint64_t stateBaseAreaGpuVa = 0;
|
||||
|
||||
ApiEventQueue apiEvents;
|
||||
std::vector<std::pair<zet_debug_event_t, prelim_drm_i915_debug_event_ack>> eventsToAck;
|
||||
|
||||
std::unordered_map<uint64_t, Module> uuidToModule;
|
||||
@ -191,7 +187,7 @@ struct DebugSessionLinux : DebugSessionImp {
|
||||
std::pair<zet_debug_event_t, prelim_drm_i915_debug_event_ack>(debugEvent, eventToAck));
|
||||
}
|
||||
|
||||
clientHandleToConnection[clientHandle]->apiEvents.push(debugEvent);
|
||||
apiEvents.push(debugEvent);
|
||||
|
||||
apiEventCondition.notify_all();
|
||||
}
|
||||
@ -241,10 +237,6 @@ struct DebugSessionLinux : DebugSessionImp {
|
||||
uint64_t getSbaBufferGpuVa(uint64_t memoryHandle);
|
||||
void printContextVms();
|
||||
|
||||
ThreadHelper asyncThread;
|
||||
std::mutex asyncThreadMutex;
|
||||
std::condition_variable apiEventCondition;
|
||||
|
||||
ThreadHelper internalEventThread;
|
||||
std::mutex internalEventThreadMutex;
|
||||
std::condition_variable internalEventCondition;
|
||||
|
@ -64,8 +64,6 @@ struct DebugSessionWindows : DebugSessionImp {
|
||||
void closeAsyncThread();
|
||||
static void *asyncThreadFunction(void *arg);
|
||||
|
||||
ThreadHelper asyncThread;
|
||||
std::mutex asyncThreadMutex;
|
||||
MOCKABLE_VIRTUAL void getSbaBufferGpuVa(uint64_t &gpuVa);
|
||||
MOCKABLE_VIRTUAL NTSTATUS runEscape(KM_ESCAPE_INFO &escapeInfo);
|
||||
|
||||
|
@ -258,6 +258,7 @@ struct MockIoctlHandler : public L0::DebugSessionLinux::IoctlHandler {
|
||||
|
||||
struct MockDebugSessionLinux : public L0::DebugSessionLinux {
|
||||
using L0::DebugSessionImp::allThreads;
|
||||
using L0::DebugSessionImp::apiEvents;
|
||||
using L0::DebugSessionImp::enqueueApiEvent;
|
||||
using L0::DebugSessionImp::expectedAttentionEvents;
|
||||
using L0::DebugSessionImp::interruptSent;
|
||||
@ -799,7 +800,7 @@ TEST(DebugSessionTest, WhenEnqueueApiEventCalledThenEventPushed) {
|
||||
|
||||
sessionMock->enqueueApiEvent(debugEvent);
|
||||
|
||||
EXPECT_EQ(1u, sessionMock->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(1u, sessionMock->apiEvents.size());
|
||||
}
|
||||
|
||||
TEST(DebugSessionTest, GivenLogsEnabledWhenPrintContextVmsCalledThenMapIsPrinted) {
|
||||
@ -1130,14 +1131,14 @@ TEST_F(DebugApiLinuxTest, GivenUuidCommandQueueCreatedHandledThenProcessEntryEve
|
||||
session->handleEvent(&uuid.base);
|
||||
EXPECT_EQ(DebugSessionLinux::invalidClientHandle, session->clientHandle);
|
||||
EXPECT_EQ(0, handler->ioctlCalled);
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
|
||||
uuid.base.flags = PRELIM_DRM_I915_DEBUG_EVENT_CREATE;
|
||||
handler->returnUuid = &readUuid;
|
||||
session->clientHandle = 2;
|
||||
session->handleEvent(&uuid.base);
|
||||
EXPECT_EQ(1, handler->ioctlCalled);
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
|
||||
uuidHash = NEO::uuidL0CommandQueueHash;
|
||||
memcpy(readUuid.uuid, uuidHash, strlen(uuidHash));
|
||||
@ -1145,26 +1146,26 @@ TEST_F(DebugApiLinuxTest, GivenUuidCommandQueueCreatedHandledThenProcessEntryEve
|
||||
session->handleEvent(&uuid.base);
|
||||
EXPECT_EQ(2u, session->clientHandle);
|
||||
EXPECT_EQ(2, handler->ioctlCalled);
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
|
||||
session->clientHandle = DebugSessionLinux::invalidClientHandle;
|
||||
uuid.client_handle = MockDebugSessionLinux::mockClientHandle;
|
||||
handler->returnUuid = &readUuid;
|
||||
session->handleEvent(&uuid.base);
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->apiEvents.size());
|
||||
EXPECT_EQ(MockDebugSessionLinux::mockClientHandle, session->clientHandle);
|
||||
EXPECT_EQ(3, handler->ioctlCalled);
|
||||
auto event = session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.front();
|
||||
auto event = session->apiEvents.front();
|
||||
EXPECT_EQ(ZET_DEBUG_EVENT_TYPE_PROCESS_ENTRY, event.type);
|
||||
|
||||
session->clientHandle = MockDebugSessionLinux::mockClientHandle;
|
||||
uuid.client_handle = MockDebugSessionLinux::mockClientHandle;
|
||||
handler->returnUuid = &readUuid;
|
||||
session->handleEvent(&uuid.base);
|
||||
EXPECT_EQ(2u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(2u, session->apiEvents.size());
|
||||
EXPECT_EQ(MockDebugSessionLinux::mockClientHandle, session->clientHandle);
|
||||
EXPECT_EQ(4, handler->ioctlCalled);
|
||||
event = session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.front();
|
||||
event = session->apiEvents.front();
|
||||
EXPECT_EQ(ZET_DEBUG_EVENT_TYPE_PROCESS_ENTRY, event.type);
|
||||
}
|
||||
|
||||
@ -1189,20 +1190,20 @@ TEST_F(DebugApiLinuxTest, GivenCommandQueueDestroyedWhenHandlingEventThenExitEve
|
||||
session->clientHandleToConnection[10u].reset(new L0::DebugSessionLinux::ClientConnection);
|
||||
|
||||
session->handleEvent(&uuid.base);
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[10]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
|
||||
uuid.base.flags = PRELIM_DRM_I915_DEBUG_EVENT_DESTROY;
|
||||
session->handleEvent(&uuid.base);
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[10]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
|
||||
uuid.handle = session->uuidL0CommandQueueHandle;
|
||||
session->handleEvent(&uuid.base);
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[10]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
|
||||
session->clientHandle = uuid.client_handle;
|
||||
session->handleEvent(&uuid.base);
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[10]->apiEvents.size());
|
||||
auto event = session->clientHandleToConnection[10]->apiEvents.front();
|
||||
EXPECT_EQ(1u, session->apiEvents.size());
|
||||
auto event = session->apiEvents.front();
|
||||
EXPECT_EQ(ZET_DEBUG_EVENT_TYPE_PROCESS_EXIT, event.type);
|
||||
}
|
||||
|
||||
@ -1226,7 +1227,7 @@ TEST_F(DebugApiLinuxTest, GivenDestroyClientForClientNotSavedWhenHandlingEventTh
|
||||
session->clientHandleToConnection[10u].reset(new L0::DebugSessionLinux::ClientConnection);
|
||||
|
||||
session->handleEvent(&clientDestroy.base);
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[10]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
}
|
||||
|
||||
TEST_F(DebugApiLinuxTest, GivenDebugSessionWhenReadingEventThenResultNotReadyIsReturned) {
|
||||
@ -1245,23 +1246,6 @@ TEST_F(DebugApiLinuxTest, GivenDebugSessionWhenReadingEventThenResultNotReadyIsR
|
||||
EXPECT_EQ(result, ZE_RESULT_NOT_READY);
|
||||
}
|
||||
|
||||
TEST_F(DebugApiLinuxTest, GivenDebugSessionWithoutValidClientHandleWhenReadingEventThenErrorNotInitializedIsReturned) {
|
||||
zet_debug_config_t config = {};
|
||||
config.pid = 0x1234;
|
||||
|
||||
Mock<L0::DeviceImp> deviceImp(neoDevice, neoDevice->getExecutionEnvironment());
|
||||
auto sessionMock = new MockDebugSessionLinux(config, &deviceImp, 10);
|
||||
deviceImp.debugSession.reset(sessionMock);
|
||||
|
||||
sessionMock->clientHandle = MockDebugSessionLinux::invalidClientHandle;
|
||||
|
||||
zet_debug_session_handle_t session = deviceImp.debugSession->toHandle();
|
||||
|
||||
zet_debug_event_t event = {};
|
||||
auto result = L0::DebugApiHandlers::debugReadEvent(session, 0, &event);
|
||||
EXPECT_EQ(result, ZE_RESULT_ERROR_UNINITIALIZED);
|
||||
}
|
||||
|
||||
TEST_F(DebugApiLinuxTest, GivenDebuggerLogsWhenOpenDebuggerFailsThenCorrectMessageIsPrintedAndResultSet) {
|
||||
DebugManagerStateRestore restorer;
|
||||
NEO::DebugManager.flags.DebuggerLogBitmask.set(255);
|
||||
@ -3783,11 +3767,11 @@ TEST_F(DebugApiLinuxVmBindTest, GivenEventWithAckFlagWhenHandlingEventForISAThen
|
||||
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->eventsToAck.size());
|
||||
|
||||
auto event = session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.front();
|
||||
session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.pop();
|
||||
auto event = session->apiEvents.front();
|
||||
session->apiEvents.pop();
|
||||
|
||||
EXPECT_EQ(ZET_DEBUG_EVENT_FLAG_NEED_ACK, event.flags);
|
||||
EXPECT_EQ(ZET_DEBUG_EVENT_TYPE_MODULE_LOAD, event.type);
|
||||
@ -3834,8 +3818,8 @@ TEST_F(DebugApiLinuxVmBindTest, GivenEventForISAWhenModuleLoadEventAlreadyAckedT
|
||||
ASSERT_NE(session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->isaMap.end(), isaIter);
|
||||
EXPECT_EQ(1u, isaIter->second->ackEvents.size());
|
||||
|
||||
auto event = session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.front();
|
||||
session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.pop();
|
||||
auto event = session->apiEvents.front();
|
||||
session->apiEvents.pop();
|
||||
|
||||
session->acknowledgeEvent(&event);
|
||||
EXPECT_EQ(0u, isaIter->second->ackEvents.size());
|
||||
@ -3880,8 +3864,8 @@ TEST_F(DebugApiLinuxVmBindTest, GivenEventForIsaWithoutAckTriggeredBeforeAttachW
|
||||
// Auto-acked event
|
||||
EXPECT_TRUE(isaIter->second->moduleLoadEventAck);
|
||||
|
||||
auto event = session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.front();
|
||||
session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.pop();
|
||||
auto event = session->apiEvents.front();
|
||||
session->apiEvents.pop();
|
||||
EXPECT_EQ(0u, event.flags & ZET_DEBUG_EVENT_FLAG_NEED_ACK);
|
||||
|
||||
// VM BIND after attach needs ACK
|
||||
@ -4286,7 +4270,7 @@ TEST_F(DebugApiLinuxVmBindTest, GivenIsaBoundMultipleTimesWhenHandlingVmBindDest
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(1u, isaMap.size());
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
}
|
||||
|
||||
TEST_F(DebugApiLinuxVmBindTest, GivenVmBindEventForIsaWithInvalidElfWhenReadingEventThenModuleLoadEventReturnZeroElf) {
|
||||
@ -4365,7 +4349,7 @@ TEST_F(DebugApiLinuxVmBindTest, GivenEventWithL0ZebinModuleWhenHandlingEventThen
|
||||
memcpy(uuids, uuidsTemp, sizeof(uuidsTemp));
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule[zebinModuleUUID].loadAddresses.size());
|
||||
|
||||
@ -4381,7 +4365,7 @@ TEST_F(DebugApiLinuxVmBindTest, GivenEventWithL0ZebinModuleWhenHandlingEventThen
|
||||
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule.size());
|
||||
EXPECT_EQ(2u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule[zebinModuleUUID].loadAddresses.size());
|
||||
EXPECT_EQ(2u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule[zebinModuleUUID].segmentCount);
|
||||
@ -4414,14 +4398,14 @@ TEST_F(DebugApiLinuxVmBindTest, GivenEventWithL0ZebinModuleWhenHandlingEventThen
|
||||
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
|
||||
vmBindIsa->base.flags = PRELIM_DRM_I915_DEBUG_EVENT_DESTROY;
|
||||
vmBindIsa->va_start = isaGpuVa;
|
||||
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->apiEvents.size());
|
||||
|
||||
memset(&event, 0, sizeof(zet_debug_event_t));
|
||||
|
||||
@ -4480,7 +4464,7 @@ TEST_F(DebugApiLinuxVmBindTest, GivenAttachAfterModuleCreateWhenHandlingEventWit
|
||||
memcpy(uuids, uuidsTemp, sizeof(uuidsTemp));
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule[zebinModuleUUID].loadAddresses.size());
|
||||
|
||||
@ -4495,7 +4479,7 @@ TEST_F(DebugApiLinuxVmBindTest, GivenAttachAfterModuleCreateWhenHandlingEventWit
|
||||
handler->ioctlCalled = 0;
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule.size());
|
||||
EXPECT_EQ(2u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule[zebinModuleUUID].loadAddresses.size());
|
||||
EXPECT_EQ(2u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule[zebinModuleUUID].segmentCount);
|
||||
@ -4529,14 +4513,14 @@ TEST_F(DebugApiLinuxVmBindTest, GivenAttachAfterModuleCreateWhenHandlingEventWit
|
||||
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
|
||||
vmBindIsa->base.flags = PRELIM_DRM_I915_DEBUG_EVENT_DESTROY;
|
||||
vmBindIsa->va_start = isaGpuVa;
|
||||
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->apiEvents.size());
|
||||
|
||||
memset(&event, 0, sizeof(zet_debug_event_t));
|
||||
|
||||
@ -4605,7 +4589,7 @@ TEST_F(DebugApiLinuxVmBindTest, GivenMultipleSegmentsInL0ZebinModuleWhenLoadAddr
|
||||
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
}
|
||||
|
||||
TEST_F(DebugApiLinuxVmBindTest, GivenMultipleBindEventsWithZebinModuleWhenHandlingEventsThenModuleLoadIsReportedOnceOnly) {
|
||||
@ -4647,7 +4631,7 @@ TEST_F(DebugApiLinuxVmBindTest, GivenMultipleBindEventsWithZebinModuleWhenHandli
|
||||
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule[zebinModuleUUID].loadAddresses.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule[zebinModuleUUID].segmentCount);
|
||||
@ -4655,7 +4639,7 @@ TEST_F(DebugApiLinuxVmBindTest, GivenMultipleBindEventsWithZebinModuleWhenHandli
|
||||
vmBindIsa->vm_handle = vmHandleForVmBind + 1000;
|
||||
session->handleEvent(&vmBindIsa->base);
|
||||
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->apiEvents.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule[zebinModuleUUID].loadAddresses.size());
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->uuidToModule[zebinModuleUUID].segmentCount);
|
||||
@ -4783,7 +4767,7 @@ TEST_F(DebugApiLinuxTest, GivenEventsAvailableWhenReadingEventThenEventsAreRetur
|
||||
|
||||
zet_debug_event_t debugEvent = {};
|
||||
debugEvent.type = ZET_DEBUG_EVENT_TYPE_PROCESS_ENTRY;
|
||||
session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.push(debugEvent);
|
||||
session->apiEvents.push(debugEvent);
|
||||
|
||||
zet_debug_event_t debugEvent2 = {};
|
||||
debugEvent2.type = ZET_DEBUG_EVENT_TYPE_MODULE_LOAD;
|
||||
@ -4791,11 +4775,11 @@ TEST_F(DebugApiLinuxTest, GivenEventsAvailableWhenReadingEventThenEventsAreRetur
|
||||
debugEvent2.info.module.moduleBegin = 1000;
|
||||
debugEvent2.info.module.moduleEnd = 2000;
|
||||
debugEvent2.info.module.load = 0x1234000;
|
||||
session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.push(debugEvent2);
|
||||
session->apiEvents.push(debugEvent2);
|
||||
|
||||
zet_debug_event_t debugEvent3 = {};
|
||||
debugEvent3.type = ZET_DEBUG_EVENT_TYPE_PROCESS_EXIT;
|
||||
session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.push(debugEvent3);
|
||||
session->apiEvents.push(debugEvent3);
|
||||
|
||||
zet_debug_event_t outputEvent = {};
|
||||
|
||||
@ -5756,13 +5740,13 @@ TEST_F(DebugApiLinuxAsyncThreadTest, GivenPollReturnsErrorAndEinvalWhenReadingIn
|
||||
errno = EINVAL;
|
||||
session->readInternalEventsAsync();
|
||||
|
||||
EXPECT_EQ(1u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(ZET_DEBUG_EVENT_TYPE_DETACHED, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.front().type);
|
||||
session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.pop();
|
||||
EXPECT_EQ(1u, session->apiEvents.size());
|
||||
EXPECT_EQ(ZET_DEBUG_EVENT_TYPE_DETACHED, session->apiEvents.front().type);
|
||||
session->apiEvents.pop();
|
||||
errno = 0;
|
||||
|
||||
session->readInternalEventsAsync();
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
}
|
||||
|
||||
TEST_F(DebugApiLinuxAsyncThreadTest, GivenPollReturnsErrorAndEBusyWhenReadingInternalEventsAsyncThenDetachEventIsNotGenerated) {
|
||||
@ -5780,7 +5764,7 @@ TEST_F(DebugApiLinuxAsyncThreadTest, GivenPollReturnsErrorAndEBusyWhenReadingInt
|
||||
errno = EBUSY;
|
||||
session->readInternalEventsAsync();
|
||||
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
errno = 0;
|
||||
}
|
||||
|
||||
@ -5800,7 +5784,7 @@ TEST_F(DebugApiLinuxAsyncThreadTest, GivenPollReturnsZeroWhenReadingInternalEven
|
||||
EXPECT_EQ(0, handler->ioctlCalled);
|
||||
EXPECT_EQ(0u, handler->debugEventInput.type);
|
||||
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
}
|
||||
|
||||
TEST_F(DebugApiLinuxAsyncThreadTest, GivenPollReturnsNonZeroWhenReadingInternalEventsAsyncThenEventReadIsCalled) {
|
||||
@ -5991,8 +5975,8 @@ TEST_F(DebugApiLinuxAsyncThreadTest, GivenInterruptedThreadsWhenNoAttentionEvent
|
||||
|
||||
session->closeAsyncThread();
|
||||
|
||||
if (session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size() > 0) {
|
||||
auto event = session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.front();
|
||||
if (session->apiEvents.size() > 0) {
|
||||
auto event = session->apiEvents.front();
|
||||
EXPECT_EQ(ZET_DEBUG_EVENT_TYPE_THREAD_UNAVAILABLE, event.type);
|
||||
EXPECT_EQ(0u, event.info.thread.thread.slice);
|
||||
EXPECT_EQ(0u, event.info.thread.thread.subslice);
|
||||
@ -6025,7 +6009,7 @@ TEST_F(DebugApiLinuxAsyncThreadTest, GivenInterruptedThreadsWhenNoAttentionEvent
|
||||
|
||||
session->closeAsyncThread();
|
||||
|
||||
EXPECT_EQ(0u, session->clientHandleToConnection[MockDebugSessionLinux::mockClientHandle]->apiEvents.size());
|
||||
EXPECT_EQ(0u, session->apiEvents.size());
|
||||
}
|
||||
|
||||
struct DebugApiRegistersAccessFixture : public DebugApiLinuxFixture {
|
||||
|
Reference in New Issue
Block a user