Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amdgpu/userq: Use drm_gem_objects_lookup in amdgpu_userq_wait_ioctl

Use the existing helper instead of open coding it

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Reviewed-by: Sunil Khatri <sunil.khatrti@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Tvrtko Ursulin and committed by
Alex Deucher
2de9353e 4ca06f6f

+24 -56
+24 -56
drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
··· 610 610 int amdgpu_userq_wait_ioctl(struct drm_device *dev, void *data, 611 611 struct drm_file *filp) 612 612 { 613 - u32 *syncobj_handles, *timeline_points, *timeline_handles, *bo_handles_read, *bo_handles_write; 614 - u32 num_syncobj, num_read_bo_handles, num_write_bo_handles; 615 - struct drm_amdgpu_userq_fence_info *fence_info = NULL; 616 613 struct drm_amdgpu_userq_wait *wait_info = data; 614 + const unsigned int num_write_bo_handles = wait_info->num_bo_write_handles; 615 + const unsigned int num_read_bo_handles = wait_info->num_bo_read_handles; 616 + struct drm_amdgpu_userq_fence_info *fence_info = NULL; 617 617 struct amdgpu_fpriv *fpriv = filp->driver_priv; 618 618 struct amdgpu_userq_mgr *userq_mgr = &fpriv->userq_mgr; 619 + struct drm_gem_object **gobj_write, **gobj_read; 620 + u32 *timeline_points, *timeline_handles; 619 621 struct amdgpu_usermode_queue *waitq; 620 - struct drm_gem_object **gobj_write; 621 - struct drm_gem_object **gobj_read; 622 + u32 *syncobj_handles, num_syncobj; 622 623 struct dma_fence **fences = NULL; 623 624 u16 num_points, num_fences = 0; 624 - int r, i, rentry, wentry, cnt; 625 625 struct drm_exec exec; 626 + int r, i, cnt; 626 627 627 628 if (!amdgpu_userq_enabled(dev)) 628 629 return -ENOTSUPP; 629 630 630 - num_read_bo_handles = wait_info->num_bo_read_handles; 631 - bo_handles_read = memdup_user(u64_to_user_ptr(wait_info->bo_read_handles), 632 - size_mul(sizeof(u32), num_read_bo_handles)); 633 - if (IS_ERR(bo_handles_read)) 634 - return PTR_ERR(bo_handles_read); 635 - 636 - num_write_bo_handles = wait_info->num_bo_write_handles; 637 - bo_handles_write = memdup_user(u64_to_user_ptr(wait_info->bo_write_handles), 638 - size_mul(sizeof(u32), num_write_bo_handles)); 639 - if (IS_ERR(bo_handles_write)) { 640 - r = PTR_ERR(bo_handles_write); 641 - goto free_bo_handles_read; 642 - } 643 - 644 631 num_syncobj = wait_info->num_syncobj_handles; 645 632 syncobj_handles = memdup_array_user(u64_to_user_ptr(wait_info->syncobj_handles), 646 633 num_syncobj, sizeof(u32)); 647 - if (IS_ERR(syncobj_handles)) { 648 - r = PTR_ERR(syncobj_handles); 649 - goto free_bo_handles_write; 650 - } 634 + if (IS_ERR(syncobj_handles)) 635 + return PTR_ERR(syncobj_handles); 636 + 651 637 652 638 num_points = wait_info->num_syncobj_timeline_handles; 653 639 timeline_handles = memdup_array_user(u64_to_user_ptr(wait_info->syncobj_timeline_handles), ··· 651 665 goto free_timeline_handles; 652 666 } 653 667 654 - gobj_read = kmalloc_array(num_read_bo_handles, sizeof(*gobj_read), GFP_KERNEL); 655 - if (!gobj_read) { 656 - r = -ENOMEM; 668 + r = drm_gem_objects_lookup(filp, 669 + u64_to_user_ptr(wait_info->bo_read_handles), 670 + num_read_bo_handles, 671 + &gobj_read); 672 + if (r) 657 673 goto free_timeline_points; 658 - } 659 674 660 - for (rentry = 0; rentry < num_read_bo_handles; rentry++) { 661 - gobj_read[rentry] = drm_gem_object_lookup(filp, bo_handles_read[rentry]); 662 - if (!gobj_read[rentry]) { 663 - r = -ENOENT; 664 - goto put_gobj_read; 665 - } 666 - } 667 - 668 - gobj_write = kmalloc_array(num_write_bo_handles, sizeof(*gobj_write), GFP_KERNEL); 669 - if (!gobj_write) { 670 - r = -ENOMEM; 675 + r = drm_gem_objects_lookup(filp, 676 + u64_to_user_ptr(wait_info->bo_write_handles), 677 + num_write_bo_handles, 678 + &gobj_write); 679 + if (r) 671 680 goto put_gobj_read; 672 - } 673 - 674 - for (wentry = 0; wentry < num_write_bo_handles; wentry++) { 675 - gobj_write[wentry] = drm_gem_object_lookup(filp, bo_handles_write[wentry]); 676 - if (!gobj_write[wentry]) { 677 - r = -ENOENT; 678 - goto put_gobj_write; 679 - } 680 - } 681 681 682 682 drm_exec_init(&exec, DRM_EXEC_INTERRUPTIBLE_WAIT, 683 683 (num_read_bo_handles + num_write_bo_handles)); ··· 920 948 exec_fini: 921 949 drm_exec_fini(&exec); 922 950 put_gobj_write: 923 - while (wentry-- > 0) 924 - drm_gem_object_put(gobj_write[wentry]); 951 + for (i = 0; i < num_write_bo_handles; i++) 952 + drm_gem_object_put(gobj_write[i]); 925 953 kfree(gobj_write); 926 954 put_gobj_read: 927 - while (rentry-- > 0) 928 - drm_gem_object_put(gobj_read[rentry]); 955 + for (i = 0; i < num_read_bo_handles; i++) 956 + drm_gem_object_put(gobj_read[i]); 929 957 kfree(gobj_read); 930 958 free_timeline_points: 931 959 kfree(timeline_points); ··· 933 961 kfree(timeline_handles); 934 962 free_syncobj_handles: 935 963 kfree(syncobj_handles); 936 - free_bo_handles_write: 937 - kfree(bo_handles_write); 938 - free_bo_handles_read: 939 - kfree(bo_handles_read); 940 964 941 965 return r; 942 966 }