drm/amdkfd: Update get_wave_state() for GFX10
authorYong Zhao <Yong.Zhao@amd.com>
Sat, 9 Nov 2019 03:54:07 +0000 (22:54 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 13 Nov 2019 20:29:45 +0000 (15:29 -0500)
Given control stack is now in the userspace context save restore area
on GFX10, the same as GFX8, it is not needed to copy it back to userspace.

Signed-off-by: Yong Zhao <Yong.Zhao@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v10.c

index 4884cd6..954dc8a 100644 (file)
@@ -251,18 +251,22 @@ static int get_wave_state(struct mqd_manager *mm, void *mqd,
 {
        struct v10_compute_mqd *m;
 
-       /* Control stack is located one page after MQD. */
-       void *mqd_ctl_stack = (void *)((uintptr_t)mqd + PAGE_SIZE);
-
        m = get_mqd(mqd);
 
+       /* Control stack is written backwards, while workgroup context data
+        * is written forwards. Both starts from m->cp_hqd_cntl_stack_size.
+        * Current position is at m->cp_hqd_cntl_stack_offset and
+        * m->cp_hqd_wg_state_offset, respectively.
+        */
        *ctl_stack_used_size = m->cp_hqd_cntl_stack_size -
                m->cp_hqd_cntl_stack_offset;
        *save_area_used_size = m->cp_hqd_wg_state_offset -
                m->cp_hqd_cntl_stack_size;
 
-       if (copy_to_user(ctl_stack, mqd_ctl_stack, m->cp_hqd_cntl_stack_size))
-               return -EFAULT;
+       /* Control stack is not copied to user mode for GFXv10 because
+        * it's part of the context save area that is already
+        * accessible to user mode
+        */
 
        return 0;
 }