drm/ttm: alter cpu_writers to return -EBUSY in ttm_execbuf_util reservations
Subsystems (3)
PATCH 1/1 drm/ttm: alter cpu_writers to return -EBUSY in ttm_execbuf_util reservations
This is similar to other platforms that don't allow command submission to buffers locked on the cpu.
Signed-off-by Maarten Lankhorst <[email protected]>
---
drivers/gpu/drm/ttm/ttm_bo.c +1 -12
@@ -1054,16 +1054,6 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, }EXPORT_SYMBOL (ttm_bo_mem_space); -int ttm_bo_wait_cpu (struct ttm_buffer_object *bo,bool no_wait) -{ -if ((atomic_read (&bo->cpu_writers) >0 ) && no_wait) -return -EBUSY ; - -return wait_event_interruptible (bo->event_queue, -atomic_read (&bo->cpu_writers) ==0 ); -} -EXPORT_SYMBOL (ttm_bo_wait_cpu); - int ttm_bo_move_buffer(struct ttm_buffer_object *bo, struct ttm_placement *placement, bool interruptible, bool no_wait_reserve,
@@ -1797,8 +1787,7 @@ EXPORT_SYMBOL(ttm_bo_synccpu_write_grab);void ttm_bo_synccpu_write_release (struct ttm_buffer_object *bo) { -if (atomic_dec_and_test (&bo->cpu_writers)) -wake_up_all (&bo->event_queue); +atomic_dec (&bo->cpu_writers); }EXPORT_SYMBOL (ttm_bo_synccpu_write_release);
drivers/gpu/drm/ttm/ttm_execbuf_util.c +1 -4
@@ -185,10 +185,7 @@ retry_this_bo:ttm_eu_backoff_reservation_locked (list);spin_unlock (&glob->lru_lock);ttm_eu_list_ref_sub (list); - ret =ttm_bo_wait_cpu (bo, false); -if (ret) -return ret; - goto retry; +return -EBUSY ; } }
include/drm/ttm/ttm_bo_api.h +3 -2
@@ -429,8 +429,9 @@ extern void ttm_bo_unlock_delayed_workqueue(struct ttm_bo_device *bdev,* @no_wait: Return immediately if buffer is busy. * * Synchronizes a buffer object for CPU RW access. This means -* blocking command submission that affects the buffer and -* waiting for buffer idle. This lock is recursive. +* command submission that affects the buffer will return -EBUSY +* until ttm_bo_synccpu_write_release is called. +* * Returns * -EBUSY if the buffer is busy and no_wait is true. * -ERESTARTSYS if interrupted by a signal.
include/drm/ttm/ttm_bo_driver.h +0 -14
@@ -729,20 +729,6 @@ extern void ttm_bo_mem_put(struct ttm_buffer_object *bo,extern void ttm_bo_mem_put_locked (struct ttm_buffer_object *bo,struct ttm_mem_reg *mem); -/** -* ttm_bo_wait_for_cpu -* -* @bo: Pointer to a struct ttm_buffer_object. -* @no_wait: Don't sleep while waiting. -* -* Wait until a buffer object is no longer sync'ed for CPU access. -* Returns: -* -EBUSY: Buffer object was sync'ed for CPU access. (only if no_wait == 1). -* -ERESTARTSYS: An interruptible sleep was interrupted by a signal. -*/ - -extern int ttm_bo_wait_cpu (struct ttm_buffer_object *bo,bool no_wait); -extern void ttm_bo_global_release (struct drm_global_reference *ref);extern int ttm_bo_global_init (struct drm_global_reference *ref);
Quoted 96 lines · Maarten Lankhorst
This is similar to other platforms that don't allow command submission to buffers locked on the cpu.
Signed-off-by Maarten Lankhorst <[email protected]>---
drivers/gpu/drm/ttm/ttm_bo.c +1
-12@@ -1054,16 +1054,6 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, }EXPORT_SYMBOL (ttm_bo_mem_space); -int ttm_bo_wait_cpu (struct ttm_buffer_object *bo,bool no_wait) -{ -if ((atomic_read (&bo->cpu_writers) >0 ) && no_wait) -return -EBUSY ; - -return wait_event_interruptible (bo->event_queue, -atomic_read (&bo->cpu_writers) ==0 ); -} -EXPORT_SYMBOL (ttm_bo_wait_cpu); - int ttm_bo_move_buffer(struct ttm_buffer_object *bo, struct ttm_placement *placement, bool interruptible, bool no_wait_reserve,@@ -1797,8 +1787,7 @@ EXPORT_SYMBOL(ttm_bo_synccpu_write_grab);void ttm_bo_synccpu_write_release (struct ttm_buffer_object *bo) { -if (atomic_dec_and_test (&bo->cpu_writers)) -wake_up_all (&bo->event_queue); +atomic_dec (&bo->cpu_writers); }EXPORT_SYMBOL (ttm_bo_synccpu_write_release);drivers/gpu/drm/ttm/ttm_execbuf_util.c +1
-4@@ -185,10 +185,7 @@ retry_this_bo:ttm_eu_backoff_reservation_locked (list);spin_unlock (&glob->lru_lock);ttm_eu_list_ref_sub (list); - ret =ttm_bo_wait_cpu (bo, false); -if (ret) -return ret; - goto retry; +return -EBUSY ; } }include/drm/ttm/ttm_bo_api.h +3
-2@@ -429,8 +429,9 @@ extern void ttm_bo_unlock_delayed_workqueue(struct ttm_bo_device *bdev,* @no_wait: Return immediately if buffer is busy. * * Synchronizes a buffer object for CPU RW access. This means -* blocking command submission that affects the buffer and -* waiting for buffer idle. This lock is recursive. +* command submission that affects the buffer will return -EBUSY +* until ttm_bo_synccpu_write_release is called. +* * Returns * -EBUSY if the buffer is busy and no_wait is true. * -ERESTARTSYS if interrupted by a signal. include/drm/ttm/ttm_bo_driver.h +0
-14@@ -729,20 +729,6 @@ extern void ttm_bo_mem_put(struct ttm_buffer_object *bo,extern void ttm_bo_mem_put_locked (struct ttm_buffer_object *bo,struct ttm_mem_reg *mem); -/** -* ttm_bo_wait_for_cpu -* -* @bo: Pointer to a struct ttm_buffer_object. -* @no_wait: Don't sleep while waiting. -* -* Wait until a buffer object is no longer sync'ed for CPU access. -* Returns: -* -EBUSY: Buffer object was sync'ed for CPU access. (only if no_wait == 1). -* -ERESTARTSYS: An interruptible sleep was interrupted by a signal. -*/ - -extern int ttm_bo_wait_cpu (struct ttm_buffer_object *bo,bool no_wait); -extern void ttm_bo_global_release (struct drm_global_reference *ref);extern int ttm_bo_global_init (struct drm_global_reference *ref);
Quoted 4 lines
_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel
Reviewed-by Thomas Hellstrom <[email protected]>