intel / intel/compute-runtime

Crash relating to STATE_SYSTEM_MEM_FENCE_ADDRESS.

Open
#994 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
1.4k
Forks
300
PR merge metrics
No merged PRs in 30d

Description

DirectSubmissionHw::dispatchSystemMemoryFenceAddress() calls
makeGlobalFenceAlwaysResident() and then programs the fence's GPU address into
the ring via STATE_SYSTEM_MEM_FENCE_ADDRESS, after which the CCS reads that
address. The hook is an empty virtual in direct_submission_hw.h and is
overridden only by WddmDirectSubmission; DrmDirectSubmission overrides fifteen
other methods but not this one, so on Linux the fence is never made resident
for the ring's own use. The CSR's per-flush makeResident() does not cover it.

```
diff --git a/shared/source/direct_submission/linux/drm_direct_submission.h b/shared/source/direct_submission/linux/drm_direct_submission.h
index 8e3f9b60d9..6fc7311bce 100644
--- a/shared/source/direct_submission/linux/drm_direct_submission.h
+++ b/shared/source/direct_submission/linux/drm_direct_submission.h
@@ -28,6 +28,7 @@ class DrmDirectSubmission : public DirectSubmissionHw {

protected:
bool allocateOsResources() override;
+ void makeGlobalFenceAlwaysResident() override;
bool submit(uint64_t gpuAddress, size_t size, const ResidencyContainer *allocationsForResidency) override;

bool handleResidency(const ResidencyContainer *allocationsForResidency) override;
diff --git a/shared/source/direct_submission/linux/drm_direct_submission.inl b/shared/source/direct_submission/linux/drm_direct_submission.inl
index 0d77c31250..070f360fb0 100644
--- a/shared/source/direct_submission/linux/drm_direct_submission.inl
+++ b/shared/source/direct_submission/linux/drm_direct_submission.inl
@@ -340,4 +340,12 @@ bool DrmDirectSubmission::isGpuHangDetected(std::chrono::
return false;
}

+template
+inline void DrmDirectSubmission::makeGlobalFenceAlwaysResident() {
+ if (this->globalFenceAllocation != nullptr) {
+ DirectSubmissionAllocations allocations;
+ allocations.push_back(this->globalFenceAllocation);
+ UNRECOVERABLE_IF(!this->makeResourcesResident(allocations));
+ }
+}
+
} // namespace NEO
```

Contributor guide

Open the contributing guide

Research direction

Start with shared/source/direct_submission/direct_submission_hw.h and compare the fence-residency hook with the WddmDirectSubmission and DrmDirectSubmission implementations in the Linux direct-submission files. Trace dispatchSystemMemoryFenceAddress() and verify that the fence used by STATE_SYSTEM_MEM_FENCE_ADDRESS is resident on Linux; done when the crash scenario is covered without regressing direct submission.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, linux
Domain
computer-graphics, operating-systems
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.