blob: 7eaad857dee04f2adeeeb5ddddff0ea430b26e37 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Chunyan Zhang478409d2016-11-21 15:57:18 +08002#ifndef _LINUX_TRACE_H
3#define _LINUX_TRACE_H
4
Tingwei Zhang8438f522020-10-05 10:13:13 +03005#define TRACE_EXPORT_FUNCTION BIT(0)
Tingwei Zhang8ab7a2b2020-10-05 10:13:14 +03006#define TRACE_EXPORT_EVENT BIT(1)
Tingwei Zhang458999c2020-10-05 10:13:15 +03007#define TRACE_EXPORT_MARKER BIT(2)
Tingwei Zhang8438f522020-10-05 10:13:13 +03008
Chunyan Zhang478409d2016-11-21 15:57:18 +08009/*
10 * The trace export - an export of Ftrace output. The trace_export
11 * can process traces and export them to a registered destination as
12 * an addition to the current only output of Ftrace - i.e. ring buffer.
13 *
14 * If you want traces to be sent to some other place rather than ring
15 * buffer only, just need to register a new trace_export and implement
16 * its own .write() function for writing traces to the storage.
17 *
18 * next - pointer to the next trace_export
19 * write - copy traces which have been delt with ->commit() to
20 * the destination
Tingwei Zhang8438f522020-10-05 10:13:13 +030021 * flags - which ftrace to be exported
Chunyan Zhang478409d2016-11-21 15:57:18 +080022 */
23struct trace_export {
24 struct trace_export __rcu *next;
Felipe Balbia773d412017-06-02 13:20:25 +030025 void (*write)(struct trace_export *, const void *, unsigned int);
Tingwei Zhang8438f522020-10-05 10:13:13 +030026 int flags;
Chunyan Zhang478409d2016-11-21 15:57:18 +080027};
28
Aashish Sharmabedf06832022-11-07 21:35:56 +053029struct trace_array;
30
Arun Easi1a77dd12022-09-07 16:33:08 -070031#ifdef CONFIG_TRACING
32
Chunyan Zhang478409d2016-11-21 15:57:18 +080033int register_ftrace_export(struct trace_export *export);
34int unregister_ftrace_export(struct trace_export *export);
35
Steven Rostedt (Google)d503b8f2023-02-07 12:28:52 -050036/**
37 * trace_array_puts - write a constant string into the trace buffer.
38 * @tr: The trace array to write to
39 * @str: The constant string to write
40 */
41#define trace_array_puts(tr, str) \
42 ({ \
43 str ? __trace_array_puts(tr, _THIS_IP_, str, strlen(str)) : -1; \
44 })
45int __trace_array_puts(struct trace_array *tr, unsigned long ip,
46 const char *str, int size);
47
Divya Indi2d6425a2019-08-14 10:55:23 -070048void trace_printk_init_buffers(void);
Tom Rixbd0c9702020-12-21 08:27:15 -080049__printf(3, 4)
Divya Indi2d6425a2019-08-14 10:55:23 -070050int trace_array_printk(struct trace_array *tr, unsigned long ip,
Tom Rixbd0c9702020-12-21 08:27:15 -080051 const char *fmt, ...);
Steven Rostedt (VMware)38ce2a92020-08-06 12:46:49 -040052int trace_array_init_printk(struct trace_array *tr);
Divya Indi28879782019-11-20 11:08:38 -080053void trace_array_put(struct trace_array *tr);
Steven Rostedt (Google)f568fbe2023-12-13 09:37:01 -050054struct trace_array *trace_array_get_by_name(const char *name, const char *systems);
Divya Indi2d6425a2019-08-14 10:55:23 -070055int trace_array_destroy(struct trace_array *tr);
Daniel Bristot de Oliveirabce29ac2021-06-22 16:42:27 +020056
57/* For osnoise tracer */
58int osnoise_arch_register(void);
59void osnoise_arch_unregister(void);
Daniel Bristot de Oliveiraf7d9f632021-06-28 11:45:47 +020060void osnoise_trace_irq_entry(int id);
61void osnoise_trace_irq_exit(int id, const char *desc);
Daniel Bristot de Oliveirabce29ac2021-06-22 16:42:27 +020062
Arun Easi1a77dd12022-09-07 16:33:08 -070063#else /* CONFIG_TRACING */
64static inline int register_ftrace_export(struct trace_export *export)
65{
66 return -EINVAL;
67}
68static inline int unregister_ftrace_export(struct trace_export *export)
69{
70 return 0;
71}
72static inline void trace_printk_init_buffers(void)
73{
74}
Andy Shevchenkoc1ab9f02025-03-21 16:40:49 +020075static inline __printf(3, 4)
76int trace_array_printk(struct trace_array *tr, unsigned long ip, const char *fmt, ...)
Arun Easi1a77dd12022-09-07 16:33:08 -070077{
78 return 0;
79}
80static inline int trace_array_init_printk(struct trace_array *tr)
81{
82 return -EINVAL;
83}
84static inline void trace_array_put(struct trace_array *tr)
85{
86}
Steven Rostedt (Google)f568fbe2023-12-13 09:37:01 -050087static inline struct trace_array *trace_array_get_by_name(const char *name, const char *systems)
Arun Easi1a77dd12022-09-07 16:33:08 -070088{
89 return NULL;
90}
91static inline int trace_array_destroy(struct trace_array *tr)
92{
93 return 0;
94}
Chunyan Zhang478409d2016-11-21 15:57:18 +080095#endif /* CONFIG_TRACING */
96
97#endif /* _LINUX_TRACE_H */