Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/um/include/asm/processor-generic.h
10820 views
1
/*
2
* Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
3
* Licensed under the GPL
4
*/
5
6
#ifndef __UM_PROCESSOR_GENERIC_H
7
#define __UM_PROCESSOR_GENERIC_H
8
9
struct pt_regs;
10
11
struct task_struct;
12
13
#include "asm/ptrace.h"
14
#include "registers.h"
15
#include "sysdep/archsetjmp.h"
16
17
#include <linux/prefetch.h>
18
19
struct mm_struct;
20
21
struct thread_struct {
22
struct task_struct *saved_task;
23
/*
24
* This flag is set to 1 before calling do_fork (and analyzed in
25
* copy_thread) to mark that we are begin called from userspace (fork /
26
* vfork / clone), and reset to 0 after. It is left to 0 when called
27
* from kernelspace (i.e. kernel_thread() or fork_idle(),
28
* as of 2.6.11).
29
*/
30
int forking;
31
struct pt_regs regs;
32
int singlestep_syscall;
33
void *fault_addr;
34
jmp_buf *fault_catcher;
35
struct task_struct *prev_sched;
36
unsigned long temp_stack;
37
jmp_buf *exec_buf;
38
struct arch_thread arch;
39
jmp_buf switch_buf;
40
int mm_count;
41
struct {
42
int op;
43
union {
44
struct {
45
int pid;
46
} fork, exec;
47
struct {
48
int (*proc)(void *);
49
void *arg;
50
} thread;
51
struct {
52
void (*proc)(void *);
53
void *arg;
54
} cb;
55
} u;
56
} request;
57
};
58
59
#define INIT_THREAD \
60
{ \
61
.forking = 0, \
62
.regs = EMPTY_REGS, \
63
.fault_addr = NULL, \
64
.prev_sched = NULL, \
65
.temp_stack = 0, \
66
.exec_buf = NULL, \
67
.arch = INIT_ARCH_THREAD, \
68
.request = { 0 } \
69
}
70
71
extern struct task_struct *alloc_task_struct_node(int node);
72
73
static inline void release_thread(struct task_struct *task)
74
{
75
}
76
77
extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
78
79
static inline void prepare_to_copy(struct task_struct *tsk)
80
{
81
}
82
83
84
extern unsigned long thread_saved_pc(struct task_struct *t);
85
86
static inline void mm_copy_segments(struct mm_struct *from_mm,
87
struct mm_struct *new_mm)
88
{
89
}
90
91
#define init_stack (init_thread_union.stack)
92
93
/*
94
* User space process size: 3GB (default).
95
*/
96
extern unsigned long task_size;
97
98
#define TASK_SIZE (task_size)
99
100
#undef STACK_TOP
101
#undef STACK_TOP_MAX
102
103
extern unsigned long stacksizelim;
104
105
#define STACK_ROOM (stacksizelim)
106
#define STACK_TOP (TASK_SIZE - 2 * PAGE_SIZE)
107
#define STACK_TOP_MAX STACK_TOP
108
109
/* This decides where the kernel will search for a free chunk of vm
110
* space during mmap's.
111
*/
112
#define TASK_UNMAPPED_BASE (0x40000000)
113
114
extern void start_thread(struct pt_regs *regs, unsigned long entry,
115
unsigned long stack);
116
117
struct cpuinfo_um {
118
unsigned long loops_per_jiffy;
119
int ipi_pipe[2];
120
};
121
122
extern struct cpuinfo_um boot_cpu_data;
123
124
#define my_cpu_data cpu_data[smp_processor_id()]
125
126
#ifdef CONFIG_SMP
127
extern struct cpuinfo_um cpu_data[];
128
#define current_cpu_data cpu_data[smp_processor_id()]
129
#else
130
#define cpu_data (&boot_cpu_data)
131
#define current_cpu_data boot_cpu_data
132
#endif
133
134
135
#define KSTK_REG(tsk, reg) get_thread_reg(reg, &tsk->thread.switch_buf)
136
extern unsigned long get_wchan(struct task_struct *p);
137
138
#endif
139
140