at v3.5 2.8 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 71static inline void release_thread(struct task_struct *task) 72{ 73} 74 75extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); 76 77extern unsigned long thread_saved_pc(struct task_struct *t); 78 79static inline void mm_copy_segments(struct mm_struct *from_mm, 80 struct mm_struct *new_mm) 81{ 82} 83 84#define init_stack (init_thread_union.stack) 85 86/* 87 * User space process size: 3GB (default). 88 */ 89extern unsigned long task_size; 90 91#define TASK_SIZE (task_size) 92 93#undef STACK_TOP 94#undef STACK_TOP_MAX 95 96extern unsigned long stacksizelim; 97 98#define STACK_ROOM (stacksizelim) 99#define STACK_TOP (TASK_SIZE - 2 * PAGE_SIZE) 100#define STACK_TOP_MAX STACK_TOP 101 102/* This decides where the kernel will search for a free chunk of vm 103 * space during mmap's. 104 */ 105#define TASK_UNMAPPED_BASE (0x40000000) 106 107extern void start_thread(struct pt_regs *regs, unsigned long entry, 108 unsigned long stack); 109 110struct cpuinfo_um { 111 unsigned long loops_per_jiffy; 112 int ipi_pipe[2]; 113}; 114 115extern struct cpuinfo_um boot_cpu_data; 116 117#define my_cpu_data cpu_data[smp_processor_id()] 118 119#ifdef CONFIG_SMP 120extern struct cpuinfo_um cpu_data[]; 121#define current_cpu_data cpu_data[smp_processor_id()] 122#else 123#define cpu_data (&boot_cpu_data) 124#define current_cpu_data boot_cpu_data 125#endif 126 127 128#define KSTK_REG(tsk, reg) get_thread_reg(reg, &tsk->thread.switch_buf) 129extern unsigned long get_wchan(struct task_struct *p); 130 131#endif