@@ -3992,8 +3992,7 @@ TEST_F(DebugApiLinuxVmBindTest, GivenVmBindEventWithAckNeededForIsaWhenHandlingE
39923992 EXPECT_EQ (isaSize, isaAllocation->bindInfo .size );
39933993 EXPECT_EQ (elfUUID, isaAllocation->elfUuidHandle );
39943994 EXPECT_EQ (3u , isaAllocation->vmHandle );
3995- EXPECT_EQ (1u , isaAllocation->cookies .size ());
3996- EXPECT_EQ (cookieUUID, *isaAllocation->cookies .begin ());
3995+ EXPECT_TRUE (isaAllocation->tileInstanced );
39973996
39983997 ASSERT_EQ (1u , session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->eventsToAck .size ());
39993998 auto eventToAck = session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->eventsToAck [0 ].second ;
@@ -4002,6 +4001,82 @@ TEST_F(DebugApiLinuxVmBindTest, GivenVmBindEventWithAckNeededForIsaWhenHandlingE
40024001 EXPECT_EQ (0u , handler->debugEventAcked .seqno );
40034002}
40044003
4004+ TEST_F (DebugApiLinuxVmBindTest, GivenCookieWhenHandlingVmBindForIsaThenIsaAllocationIsTileInstanced) {
4005+ uint64_t isaGpuVa = 0x345000 ;
4006+ uint64_t isaSize = 0x2000 ;
4007+ uint64_t vmBindIsaData[sizeof (prelim_drm_i915_debug_event_vm_bind) / sizeof (uint64_t ) + 3 * sizeof (typeOfUUID)];
4008+ prelim_drm_i915_debug_event_vm_bind *vmBindIsa = reinterpret_cast <prelim_drm_i915_debug_event_vm_bind *>(&vmBindIsaData);
4009+
4010+ vmBindIsa->base .type = PRELIM_DRM_I915_DEBUG_EVENT_VM_BIND;
4011+ vmBindIsa->base .flags = PRELIM_DRM_I915_DEBUG_EVENT_CREATE | PRELIM_DRM_I915_DEBUG_EVENT_NEED_ACK;
4012+ vmBindIsa->base .size = sizeof (prelim_drm_i915_debug_event_vm_bind) + 3 * sizeof (typeOfUUID);
4013+ vmBindIsa->base .seqno = 3 ;
4014+ vmBindIsa->client_handle = MockDebugSessionLinux::mockClientHandle;
4015+ vmBindIsa->va_start = isaGpuVa;
4016+ vmBindIsa->va_length = isaSize;
4017+ vmBindIsa->vm_handle = vmHandleForVmBind;
4018+ vmBindIsa->num_uuids = 3 ;
4019+
4020+ auto *uuids = reinterpret_cast <typeOfUUID *>(ptrOffset (vmBindIsaData, sizeof (prelim_drm_i915_debug_event_vm_bind)));
4021+ typeOfUUID uuidsTemp[3 ];
4022+ uuidsTemp[0 ] = static_cast <typeOfUUID>(isaUUID);
4023+ uuidsTemp[1 ] = static_cast <typeOfUUID>(cookieUUID);
4024+ uuidsTemp[2 ] = static_cast <typeOfUUID>(elfUUID);
4025+ memcpy (uuids, uuidsTemp, sizeof (uuidsTemp));
4026+
4027+ session->handleEvent (&vmBindIsa->base );
4028+
4029+ auto &isaMap = session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->isaMap ;
4030+
4031+ EXPECT_EQ (1u , isaMap.size ());
4032+ EXPECT_NE (isaMap.end (), isaMap.find (isaGpuVa));
4033+
4034+ auto isaAllocation = isaMap[isaGpuVa].get ();
4035+ EXPECT_EQ (isaGpuVa, isaAllocation->bindInfo .gpuVa );
4036+ EXPECT_EQ (isaSize, isaAllocation->bindInfo .size );
4037+ EXPECT_EQ (elfUUID, isaAllocation->elfUuidHandle );
4038+ EXPECT_EQ (3u , isaAllocation->vmHandle );
4039+ EXPECT_TRUE (isaAllocation->tileInstanced );
4040+ }
4041+
4042+ TEST_F (DebugApiLinuxVmBindTest, GivenNoCookieWhenHandlingVmBindForIsaThenIsaAllocationIsNotTileInstanced) {
4043+ uint64_t isaGpuVa = 0x345000 ;
4044+ uint64_t isaSize = 0x2000 ;
4045+ uint64_t vmBindIsaData[sizeof (prelim_drm_i915_debug_event_vm_bind) / sizeof (uint64_t ) + 3 * sizeof (typeOfUUID)];
4046+ prelim_drm_i915_debug_event_vm_bind *vmBindIsa = reinterpret_cast <prelim_drm_i915_debug_event_vm_bind *>(&vmBindIsaData);
4047+
4048+ vmBindIsa->base .type = PRELIM_DRM_I915_DEBUG_EVENT_VM_BIND;
4049+ vmBindIsa->base .flags = PRELIM_DRM_I915_DEBUG_EVENT_CREATE | PRELIM_DRM_I915_DEBUG_EVENT_NEED_ACK;
4050+ vmBindIsa->base .size = sizeof (prelim_drm_i915_debug_event_vm_bind) + 3 * sizeof (typeOfUUID);
4051+ vmBindIsa->base .seqno = 3 ;
4052+ vmBindIsa->client_handle = MockDebugSessionLinux::mockClientHandle;
4053+ vmBindIsa->va_start = isaGpuVa;
4054+ vmBindIsa->va_length = isaSize;
4055+ vmBindIsa->vm_handle = vmHandleForVmBind;
4056+ vmBindIsa->num_uuids = 2 ;
4057+
4058+ auto *uuids = reinterpret_cast <typeOfUUID *>(ptrOffset (vmBindIsaData, sizeof (prelim_drm_i915_debug_event_vm_bind)));
4059+
4060+ typeOfUUID uuidsTemp[2 ];
4061+ uuidsTemp[0 ] = static_cast <typeOfUUID>(isaUUID);
4062+ uuidsTemp[1 ] = static_cast <typeOfUUID>(elfUUID);
4063+ memcpy (uuids, uuidsTemp, sizeof (uuidsTemp));
4064+
4065+ session->handleEvent (&vmBindIsa->base );
4066+
4067+ auto &isaMap = session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->isaMap ;
4068+
4069+ EXPECT_EQ (1u , isaMap.size ());
4070+ EXPECT_NE (isaMap.end (), isaMap.find (isaGpuVa));
4071+
4072+ auto isaAllocation = isaMap[isaGpuVa].get ();
4073+ EXPECT_EQ (isaGpuVa, isaAllocation->bindInfo .gpuVa );
4074+ EXPECT_EQ (isaSize, isaAllocation->bindInfo .size );
4075+ EXPECT_EQ (elfUUID, isaAllocation->elfUuidHandle );
4076+ EXPECT_EQ (3u , isaAllocation->vmHandle );
4077+ EXPECT_FALSE (isaAllocation->tileInstanced );
4078+ }
4079+
40054080TEST_F (DebugApiLinuxVmBindTest, GivenTwoVmBindEventForTheSameIsaInDifferentVMWhenHandlingEventThenIsaVmHandleIsNotOverriden) {
40064081 uint64_t isaGpuVa = 0x345000 ;
40074082 uint64_t isaSize = 0x2000 ;
@@ -4781,6 +4856,7 @@ TEST_F(DebugApiLinuxTest, GivenContextParamEventWhenTypeIsParamEngineThenEventIs
47814856 uint32_t contextHandle = 20 ;
47824857
47834858 session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->contextsCreated [contextHandle].handle = contextHandle;
4859+ session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->contextsCreated [contextHandle].vm = vmId;
47844860 session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->vmIds .insert (vmId);
47854861
47864862 constexpr auto size = sizeof (prelim_drm_i915_debug_event_context_param) + sizeof (i915_context_param_engines) + sizeof (i915_engine_class_instance);
@@ -4824,10 +4900,83 @@ TEST_F(DebugApiLinuxTest, GivenContextParamEventWhenTypeIsParamEngineThenEventIs
48244900 EXPECT_EQ (static_cast <uint32_t >(I915_ENGINE_CLASS_RENDER), session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->contextsCreated [contextHandle].engines [0 ].engine_class );
48254901 EXPECT_EQ (1u , session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->contextsCreated [contextHandle].engines [0 ].engine_instance );
48264902
4903+ EXPECT_NE (session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->vmToTile .end (),
4904+ session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->vmToTile .find (vmId));
4905+ EXPECT_EQ (0u , session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->vmToTile [vmId]);
4906+
48274907 auto infoMessage = ::testing::internal::GetCapturedStdout ();
48284908 EXPECT_TRUE (hasSubstr (infoMessage, std::string (" I915_CONTEXT_PARAM_ENGINES ctx_id = 20 param = 10 value = 0" )));
48294909}
48304910
4911+ TEST_F (DebugApiLinuxTest, GivenNoVmIdWhenOrZeroEnginesContextParamEventIsHandledThenVmToTileIsNotSet) {
4912+ zet_debug_config_t config = {};
4913+ config.pid = 0x1234 ;
4914+
4915+ auto session = std::make_unique<MockDebugSessionLinux>(config, device, 10 );
4916+ ASSERT_NE (nullptr , session);
4917+ session->clientHandle = DebugSessionLinux::invalidClientHandle;
4918+
4919+ uint64_t vmId = 10 ;
4920+ uint32_t contextHandle = 20 ;
4921+
4922+ session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->contextsCreated [contextHandle].handle = contextHandle;
4923+ session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->contextsCreated [contextHandle].vm = MockDebugSessionLinux::invalidHandle;
4924+ session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->vmIds .insert (vmId);
4925+
4926+ constexpr auto size = sizeof (prelim_drm_i915_debug_event_context_param) + sizeof (i915_context_param_engines) + sizeof (i915_engine_class_instance);
4927+
4928+ auto memory = alignedMalloc (size, sizeof (prelim_drm_i915_debug_event_context_param));
4929+ auto *contextParamEvent = static_cast <prelim_drm_i915_debug_event_context_param *>(memory);
4930+
4931+ {
4932+ contextParamEvent->base .type = PRELIM_DRM_I915_DEBUG_EVENT_CONTEXT_PARAM;
4933+ contextParamEvent->base .flags = 0 ;
4934+ contextParamEvent->base .size = size;
4935+ contextParamEvent->client_handle = MockDebugSessionLinux::mockClientHandle;
4936+ contextParamEvent->ctx_handle = contextHandle;
4937+ }
4938+
4939+ auto offset = offsetof (prelim_drm_i915_debug_event_context_param, param);
4940+
4941+ GemContextParam paramToCopy = {};
4942+ paramToCopy.contextId = contextHandle;
4943+ paramToCopy.size = sizeof (i915_context_param_engines) + sizeof (i915_engine_class_instance);
4944+ paramToCopy.param = I915_CONTEXT_PARAM_ENGINES;
4945+ paramToCopy.value = 0 ;
4946+ memcpy (ptrOffset (memory, offset), ¶mToCopy, sizeof (GemContextParam));
4947+
4948+ auto valueOffset = offsetof (GemContextParam, value);
4949+ auto *engines = ptrOffset (memory, offset + valueOffset);
4950+ i915_context_param_engines enginesParam;
4951+ enginesParam.extensions = 0 ;
4952+ memcpy (engines, &enginesParam, sizeof (i915_context_param_engines));
4953+
4954+ auto enginesOffset = offsetof (i915_context_param_engines, engines);
4955+ auto *classInstance = ptrOffset (memory, offset + valueOffset + enginesOffset);
4956+ i915_engine_class_instance ci = {I915_ENGINE_CLASS_RENDER, 1 };
4957+ memcpy (classInstance, &ci, sizeof (i915_engine_class_instance));
4958+
4959+ session->handleEvent (&contextParamEvent->base );
4960+
4961+ EXPECT_EQ (1u , session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->contextsCreated [contextHandle].engines .size ());
4962+ EXPECT_EQ (static_cast <uint32_t >(I915_ENGINE_CLASS_RENDER), session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->contextsCreated [contextHandle].engines [0 ].engine_class );
4963+ EXPECT_EQ (1u , session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->contextsCreated [contextHandle].engines [0 ].engine_instance );
4964+
4965+ EXPECT_EQ (session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->vmToTile .end (),
4966+ session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->vmToTile .find (MockDebugSessionLinux::invalidHandle));
4967+
4968+ paramToCopy.size = sizeof (i915_context_param_engines);
4969+ session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->contextsCreated [contextHandle].vm = vmId;
4970+ memcpy (ptrOffset (memory, offset), ¶mToCopy, sizeof (GemContextParam));
4971+
4972+ session->handleEvent (&contextParamEvent->base );
4973+
4974+ EXPECT_EQ (session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->vmToTile .end (),
4975+ session->clientHandleToConnection [MockDebugSessionLinux::mockClientHandle]->vmToTile .find (vmId));
4976+
4977+ alignedFree (memory);
4978+ }
4979+
48314980TEST_F (DebugApiLinuxTest, GivenDebuggerErrorLogsWhenContextParamWithInvalidContextIsHandledThenErrorIsPrinted) {
48324981 DebugManagerStateRestore restorer;
48334982 NEO::DebugManager.flags .DebuggerLogBitmask .set (NEO::DebugVariables::DEBUGGER_LOG_BITMASK::LOG_ERROR);
0 commit comments