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

drm/vmwgfx: consolidate ttm object creation and populate

These two functions has the same code in them, create a common
helper function instead.

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200804025632.3868079-2-airlied@gmail.com

+39 -57
+4
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
··· 1023 1023 extern void vmw_bo_unmap_dma(struct ttm_buffer_object *bo); 1024 1024 extern const struct vmw_sg_table * 1025 1025 vmw_bo_sg_table(struct ttm_buffer_object *bo); 1026 + extern int vmw_bo_create_and_populate(struct vmw_private *dev_priv, 1027 + unsigned long bo_size, 1028 + struct ttm_buffer_object **bo_p); 1029 + 1026 1030 extern void vmw_piter_start(struct vmw_piter *viter, 1027 1031 const struct vmw_sg_table *vsgt, 1028 1032 unsigned long p_offs);
+3 -57
drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
··· 238 238 unsigned long offset; 239 239 unsigned long bo_size; 240 240 struct vmw_otable *otables = batch->otables; 241 - struct ttm_operation_ctx ctx = { 242 - .interruptible = false, 243 - .no_wait_gpu = false 244 - }; 245 241 SVGAOTableType i; 246 242 int ret; 247 243 ··· 251 255 bo_size += otables[i].size; 252 256 } 253 257 254 - ret = ttm_bo_create(&dev_priv->bdev, bo_size, 255 - ttm_bo_type_device, 256 - &vmw_sys_ne_placement, 257 - 0, false, &batch->otable_bo); 258 - 258 + ret = vmw_bo_create_and_populate(dev_priv, bo_size, &batch->otable_bo); 259 259 if (unlikely(ret != 0)) 260 - goto out_no_bo; 261 - 262 - ret = ttm_bo_reserve(batch->otable_bo, false, true, NULL); 263 - BUG_ON(ret != 0); 264 - ret = vmw_bo_driver.ttm_tt_populate(batch->otable_bo->ttm, &ctx); 265 - if (unlikely(ret != 0)) 266 - goto out_unreserve; 267 - ret = vmw_bo_map_dma(batch->otable_bo); 268 - if (unlikely(ret != 0)) 269 - goto out_unreserve; 270 - 271 - ttm_bo_unreserve(batch->otable_bo); 260 + return ret; 272 261 273 262 offset = 0; 274 263 for (i = 0; i < batch->num_otables; ++i) { ··· 270 289 271 290 return 0; 272 291 273 - out_unreserve: 274 - ttm_bo_unreserve(batch->otable_bo); 275 292 out_no_setup: 276 293 for (i = 0; i < batch->num_otables; ++i) { 277 294 if (batch->otables[i].enabled) ··· 279 300 280 301 ttm_bo_put(batch->otable_bo); 281 302 batch->otable_bo = NULL; 282 - out_no_bo: 283 303 return ret; 284 304 } 285 305 ··· 410 432 static int vmw_mob_pt_populate(struct vmw_private *dev_priv, 411 433 struct vmw_mob *mob) 412 434 { 413 - int ret; 414 - struct ttm_operation_ctx ctx = { 415 - .interruptible = false, 416 - .no_wait_gpu = false 417 - }; 418 - 419 435 BUG_ON(mob->pt_bo != NULL); 420 436 421 - ret = ttm_bo_create(&dev_priv->bdev, mob->num_pages * PAGE_SIZE, 422 - ttm_bo_type_device, 423 - &vmw_sys_ne_placement, 424 - 0, false, &mob->pt_bo); 425 - if (unlikely(ret != 0)) 426 - return ret; 427 - 428 - ret = ttm_bo_reserve(mob->pt_bo, false, true, NULL); 429 - 430 - BUG_ON(ret != 0); 431 - ret = vmw_bo_driver.ttm_tt_populate(mob->pt_bo->ttm, &ctx); 432 - if (unlikely(ret != 0)) 433 - goto out_unreserve; 434 - ret = vmw_bo_map_dma(mob->pt_bo); 435 - if (unlikely(ret != 0)) 436 - goto out_unreserve; 437 - 438 - ttm_bo_unreserve(mob->pt_bo); 439 - 440 - return 0; 441 - 442 - out_unreserve: 443 - ttm_bo_unreserve(mob->pt_bo); 444 - ttm_bo_put(mob->pt_bo); 445 - mob->pt_bo = NULL; 446 - 447 - return ret; 437 + return vmw_bo_create_and_populate(dev_priv, mob->num_pages * PAGE_SIZE, &mob->pt_bo); 448 438 } 449 439 450 440 /**
+32
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
··· 819 819 .swap_notify = vmw_swap_notify, 820 820 .io_mem_reserve = &vmw_ttm_io_mem_reserve, 821 821 }; 822 + 823 + int vmw_bo_create_and_populate(struct vmw_private *dev_priv, 824 + unsigned long bo_size, 825 + struct ttm_buffer_object **bo_p) 826 + { 827 + struct ttm_operation_ctx ctx = { 828 + .interruptible = false, 829 + .no_wait_gpu = false 830 + }; 831 + struct ttm_buffer_object *bo; 832 + int ret; 833 + 834 + ret = ttm_bo_create(&dev_priv->bdev, bo_size, 835 + ttm_bo_type_device, 836 + &vmw_sys_ne_placement, 837 + 0, false, &bo); 838 + 839 + if (unlikely(ret != 0)) 840 + return ret; 841 + 842 + ret = ttm_bo_reserve(bo, false, true, NULL); 843 + BUG_ON(ret != 0); 844 + ret = vmw_bo_driver.ttm_tt_populate(bo->ttm, &ctx); 845 + if (likely(ret == 0)) 846 + ret = vmw_bo_map_dma(bo); 847 + 848 + ttm_bo_unreserve(bo); 849 + 850 + if (likely(ret == 0)) 851 + *bo_p = bo; 852 + return ret; 853 + }