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_signal_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
4ca06f6f cb48a6b2

+22 -59
+22 -59
drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
··· 459 459 struct drm_file *filp) 460 460 { 461 461 struct amdgpu_device *adev = drm_to_adev(dev); 462 + struct drm_amdgpu_userq_signal *args = data; 463 + const unsigned int num_write_bo_handles = args->num_bo_write_handles; 464 + const unsigned int num_read_bo_handles = args->num_bo_read_handles; 462 465 struct amdgpu_fpriv *fpriv = filp->driver_priv; 463 466 struct amdgpu_userq_mgr *userq_mgr = &fpriv->userq_mgr; 464 - struct drm_amdgpu_userq_signal *args = data; 465 - struct drm_gem_object **gobj_write = NULL; 466 - struct drm_gem_object **gobj_read = NULL; 467 - struct amdgpu_usermode_queue *queue; 468 - struct amdgpu_userq_fence *userq_fence; 469 - struct drm_syncobj **syncobj = NULL; 470 - u32 *bo_handles_write, num_write_bo_handles; 467 + struct drm_gem_object **gobj_write, **gobj_read; 471 468 u32 *syncobj_handles, num_syncobj_handles; 472 - u32 *bo_handles_read, num_read_bo_handles; 473 - int r, i, entry, rentry, wentry; 469 + struct amdgpu_userq_fence *userq_fence; 470 + struct amdgpu_usermode_queue *queue; 471 + struct drm_syncobj **syncobj = NULL; 474 472 struct dma_fence *fence; 475 473 struct drm_exec exec; 474 + int r, i, entry; 476 475 u64 wptr; 477 476 478 477 if (!amdgpu_userq_enabled(dev)) ··· 498 499 } 499 500 } 500 501 501 - num_read_bo_handles = args->num_bo_read_handles; 502 - bo_handles_read = memdup_user(u64_to_user_ptr(args->bo_read_handles), 503 - sizeof(u32) * num_read_bo_handles); 504 - if (IS_ERR(bo_handles_read)) { 505 - r = PTR_ERR(bo_handles_read); 502 + r = drm_gem_objects_lookup(filp, 503 + u64_to_user_ptr(args->bo_read_handles), 504 + num_read_bo_handles, 505 + &gobj_read); 506 + if (r) 506 507 goto free_syncobj; 507 - } 508 508 509 - /* Array of pointers to the GEM read objects */ 510 - gobj_read = kmalloc_array(num_read_bo_handles, sizeof(*gobj_read), GFP_KERNEL); 511 - if (!gobj_read) { 512 - r = -ENOMEM; 513 - goto free_bo_handles_read; 514 - } 515 - 516 - for (rentry = 0; rentry < num_read_bo_handles; rentry++) { 517 - gobj_read[rentry] = drm_gem_object_lookup(filp, bo_handles_read[rentry]); 518 - if (!gobj_read[rentry]) { 519 - r = -ENOENT; 520 - goto put_gobj_read; 521 - } 522 - } 523 - 524 - num_write_bo_handles = args->num_bo_write_handles; 525 - bo_handles_write = memdup_user(u64_to_user_ptr(args->bo_write_handles), 526 - sizeof(u32) * num_write_bo_handles); 527 - if (IS_ERR(bo_handles_write)) { 528 - r = PTR_ERR(bo_handles_write); 509 + r = drm_gem_objects_lookup(filp, 510 + u64_to_user_ptr(args->bo_write_handles), 511 + num_write_bo_handles, 512 + &gobj_write); 513 + if (r) 529 514 goto put_gobj_read; 530 - } 531 - 532 - /* Array of pointers to the GEM write objects */ 533 - gobj_write = kmalloc_array(num_write_bo_handles, sizeof(*gobj_write), GFP_KERNEL); 534 - if (!gobj_write) { 535 - r = -ENOMEM; 536 - goto free_bo_handles_write; 537 - } 538 - 539 - for (wentry = 0; wentry < num_write_bo_handles; wentry++) { 540 - gobj_write[wentry] = drm_gem_object_lookup(filp, bo_handles_write[wentry]); 541 - if (!gobj_write[wentry]) { 542 - r = -ENOENT; 543 - goto put_gobj_write; 544 - } 545 - } 546 515 547 516 /* Retrieve the user queue */ 548 517 queue = xa_load(&userq_mgr->userq_xa, args->queue_id); ··· 589 622 exec_fini: 590 623 drm_exec_fini(&exec); 591 624 put_gobj_write: 592 - while (wentry-- > 0) 593 - drm_gem_object_put(gobj_write[wentry]); 625 + for (i = 0; i < num_write_bo_handles; i++) 626 + drm_gem_object_put(gobj_write[i]); 594 627 kfree(gobj_write); 595 - free_bo_handles_write: 596 - kfree(bo_handles_write); 597 628 put_gobj_read: 598 - while (rentry-- > 0) 599 - drm_gem_object_put(gobj_read[rentry]); 629 + for (i = 0; i < num_read_bo_handles; i++) 630 + drm_gem_object_put(gobj_read[i]); 600 631 kfree(gobj_read); 601 - free_bo_handles_read: 602 - kfree(bo_handles_read); 603 632 free_syncobj: 604 633 while (entry-- > 0) 605 634 if (syncobj[entry])