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

drm/ttm: turn ttm_bo_device.vma_manager into a pointer

Rename the embedded struct vma_offset_manager, new name is _vma_manager.
ttm_bo_device.vma_manager changed to a pointer.

The ttm_bo_device_init() function gets an additional vma_manager
argument which allows to initialize ttm with a different vma manager.
When passing NULL the embedded _vma_manager is used.

All callers are updated to pass NULL, so the behavior doesn't change.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Christian König <christian.koenig@amd.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20190905070509.22407-2-kraxel@redhat.com

+24 -9
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
··· 1728 1728 r = ttm_bo_device_init(&adev->mman.bdev, 1729 1729 &amdgpu_bo_driver, 1730 1730 adev->ddev->anon_inode->i_mapping, 1731 + NULL, 1731 1732 adev->need_dma32); 1732 1733 if (r) { 1733 1734 DRM_ERROR("failed initializing buffer object driver(%d).\n", r);
+1
drivers/gpu/drm/drm_vram_mm_helper.c
··· 228 228 229 229 ret = ttm_bo_device_init(&vmm->bdev, &bo_driver, 230 230 dev->anon_inode->i_mapping, 231 + NULL, 231 232 true); 232 233 if (ret) 233 234 return ret;
+1
drivers/gpu/drm/nouveau/nouveau_ttm.c
··· 236 236 ret = ttm_bo_device_init(&drm->ttm.bdev, 237 237 &nouveau_bo_driver, 238 238 dev->anon_inode->i_mapping, 239 + NULL, 239 240 drm->client.mmu.dmabits <= 32 ? true : false); 240 241 if (ret) { 241 242 NV_ERROR(drm, "error initialising bo driver, %d\n", ret);
+1
drivers/gpu/drm/qxl/qxl_ttm.c
··· 325 325 r = ttm_bo_device_init(&qdev->mman.bdev, 326 326 &qxl_bo_driver, 327 327 qdev->ddev.anon_inode->i_mapping, 328 + NULL, 328 329 false); 329 330 if (r) { 330 331 DRM_ERROR("failed initializing buffer object driver(%d).\n", r);
+1
drivers/gpu/drm/radeon/radeon_ttm.c
··· 794 794 r = ttm_bo_device_init(&rdev->mman.bdev, 795 795 &radeon_bo_driver, 796 796 rdev->ddev->anon_inode->i_mapping, 797 + NULL, 797 798 rdev->need_dma32); 798 799 if (r) { 799 800 DRM_ERROR("failed initializing buffer object driver(%d).\n", r);
+9 -4
drivers/gpu/drm/ttm/ttm_bo.c
··· 672 672 struct ttm_bo_device *bdev = bo->bdev; 673 673 struct ttm_mem_type_manager *man = &bdev->man[bo->mem.mem_type]; 674 674 675 - drm_vma_offset_remove(&bdev->vma_manager, &bo->base.vma_node); 675 + drm_vma_offset_remove(bdev->vma_manager, &bo->base.vma_node); 676 676 ttm_mem_io_lock(man, false); 677 677 ttm_mem_io_free_vm(bo); 678 678 ttm_mem_io_unlock(man); ··· 1353 1353 */ 1354 1354 if (bo->type == ttm_bo_type_device || 1355 1355 bo->type == ttm_bo_type_sg) 1356 - ret = drm_vma_offset_add(&bdev->vma_manager, &bo->base.vma_node, 1356 + ret = drm_vma_offset_add(bdev->vma_manager, &bo->base.vma_node, 1357 1357 bo->mem.num_pages); 1358 1358 1359 1359 /* passed reservation objects should already be locked, ··· 1704 1704 pr_debug("Swap list %d was clean\n", i); 1705 1705 spin_unlock(&glob->lru_lock); 1706 1706 1707 - drm_vma_offset_manager_destroy(&bdev->vma_manager); 1707 + drm_vma_offset_manager_destroy(&bdev->_vma_manager); 1708 1708 1709 1709 if (!ret) 1710 1710 ttm_bo_global_release(); ··· 1716 1716 int ttm_bo_device_init(struct ttm_bo_device *bdev, 1717 1717 struct ttm_bo_driver *driver, 1718 1718 struct address_space *mapping, 1719 + struct drm_vma_offset_manager *vma_manager, 1719 1720 bool need_dma32) 1720 1721 { 1721 1722 struct ttm_bo_global *glob = &ttm_bo_glob; 1722 1723 int ret; 1724 + 1725 + if (!vma_manager) 1726 + vma_manager = &bdev->_vma_manager; 1723 1727 1724 1728 ret = ttm_bo_global_init(); 1725 1729 if (ret) ··· 1741 1737 if (unlikely(ret != 0)) 1742 1738 goto out_no_sys; 1743 1739 1744 - drm_vma_offset_manager_init(&bdev->vma_manager, 1740 + bdev->vma_manager = vma_manager; 1741 + drm_vma_offset_manager_init(&bdev->_vma_manager, 1745 1742 DRM_FILE_PAGE_OFFSET_START, 1746 1743 DRM_FILE_PAGE_OFFSET_SIZE); 1747 1744 INIT_DELAYED_WORK(&bdev->wq, ttm_bo_delayed_workqueue);
+3 -3
drivers/gpu/drm/ttm/ttm_bo_vm.c
··· 409 409 struct drm_vma_offset_node *node; 410 410 struct ttm_buffer_object *bo = NULL; 411 411 412 - drm_vma_offset_lock_lookup(&bdev->vma_manager); 412 + drm_vma_offset_lock_lookup(bdev->vma_manager); 413 413 414 - node = drm_vma_offset_lookup_locked(&bdev->vma_manager, offset, pages); 414 + node = drm_vma_offset_lookup_locked(bdev->vma_manager, offset, pages); 415 415 if (likely(node)) { 416 416 bo = container_of(node, struct ttm_buffer_object, 417 417 base.vma_node); 418 418 bo = ttm_bo_get_unless_zero(bo); 419 419 } 420 420 421 - drm_vma_offset_unlock_lookup(&bdev->vma_manager); 421 + drm_vma_offset_unlock_lookup(bdev->vma_manager); 422 422 423 423 if (!bo) 424 424 pr_err("Could not find buffer object to map\n");
+1
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
··· 830 830 ret = ttm_bo_device_init(&dev_priv->bdev, 831 831 &vmw_bo_driver, 832 832 dev->anon_inode->i_mapping, 833 + NULL, 833 834 false); 834 835 if (unlikely(ret != 0)) { 835 836 DRM_ERROR("Failed initializing TTM buffer object driver.\n");
+6 -2
include/drm/ttm/ttm_bo_driver.h
··· 441 441 * 442 442 * @driver: Pointer to a struct ttm_bo_driver struct setup by the driver. 443 443 * @man: An array of mem_type_managers. 444 - * @vma_manager: Address space manager 444 + * @vma_manager: Address space manager (pointer) 445 + * @_vma_manager: Address space manager (enbedded) 445 446 * lru_lock: Spinlock that protects the buffer+device lru lists and 446 447 * ddestroy lists. 447 448 * @dev_mapping: A pointer to the struct address_space representing the ··· 465 464 /* 466 465 * Protected by internal locks. 467 466 */ 468 - struct drm_vma_offset_manager vma_manager; 467 + struct drm_vma_offset_manager *vma_manager; 468 + struct drm_vma_offset_manager _vma_manager; 469 469 470 470 /* 471 471 * Protected by the global:lru lock. ··· 587 585 * @glob: A pointer to an initialized struct ttm_bo_global. 588 586 * @driver: A pointer to a struct ttm_bo_driver set up by the caller. 589 587 * @mapping: The address space to use for this bo. 588 + * @vma_manager: A pointer to a vma manager or NULL. 590 589 * @file_page_offset: Offset into the device address space that is available 591 590 * for buffer data. This ensures compatibility with other users of the 592 591 * address space. ··· 599 596 int ttm_bo_device_init(struct ttm_bo_device *bdev, 600 597 struct ttm_bo_driver *driver, 601 598 struct address_space *mapping, 599 + struct drm_vma_offset_manager *vma_manager, 602 600 bool need_dma32); 603 601 604 602 /**