Add validation to ensure user queue sizes meet hardware requirements:
- Size must be a power of two for efficient ring buffer wrapping
- Size must be at least AMDGPU_GPU_PAGE_SIZE to prevent undersized allocations

This prevents invalid configurations that could lead to GPU faults or
unexpected behavior.

Signed-off-by: Jesse Zhang <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
index 3003aba22e1d..998e1fcc0034 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
@@ -864,6 +864,17 @@ static int amdgpu_userq_input_args_validate(struct 
drm_device *dev,
                        drm_file_err(filp, "invalidate userq queue va or 
size\n");
                        return -EINVAL;
                }
+
+               if (!is_power_of_2(args->in.queue_size)) {
+                       drm_file_err(filp, "Queue size must be a power of 2\n");
+                       return -EINVAL;
+               }
+
+               if (args->in.queue_size < AMDGPU_GPU_PAGE_SIZE) {
+                       drm_file_err(filp, "Queue size smaller than 
AMDGPU_GPU_PAGE_SIZE\n");
+                       return -EINVAL;
+               }
+
                if (!args->in.wptr_va || !args->in.rptr_va) {
                        drm_file_err(filp, "invalidate userq queue rptr or 
wptr\n");
                        return -EINVAL;
-- 
2.49.0

Reply via email to