drm/ttm: add ttm_bo_is_reserved
Subsystems (3)
PATCH 1/3 drm/ttm: add ttm_bo_is_reserved
--- drivers/gpu/drm/ttm/ttm_bo.c | 12 ++++++------ include/drm/ttm/ttm_bo_api.h | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-)
drivers/gpu/drm/ttm/ttm_bo.c +6 -6
@@ -161,9 +161,9 @@ int ttm_bo_wait_unreserved(struct ttm_buffer_object *bo, bool interruptible) {if (interruptible) {return wait_event_interruptible (bo->event_queue, -atomic_read (&bo->reserved) ==0 ); + !ttm_bo_is_reserved (bo)); }else { -wait_event (bo->event_queue,atomic_read (&bo->reserved) ==0 ); +wait_event (bo->event_queue, !ttm_bo_is_reserved (bo));return 0 ; } }
@@ -174,7 +174,7 @@ void ttm_bo_add_to_lru(struct ttm_buffer_object *bo)struct ttm_bo_device *bdev = bo->bdev;struct ttm_mem_type_manager *man; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));if (!(bo->mem.placement &TTM_PL_FLAG_NO_EVICT )) {
@@ -748,7 +748,7 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, bool interruptible, goto out; } -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo)); evict_mem = bo->mem; evict_mem.mm_node =NULL ;
@@ -1058,7 +1058,7 @@ int ttm_bo_move_buffer(struct ttm_buffer_object *bo,struct ttm_mem_reg mem;struct ttm_bo_device *bdev = bo->bdev; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));/* * FIXME: It's possible to pipeline buffer moves.
@@ -1115,7 +1115,7 @@ int ttm_bo_validate(struct ttm_buffer_object *bo, {int ret; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));/* Check that range is valid */ if (placement->lpfn || placement->fpfn) if (placement->fpfn > placement->lpfn ||
include/drm/ttm/ttm_bo_api.h +14 -0
@@ -705,4 +705,18 @@ extern ssize_t ttm_bo_io(struct ttm_bo_device *bdev, struct file *filp,extern void ttm_bo_swapout_all (struct ttm_bo_device *bdev); +/** +* ttm_bo_is_reserved - return an indication if a ttm buffer object is reserved +* +* @bo: The buffer object to check. +* +* This function returns an indication if a bo is reserved or not, and should +* only be used to print an error when it is not from incorrect api usage, since +* there's no guarantee that it is the caller that is holding the reservation. +*/ +static inline bool ttm_bo_is_reserved (struct ttm_buffer_object *bo) +{ +return atomic_read (&bo->reserved); +} +#endif
Quoted 71 lines · Maarten Lankhorst
Signed-off-by Maarten Lankhorst <[email protected]>--- drivers/gpu/drm/ttm/ttm_bo.c | 12 ++++++------ include/drm/ttm/ttm_bo_api.h | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-)drivers/gpu/drm/ttm/ttm_bo.c +6
-6@@ -161,9 +161,9 @@ int ttm_bo_wait_unreserved(struct ttm_buffer_object *bo, bool interruptible) {if (interruptible) {return wait_event_interruptible (bo->event_queue, -atomic_read (&bo->reserved) ==0 ); + !ttm_bo_is_reserved (bo)); }else { -wait_event (bo->event_queue,atomic_read (&bo->reserved) ==0 ); +wait_event (bo->event_queue, !ttm_bo_is_reserved (bo));return 0 ; } }@@ -174,7 +174,7 @@ void ttm_bo_add_to_lru(struct ttm_buffer_object *bo)struct ttm_bo_device *bdev = bo->bdev;struct ttm_mem_type_manager *man; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));if (!(bo->mem.placement &TTM_PL_FLAG_NO_EVICT )) {@@ -748,7 +748,7 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, bool interruptible, goto out; } -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo)); evict_mem = bo->mem; evict_mem.mm_node =NULL ;@@ -1058,7 +1058,7 @@ int ttm_bo_move_buffer(struct ttm_buffer_object *bo,struct ttm_mem_reg mem;struct ttm_bo_device *bdev = bo->bdev; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));/* * FIXME: It's possible to pipeline buffer moves. @@ -1115,7 +1115,7 @@ int ttm_bo_validate(struct ttm_buffer_object *bo, {int ret; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));/* Check that range is valid */ if (placement->lpfn || placement->fpfn) if (placement->fpfn > placement->lpfn ||include/drm/ttm/ttm_bo_api.h +5
-0@@ -705,4 +705,18 @@ extern ssize_t ttm_bo_io(struct ttm_bo_device *bdev, struct file *filp,extern void ttm_bo_swapout_all (struct ttm_bo_device *bdev); +/** +* ttm_bo_is_reserved - return an indication if a ttm buffer object is reserved +* +* @bo: The buffer object to check. +*
include/drm/ttm/ttm_bo_api.h extern ssize_t ttm_bo_io(struct ttm_bo_device *bdev, struct file *filp, · line 722
Quoted 10 lines
include/drm/ttm/ttm_bo_api.h +9
-0+* This function returns an indication if a bo is reserved or not, and should +* only be used to print an error when it is not from incorrect api usage, since +* there's no guarantee that it is the caller that is holding the reservation. +*/ +static inline bool ttm_bo_is_reserved (struct ttm_buffer_object *bo) +{ +return atomic_read (&bo->reserved); +} +#endif
This looks good, although for clarity we should add in the comments that if the caller is holding the reservation, the function is guaranteed to return true.
Otherwise
Quoted 5 lines
_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel
Maarten Lankhorst
Reviewed-by Thomas HellstromOp 25-10-12 09:42, Thomas Hellstrom schreef:
Quoted 75 lines · Maarten Lankhorst
Quoted 61 lines
Signed-off-by Maarten Lankhorst <[email protected]>--- drivers/gpu/drm/ttm/ttm_bo.c | 12 ++++++------ include/drm/ttm/ttm_bo_api.h | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-)drivers/gpu/drm/ttm/ttm_bo.c +6
-2@@ -161,9 +161,9 @@ int ttm_bo_wait_unreserved(struct ttm_buffer_object *bo, bool interruptible) {if (interruptible) {return wait_event_interruptible (bo->event_queue, -atomic_read (&bo->reserved) ==0 ); + !ttm_bo_is_reserved (bo)); }else { -wait_event (bo->event_queue,atomic_read (&bo->reserved) ==0 ); +wait_event (bo->event_queue, !ttm_bo_is_reserved (bo));return 0 ; } }@@ -174,7 +174,7 @@ void ttm_bo_add_to_lru(struct ttm_buffer_object *bo)struct ttm_bo_device *bdev = bo->bdev;struct ttm_mem_type_manager *man; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));if (!(bo->mem.placement &TTM_PL_FLAG_NO_EVICT )) { @@ -748,7 +748,7 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, bool interruptible, goto out; } -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo)); evict_mem = bo->mem; evict_mem.mm_node =NULL ;@@ -1058,7 +1058,7 @@ int ttm_bo_move_buffer(struct ttm_buffer_object *bo,struct ttm_mem_reg mem;struct ttm_bo_device *bdev = bo->bdev; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));/* * FIXME: It's possible to pipeline buffer moves. @@ -1115,7 +1115,7 @@ int ttm_bo_validate(struct ttm_buffer_object *bo, {int ret; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));/* Check that range is valid */ if (placement->lpfn || placement->fpfn) if (placement->fpfn > placement->lpfn ||include/drm/ttm/ttm_bo_api.h +4
-0@@ -705,4 +705,18 @@ extern ssize_t ttm_bo_io(struct ttm_bo_device *bdev, struct file *filp,extern void ttm_bo_swapout_all (struct ttm_bo_device *bdev); +/** +* ttm_bo_is_reserved - return an indication if a ttm buffer object is reserved +* +* @bo: The buffer object to check. +* include/drm/ttm/ttm_bo_api.h extern ssize_t ttm_bo_io(struct ttm_bo_device *bdev, struct file *filp, · line 720
Quoted 10 lines
include/drm/ttm/ttm_bo_api.h +9
-0+* This function returns an indication if a bo is reserved or not, and should +* only be used to print an error when it is not from incorrect api usage, since +* there's no guarantee that it is the caller that is holding the reservation. +*/ +static inline bool ttm_bo_is_reserved (struct ttm_buffer_object *bo) +{ +return atomic_read (&bo->reserved); +} +#endif This looks good, although for clarity we should add in the comments that if the caller is holding the reservation, the function is guaranteed to return true.
Quoted 2 lines
Otherwise
Reviewed-by Thomas Hellstrom <[email protected]>
Unless you use lockdep, you can't say with 100% certainty if the CALLER is holding it or not. :-) But lockdep can actually check if that's the case with lockdep_is_held(&ttm->reservation_lock); which iterates over all locks held by the current task.
~Maarten
Updated version with a comment about return value in ttm_bo_is_reserved:
drm/ttm: Add ttm_bo_is_reserved function
drivers/gpu/drm/ttm/ttm_bo.c +6 -6
@@ -162,9 +162,9 @@ int ttm_bo_wait_unreserved(struct ttm_buffer_object *bo, bool interruptible) {if (interruptible) {return wait_event_interruptible (bo->event_queue, -atomic_read (&bo->reserved) ==0 ); + !ttm_bo_is_reserved (bo)); }else { -wait_event (bo->event_queue,atomic_read (&bo->reserved) ==0 ); +wait_event (bo->event_queue, !ttm_bo_is_reserved (bo));return 0 ; } }
@@ -175,7 +175,7 @@ void ttm_bo_add_to_lru(struct ttm_buffer_object *bo)struct ttm_bo_device *bdev = bo->bdev;struct ttm_mem_type_manager *man; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));if (!(bo->mem.placement &TTM_PL_FLAG_NO_EVICT )) {
@@ -756,7 +756,7 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, bool interruptible, goto out; } -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo)); evict_mem = bo->mem; evict_mem.mm_node =NULL ;
@@ -1063,7 +1063,7 @@ int ttm_bo_move_buffer(struct ttm_buffer_object *bo,struct ttm_mem_reg mem;struct ttm_bo_device *bdev = bo->bdev; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));/* * FIXME: It's possible to pipeline buffer moves.
@@ -1120,7 +1120,7 @@ int ttm_bo_validate(struct ttm_buffer_object *bo, {int ret; -BUG_ON (!atomic_read (&bo->reserved)); +BUG_ON (!ttm_bo_is_reserved (bo));/* Check that range is valid */ if (placement->lpfn || placement->fpfn) if (placement->fpfn > placement->lpfn ||
include/drm/ttm/ttm_bo_api.h +16 -0
@@ -737,4 +737,20 @@ extern ssize_t ttm_bo_io(struct ttm_bo_device *bdev, struct file *filp,extern void ttm_bo_swapout_all (struct ttm_bo_device *bdev); +/** +* ttm_bo_is_reserved - return an indication if a ttm buffer object is reserved +* +* @bo: The buffer object to check. +* +* This function returns an indication if a bo is reserved or not, and should +* only be used to print an error when it is not from incorrect api usage, since +* there's no guarantee that it is the caller that is holding the reservation. +* +* Returns true if reserved, false if unreserved. +*/ +static inline bool ttm_bo_is_reserved (struct ttm_buffer_object *bo) +{ +return atomic_read (&bo->reserved); +} +#endif