1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _LINUX_UNWIND_USER_DEFERRED_TYPES_H
3#define _LINUX_UNWIND_USER_DEFERRED_TYPES_H
4
5struct unwind_cache {
6 unsigned long unwind_completed;
7 unsigned int nr_entries;
8 unsigned long entries[];
9};
10
11/*
12 * The unwind_task_id is a unique identifier that maps to a user space
13 * stacktrace. It is generated the first time a deferred user space
14 * stacktrace is requested after a task has entered the kerenl and
15 * is cleared to zero when it exits. The mapped id will be a non-zero
16 * number.
17 *
18 * To simplify the generation of the 64 bit number, 32 bits will be
19 * the CPU it was generated on, and the other 32 bits will be a per
20 * cpu counter that gets incremented by two every time a new identifier
21 * is generated. The LSB will always be set to keep the value
22 * from being zero.
23 */
24union unwind_task_id {
25 struct {
26 u32 cpu;
27 u32 cnt;
28 };
29 u64 id;
30};
31
32struct unwind_task_info {
33 unsigned long unwind_mask;
34 struct unwind_cache *cache;
35 struct callback_head work;
36 union unwind_task_id id;
37};
38
39#endif /* _LINUX_UNWIND_USER_DEFERRED_TYPES_H */
40