hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
 */
 
#ifndef __UM_THREAD_INFO_H
#define __UM_THREAD_INFO_H
 
#define THREAD_SIZE_ORDER CONFIG_KERNEL_STACK_ORDER
#define THREAD_SIZE ((1 << CONFIG_KERNEL_STACK_ORDER) * PAGE_SIZE)
 
#ifndef __ASSEMBLY__
 
#include <asm/types.h>
#include <asm/page.h>
#include <asm/segment.h>
#include <sysdep/ptrace_user.h>
 
struct thread_info {
   struct task_struct    *task;        /* main task structure */
   unsigned long        flags;        /* low level flags */
   __u32            cpu;        /* current CPU */
   int            preempt_count;  /* 0 => preemptable,
                          <0 => BUG */
   mm_segment_t        addr_limit;    /* thread address space:
                           0-0xBFFFFFFF for user
                          0-0xFFFFFFFF for kernel */
   struct thread_info    *real_thread;    /* Points to non-IRQ stack */
   unsigned long aux_fp_regs[FP_SIZE];    /* auxiliary fp_regs to save/restore
                          them out-of-band */
};
 
#define INIT_THREAD_INFO(tsk)            \
{                        \
   .task =        &tsk,            \
   .flags =        0,        \
   .cpu =        0,            \
   .preempt_count = INIT_PREEMPT_COUNT,    \
   .addr_limit =    KERNEL_DS,        \
   .real_thread = NULL,            \
}
 
/* how to get the thread information struct from C */
static inline struct thread_info *current_thread_info(void)
{
   struct thread_info *ti;
   unsigned long mask = THREAD_SIZE - 1;
   void *p;
 
   asm volatile ("" : "=r" (p) : "0" (&ti));
   ti = (struct thread_info *) (((unsigned long)p) & ~mask);
   return ti;
}
 
#endif
 
#define TIF_SYSCALL_TRACE    0    /* syscall trace active */
#define TIF_SIGPENDING        1    /* signal pending */
#define TIF_NEED_RESCHED    2    /* rescheduling necessary */
#define TIF_NOTIFY_SIGNAL    3    /* signal notifications exist */
#define TIF_RESTART_BLOCK    4
#define TIF_MEMDIE        5    /* is terminating due to OOM killer */
#define TIF_SYSCALL_AUDIT    6
#define TIF_RESTORE_SIGMASK    7
#define TIF_NOTIFY_RESUME    8
#define TIF_SECCOMP        9    /* secure computing */
#define TIF_SINGLESTEP        10    /* single stepping userspace */
 
#define _TIF_SYSCALL_TRACE    (1 << TIF_SYSCALL_TRACE)
#define _TIF_SIGPENDING        (1 << TIF_SIGPENDING)
#define _TIF_NEED_RESCHED    (1 << TIF_NEED_RESCHED)
#define _TIF_NOTIFY_SIGNAL    (1 << TIF_NOTIFY_SIGNAL)
#define _TIF_MEMDIE        (1 << TIF_MEMDIE)
#define _TIF_SYSCALL_AUDIT    (1 << TIF_SYSCALL_AUDIT)
#define _TIF_SECCOMP        (1 << TIF_SECCOMP)
#define _TIF_SINGLESTEP        (1 << TIF_SINGLESTEP)
 
#endif