1 /*-
2 * Copyright (c) 2025 The FreeBSD Foundation
3 * Copyright (c) 2025 Jean-Sébastien Pédron
4 *
5 * This software was developed by Jean-Sébastien Pédron under sponsorship
6 * from the FreeBSD Foundation.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30 #ifndef _LINUXKPI_LINUX_REF_TRACKER_H_
31 #define _LINUXKPI_LINUX_REF_TRACKER_H_
32
33 #include <linux/refcount.h>
34 #include <linux/types.h>
35 #include <linux/spinlock.h>
36 #include <linux/stackdepot.h>
37
38 struct ref_tracker;
39
40 struct ref_tracker_dir {
41 };
42
43 /*
44 * The following functions currently have dummy implementations that, on Linux,
45 * are used when CONFIG_REF_TRACKER is not set at compile time.
46 *
47 * The ref tracker is a tool to associate a refcount increase to a refcount
48 * decrease. This helps developers track, document and debug refcounts. We
49 * don't need this feature for now in linuxkpi.
50 */
51
52 static inline void
ref_tracker_dir_init(struct ref_tracker_dir * dir,unsigned int quarantine_count,const char * name)53 ref_tracker_dir_init(struct ref_tracker_dir *dir,
54 unsigned int quarantine_count, const char *name)
55 {
56 }
57
58 static inline void
ref_tracker_dir_exit(struct ref_tracker_dir * dir)59 ref_tracker_dir_exit(struct ref_tracker_dir *dir)
60 {
61 }
62
63 static inline void
ref_tracker_dir_print_locked(struct ref_tracker_dir * dir,unsigned int display_limit)64 ref_tracker_dir_print_locked(struct ref_tracker_dir *dir,
65 unsigned int display_limit)
66 {
67 }
68
69 static inline void
ref_tracker_dir_print(struct ref_tracker_dir * dir,unsigned int display_limit)70 ref_tracker_dir_print(struct ref_tracker_dir *dir, unsigned int display_limit)
71 {
72 }
73
74 static inline int
ref_tracker_dir_snprint(struct ref_tracker_dir * dir,char * buf,size_t size)75 ref_tracker_dir_snprint(struct ref_tracker_dir *dir, char *buf, size_t size)
76 {
77 return (0);
78 }
79
80 static inline int
ref_tracker_alloc(struct ref_tracker_dir * dir,struct ref_tracker ** trackerp,gfp_t gfp)81 ref_tracker_alloc(struct ref_tracker_dir *dir, struct ref_tracker **trackerp,
82 gfp_t gfp)
83 {
84 return (0);
85 }
86
87 static inline int
ref_tracker_free(struct ref_tracker_dir * dir,struct ref_tracker ** trackerp)88 ref_tracker_free(struct ref_tracker_dir *dir, struct ref_tracker **trackerp)
89 {
90 return (0);
91 }
92
93 #endif /* !defined(_LINUXKPI_LINUX_REF_TRACKER_H_) */
94