fix: scsi: core: Remove <scsi/scsi_request.h> (v5.18)
[lttng-modules.git] / include / wrapper / genhd.h
1 /* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
2 *
3 * wrapper/genhd.h
4 *
5 * wrapper around block layer functions and data structures. Using
6 * KALLSYMS to get its address when available, else we need to have a
7 * kernel that exports this function to GPL modules.
8 *
9 * Copyright (C) 2011-2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 */
11
12 #ifndef _LTTNG_WRAPPER_GENHD_H
13 #define _LTTNG_WRAPPER_GENHD_H
14
15 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,18,0))
16 #include <linux/blkdev.h>
17 #else
18 #include <linux/genhd.h>
19 #endif
20
21 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,17,0))
22 #define LTTNG_GENHD_FL_HIDDEN GENHD_FL_HIDDEN
23 #else
24 #define LTTNG_GENHD_FL_HIDDEN GENHD_FL_SUPPRESS_PARTITION_INFO
25 #endif
26
27 #ifdef CONFIG_KALLSYMS_ALL
28
29 #include <linux/kallsyms.h>
30 #include <wrapper/kallsyms.h>
31
32 static inline
33 struct class *wrapper_get_block_class(void)
34 {
35 struct class *ptr_block_class;
36
37 ptr_block_class = (struct class *) kallsyms_lookup_dataptr("block_class");
38 if (!ptr_block_class) {
39 printk_once(KERN_WARNING "LTTng: block_class symbol lookup failed.\n");
40 return NULL;
41 }
42 return ptr_block_class;
43 }
44
45 /*
46 * Canary function to check for 'block_class' at compile time.
47 *
48 * From 'include/linux/genhd.h':
49 *
50 * extern struct class block_class;
51 */
52 static inline
53 struct class *__canary__get_block_class(void)
54 {
55 return &block_class;
56 }
57
58 static inline
59 struct device_type *wrapper_get_disk_type(void)
60 {
61 struct device_type *ptr_disk_type;
62
63 ptr_disk_type = (struct device_type *) kallsyms_lookup_dataptr("disk_type");
64 if (!ptr_disk_type) {
65 printk_once(KERN_WARNING "LTTng: disk_type symbol lookup failed.\n");
66 return NULL;
67 }
68 return ptr_disk_type;
69 }
70
71 /*
72 * No canary for 'disk_type', it's only defined in 'block/genhd.c'.
73 *
74 * static inline
75 * struct device_type *__canary__get_disk_type(void)
76 * {
77 * return &disk_type;
78 * }
79 */
80
81 #else
82
83 static inline
84 struct class *wrapper_get_block_class(void)
85 {
86 /*
87 * Symbol block_class is not exported.
88 * TODO: return &block_class;
89 */
90 /* Feature currently unavailable without KALLSYMS_ALL */
91 return NULL;
92 }
93
94 static inline
95 struct device_type *wrapper_get_disk_type(void)
96 {
97 /*
98 * Symbol disk_type is not exported.
99 * TODO: return &disk_type;
100 */
101 /* Feature currently unavailable without KALLSYMS_ALL */
102 return NULL;
103 }
104
105 #endif
106
107 #endif /* _LTTNG_WRAPPER_GENHD_H */
This page took 0.030326 seconds and 4 git commands to generate.