linux/arch/um/include/asm/processor-generic.h
<<
>>
Prefs
   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
 139