at v3.1 2.9 kB view raw
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 9struct pt_regs; 10 11struct task_struct; 12 13#include "asm/ptrace.h" 14#include "registers.h" 15#include "sysdep/archsetjmp.h" 16 17#include <linux/prefetch.h> 18 19struct mm_struct; 20 21struct 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 71extern struct task_struct *alloc_task_struct_node(int node); 72 73static inline void release_thread(struct task_struct *task) 74{ 75} 76 77extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); 78 79static inline void prepare_to_copy(struct task_struct *tsk) 80{ 81} 82 83 84extern unsigned long thread_saved_pc(struct task_struct *t); 85 86static 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 */ 96extern unsigned long task_size; 97 98#define TASK_SIZE (task_size) 99 100#undef STACK_TOP 101#undef STACK_TOP_MAX 102 103extern 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 114extern void start_thread(struct pt_regs *regs, unsigned long entry, 115 unsigned long stack); 116 117struct cpuinfo_um { 118 unsigned long loops_per_jiffy; 119 int ipi_pipe[2]; 120}; 121 122extern struct cpuinfo_um boot_cpu_data; 123 124#define my_cpu_data cpu_data[smp_processor_id()] 125 126#ifdef CONFIG_SMP 127extern 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) 136extern unsigned long get_wchan(struct task_struct *p); 137 138#endif