aboutsummaryrefslogtreecommitdiffstats
path: root/include/nvgpu/kref.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/nvgpu/kref.h')
-rw-r--r--include/nvgpu/kref.h87
1 files changed, 0 insertions, 87 deletions
diff --git a/include/nvgpu/kref.h b/include/nvgpu/kref.h
deleted file mode 100644
index 486040e..0000000
--- a/include/nvgpu/kref.h
+++ /dev/null
@@ -1,87 +0,0 @@
1/*
2 * Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved.
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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21 */
22
23/*
24 * The following structure is used for reference counting of objects in nvgpu.
25 */
26#ifndef NVGPU_KREF_H
27#define NVGPU_KREF_H
28
29#include <nvgpu/atomic.h>
30
31struct nvgpu_ref {
32 nvgpu_atomic_t refcount;
33};
34
35/*
36 * Initialize object.
37 * @ref: the nvgpu_ref object to initialize
38 */
39static inline void nvgpu_ref_init(struct nvgpu_ref *ref)
40{
41 nvgpu_atomic_set(&ref->refcount, 1);
42}
43
44/*
45 * Increment reference count for the object
46 * @ref: the nvgpu_ref object
47 */
48static inline void nvgpu_ref_get(struct nvgpu_ref *ref)
49{
50 nvgpu_atomic_inc(&ref->refcount);
51}
52
53/*
54 * Decrement reference count for the object and call release() if it becomes
55 * zero.
56 * @ref: the nvgpu_ref object
57 * @release: pointer to the function that would be invoked to clean up the
58 * object when the reference count becomes zero, i.e. the last
59 * reference corresponding to this object is removed.
60 * Return 1 if object was removed, otherwise return 0. The user should not
61 * make any assumptions about the status of the object in the memory when
62 * the function returns 0 and should only use it to know that there are no
63 * further references to this object.
64 */
65static inline int nvgpu_ref_put(struct nvgpu_ref *ref,
66 void (*release)(struct nvgpu_ref *r))
67{
68 if (nvgpu_atomic_sub_and_test(1, &ref->refcount)) {
69 if (release != NULL) {
70 release(ref);
71 }
72 return 1;
73 }
74 return 0;
75}
76
77/*
78 * Increment reference count for the object unless it is zero.
79 * @ref: the nvgpu_ref object
80 * Return non-zero if the increment succeeds, Otherwise return 0.
81 */
82static inline int __must_check nvgpu_ref_get_unless_zero(struct nvgpu_ref *ref)
83{
84 return nvgpu_atomic_add_unless(&ref->refcount, 1, 0);
85}
86
87#endif /* NVGPU_KREF_H */