Crash relating to STATE_SYSTEM_MEM_FENCE_ADDRESS.
- 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
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