xref: /linux/drivers/gpu/drm/ttm/ttm_bo_internal.h (revision 8d2b0853add1d7534dc0794e3c8e0b9e8c4ec640)
1 /*
2  * Copyright 2018 Advanced Micro Devices, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  *
22  *
23  */
24 
25 #ifndef _TTM_BO_INTERNAL_H_
26 #define _TTM_BO_INTERNAL_H_
27 
28 #include <drm/ttm/ttm_bo.h>
29 
30 /**
31  * ttm_bo_get - reference a struct ttm_buffer_object
32  *
33  * @bo: The buffer object.
34  */
35 static inline void ttm_bo_get(struct ttm_buffer_object *bo)
36 {
37 	kref_get(&bo->kref);
38 }
39 
40 /**
41  * ttm_bo_get_unless_zero - reference a struct ttm_buffer_object unless
42  * its refcount has already reached zero.
43  * @bo: The buffer object.
44  *
45  * Used to reference a TTM buffer object in lookups where the object is removed
46  * from the lookup structure during the destructor and for RCU lookups.
47  *
48  * Returns: @bo if the referencing was successful, NULL otherwise.
49  */
50 static inline __must_check struct ttm_buffer_object *
51 ttm_bo_get_unless_zero(struct ttm_buffer_object *bo)
52 {
53 	if (!kref_get_unless_zero(&bo->kref))
54 		return NULL;
55 	return bo;
56 }
57 
58 #endif
59