[PATCH i-g-t v2 3/3] drm/amdgpu: Add RPTR support and volatile qualifiers for user queues

Jesse.Zhang Jesse.Zhang at amd.com
Tue Jul 1 07:17:22 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