@@ -46,6 +46,22 @@ vmw_buffer_object(struct ttm_buffer_object *bo)
4646 return container_of (bo , struct vmw_buffer_object , base );
4747}
4848
49+ /**
50+ * vmw_bo_bo_free - vmw buffer object destructor
51+ *
52+ * @bo: Pointer to the embedded struct ttm_buffer_object
53+ */
54+ static void vmw_bo_bo_free (struct ttm_buffer_object * bo )
55+ {
56+ struct vmw_buffer_object * vmw_bo = vmw_buffer_object (bo );
57+
58+ WARN_ON (vmw_bo -> dirty );
59+ WARN_ON (!RB_EMPTY_ROOT (& vmw_bo -> res_tree ));
60+ vmw_bo_unmap (vmw_bo );
61+ drm_gem_object_release (& bo -> base );
62+ kfree (vmw_bo );
63+ }
64+
4965/**
5066 * bo_is_vmw - check if the buffer object is a &vmw_buffer_object
5167 * @bo: ttm buffer object to be checked
@@ -58,8 +74,7 @@ vmw_buffer_object(struct ttm_buffer_object *bo)
5874 */
5975static bool bo_is_vmw (struct ttm_buffer_object * bo )
6076{
61- return bo -> destroy == & vmw_bo_bo_free ||
62- bo -> destroy == & vmw_gem_destroy ;
77+ return bo -> destroy == & vmw_bo_bo_free ;
6378}
6479
6580/**
@@ -376,23 +391,6 @@ void vmw_bo_unmap(struct vmw_buffer_object *vbo)
376391 ttm_bo_kunmap (& vbo -> map );
377392}
378393
379-
380- /**
381- * vmw_bo_bo_free - vmw buffer object destructor
382- *
383- * @bo: Pointer to the embedded struct ttm_buffer_object
384- */
385- void vmw_bo_bo_free (struct ttm_buffer_object * bo )
386- {
387- struct vmw_buffer_object * vmw_bo = vmw_buffer_object (bo );
388-
389- WARN_ON (vmw_bo -> dirty );
390- WARN_ON (!RB_EMPTY_ROOT (& vmw_bo -> res_tree ));
391- vmw_bo_unmap (vmw_bo );
392- drm_gem_object_release (& bo -> base );
393- kfree (vmw_bo );
394- }
395-
396394/* default destructor */
397395static void vmw_bo_default_destroy (struct ttm_buffer_object * bo )
398396{
@@ -449,22 +447,18 @@ int vmw_bo_create_kernel(struct vmw_private *dev_priv, unsigned long size,
449447int vmw_bo_create (struct vmw_private * vmw ,
450448 size_t size , struct ttm_placement * placement ,
451449 bool interruptible , bool pin ,
452- void (* bo_free )(struct ttm_buffer_object * bo ),
453450 struct vmw_buffer_object * * p_bo )
454451{
455452 int ret ;
456453
457- BUG_ON (!bo_free );
458-
459454 * p_bo = kmalloc (sizeof (* * p_bo ), GFP_KERNEL );
460455 if (unlikely (!* p_bo )) {
461456 DRM_ERROR ("Failed to allocate a buffer.\n" );
462457 return - ENOMEM ;
463458 }
464459
465460 ret = vmw_bo_init (vmw , * p_bo , size ,
466- placement , interruptible , pin ,
467- bo_free );
461+ placement , interruptible , pin );
468462 if (unlikely (ret != 0 ))
469463 goto out_error ;
470464
@@ -484,16 +478,14 @@ int vmw_bo_create(struct vmw_private *vmw,
484478 * @placement: Initial placement.
485479 * @interruptible: Whether waits should be performed interruptible.
486480 * @pin: If the BO should be created pinned at a fixed location.
487- * @bo_free: The buffer object destructor.
488481 * Returns: Zero on success, negative error code on error.
489482 *
490483 * Note that on error, the code will free the buffer object.
491484 */
492485int vmw_bo_init (struct vmw_private * dev_priv ,
493486 struct vmw_buffer_object * vmw_bo ,
494487 size_t size , struct ttm_placement * placement ,
495- bool interruptible , bool pin ,
496- void (* bo_free )(struct ttm_buffer_object * bo ))
488+ bool interruptible , bool pin )
497489{
498490 struct ttm_operation_ctx ctx = {
499491 .interruptible = interruptible ,
@@ -503,7 +495,6 @@ int vmw_bo_init(struct vmw_private *dev_priv,
503495 struct drm_device * vdev = & dev_priv -> drm ;
504496 int ret ;
505497
506- WARN_ON_ONCE (!bo_free );
507498 memset (vmw_bo , 0 , sizeof (* vmw_bo ));
508499 BUILD_BUG_ON (TTM_MAX_BO_PRIORITY <= 3 );
509500 vmw_bo -> base .priority = 3 ;
@@ -515,7 +506,7 @@ int vmw_bo_init(struct vmw_private *dev_priv,
515506 ret = ttm_bo_init_reserved (bdev , & vmw_bo -> base , size ,
516507 ttm_bo_type_device ,
517508 placement ,
518- 0 , & ctx , NULL , NULL , bo_free );
509+ 0 , & ctx , NULL , NULL , vmw_bo_bo_free );
519510 if (unlikely (ret )) {
520511 return ret ;
521512 }
0 commit comments