[PATCH i-g-t v3 3/5] drm/amdgpu: Add RPTR support and volatile qualifiers for user queues
Jesse.Zhang
Jesse.Zhang at amd.com
Wed Jul 2 05:47:11 UTC 2025
This change introduces two improvements to user queue handling:
1. Adds rptr_cpu pointer tracking in amdgpu_user_queue_create()
to properly handle read pointer management for user queues.
2. Marks both wptr_cpu and new rptr_cpu pointers as volatile in
amdgpu_ring_context to ensure compiler doesn't optimize away
accesses to these hardware-mapped registers.
Signed-off-by: Jesse Zhang <Jesse.Zhang at amd.com>
---
lib/amdgpu/amd_ip_blocks.h | 3 ++-
lib/amdgpu/amd_userq.c | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/lib/amdgpu/amd_ip_blocks.h b/lib/amdgpu/amd_ip_blocks.h
index a6c35c171..2a4fa1742 100644
--- a/lib/amdgpu/amd_ip_blocks.h
+++ b/lib/amdgpu/amd_ip_blocks.h
@@ -166,7 +166,8 @@ struct amdgpu_ring_context {
struct amdgpu_userq_bo eop;
uint32_t *queue_cpu;
- uint64_t *wptr_cpu;
+ volatile uint64_t *wptr_cpu;
+ volatile uint64_t *rptr_cpu;
uint64_t *doorbell_cpu;
uint32_t db_handle;
diff --git a/lib/amdgpu/amd_userq.c b/lib/amdgpu/amd_userq.c
index 10e82a5a4..43a2d10c5 100644
--- a/lib/amdgpu/amd_userq.c
+++ b/lib/amdgpu/amd_userq.c
@@ -416,6 +416,7 @@ void amdgpu_user_queue_create(amdgpu_device_handle device_handle, struct amdgpu_
ctxt->doorbell_cpu = (uint64_t *)ctxt->doorbell.ptr;
ctxt->wptr_cpu = (uint64_t *)ctxt->wptr.ptr;
+ ctxt->rptr_cpu = (uint64_t *)ctxt->rptr.ptr;
ctxt->queue_cpu = (uint32_t *)ctxt->queue.ptr;
memset(ctxt->queue_cpu, 0, USERMODE_QUEUE_SIZE);
--
2.49.0
More information about the igt-dev
mailing list