\newpage
%===========================================================================
%       x.17 > INCLUDE
%===========================================================================
\pagestyle{empty}
\begin{latexonly}
\hfill\line(1,0){400}
\end{latexonly}
\topmargin -1in
\section{\tt {./include/*}}
\begin{latexonly}
\line(1,0){400}
\begin{verbatim}
The include subdirectory contains most of the include files needed to
build the kernel code. It too has further subdirectories including one
for every architecture supported. The include/asm subdirectory is a
soft link to the real include directory needed for this architecture,
for example include/asm-i386. To change architectures you need to edit
the kernel makefile and rerun the Linux kernel configuration program. 
\end{verbatim}
{\scriptsize
\begin{verbatim}
patching file include/asm-generic/smplock.h
patching file include/asm-i386/a.out.h
patching file include/asm-i386/checksum.h
patching file include/asm-i386/cpufeature.h
patching file include/asm-i386/elf.h
patching file include/asm-i386/fcntl.h
patching file include/asm-i386/i387.h
patching file include/asm-i386/processor.h
patching file include/asm-i386/rwsem.h
patching file include/asm-i386/semaphore.h
patching file include/asm-i386/siginfo.h
patching file include/asm-i386/smplock.h
patching file include/asm-i386/spinlock.h
patching file include/asm-i386/stat.h
patching file include/asm-i386/uaccess.h
patching file include/hpc/balance.h
patching file include/hpc/comm.h
patching file include/hpc/debug.h
patching file include/hpc/defs.h
patching file include/hpc/dfsa.h
patching file include/hpc/dscosts.h
patching file include/hpc/hpcctl.h
patching file include/hpc/hpctask.h
patching file include/hpc/hpcversion.h
patching file include/hpc/mfscosts.h
patching file include/hpc/protocol.h
patching file include/hpc/request.h
patching file include/hpc/routines.h
patching file include/linux/binfmts.h
patching file include/linux/capability.h
patching file include/linux/completion.h
patching file include/linux/dcache.h
patching file include/linux/dfsa_interface.h
patching file include/linux/elf.h
patching file include/linux/errno.h
patching file include/linux/file.h
patching file include/linux/fs.h
patching file include/linux/fs_struct.h
patching file include/linux/hpcctl.h
patching file include/linux/hpc.h
patching file include/linux/iobuf.h
patching file include/linux/keyboard.h
patching file include/linux/linkage.h
patching file include/linux/mfs_fs_i.h
patching file include/linux/mfs.h
patching file include/linux/mfs_socket.h
patching file include/linux/mman.h
patching file include/linux/mm.h
patching file include/linux/mount.h
patching file include/linux/net.h
patching file include/linux/personality.h
patching file include/linux/pipe_fs_i.h
patching file include/linux/proc_fs.h
patching file include/linux/remote_fs_i.h
patching file include/linux/sched.h
patching file include/linux/smp_lock.h
patching file include/linux/spinlock.h
patching file include/linux/wait.h
patching file include/net/sock.h
\end{verbatim}
}
\newpage
\end{latexonly}
\topmargin 0in
\pagestyle{fancy}
%===========================================================================
\subsection{{\em hpc.h}}
\begin{verbatim}
#ifndef _LINUX_MOSIX_H
#define _LINUX_MOSIX_H

#ifdef CONFIG_MOSIX

#ifdef __KERNEL__

#include <linux/sched.h>
#include <linux/user.h>
#include <linux/elf.h>
#include <hpc/defs.h>
#include <hpc/request.h>

/* operations on DEPUTY's data-base of REMOTE files: */

extern int mosix_register_a_file(struct file *, int);
extern void mosix_undo_last_file_registration(struct file *, int);
extern int mosix_rebuild_file_list(void);
extern void mosix_update_remote_files(void);

struct vmalist
{
        unsigned int vmstart;
        unsigned int vmend;
        unsigned short vmflags;
        short   maydump;
};

struct vmamaps
{
        unsigned long vmstart, vmend, vmflags, vmpgoff;
        struct file *fp;
};

extern void init_mosix(void);
extern void wake_up_mosix(struct task_struct *);
extern int mosix_wakeable(struct task_struct *);
extern int mosix_go_home(int);
extern int mosix_go_home_for_reason(int, int);
extern int mosix_send_back_home(struct task_struct *);
extern int mosix_need_while_asleep(void);
extern void mosix_run_while_asleep(void);
extern void mosix_pre_usermode_functions(void);
extern int stay_me_and_my_clones(uint32_t);
extern void unstay_mm(struct mm_struct *);
extern void mosix_inform_remote_of_nice(void);
extern void mosix_snap_load(int);
extern void mosix_clear_statistics(void);
extern int mosix_fork_init_fields(struct task_struct *);
extern void mosix_fork_free_fields(struct task_struct *);
extern void mosix_exit(void);
extern void mosix_very_exit(void);
extern void mosix_obtain_registers(unsigned long);
extern void mosix_bring_monkey_users_back(struct inode *);
extern void mosix_no_longer_monkey(struct inode *);
extern void mosix_check_for_freedom_to_move(void);
extern int mosix_pre_clone(void);
extern void mosix_post_clone(void);
extern void mosix_remote_syscall_trace(void);
extern u64 mosix_remote_tsc(void);
extern int mosix_forkmigrate(void);
extern int mosix_deputy_fork(struct task_struct *, int, unsigned long);
extern void mosix_exit_mm(struct task_struct *);
extern void mosix_exec_mmap(struct mm_struct *);
extern void mosix_deputy_rusage(int);
extern int mosix_deputy_personality(unsigned long);
extern void mosix_deputy_count_args(char **, char**, int *, int *);
extern int mosix_deputy_bring_strings(struct linux_binprm *, char *, char **, char **);
extern int mosix_deputy_setup_args(int, unsigned long *);
extern int mosix_deputy_exec_mmap(char *);
extern int mosix_deputy_dump_thread(struct user *);
extern void mosix_deputy_init_aout_mm(struct exec *);
extern unsigned long mosix_deputy_elf_setup(char *, int, int, struct elfhdr *, unsigned long, unsigned long, unsigned long, int, int, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, struct elf_tables_extras *);
extern void mosix_deputy_fix_elf_aout_interp(unsigned, unsigned, unsigned);
extern int mosix_deputy_list_vmas(struct vmalist **, unsigned long *, unsigned long *);
extern long mosix_deputy_brk(unsigned long, unsigned long);

extern void mosix_notify_urgent(struct socket *);
extern void mosix_notify_receive(struct socket *);

extern void mosix_proc_init(void);
extern int mosix_proc_get_remote_array(char *, int, int);
extern int mosix_proc_get_node_array(char *, int, int);

extern void mosix_decay_exec(void);
extern void mosix_add_to_whereto(struct task_struct *, int);
extern void mosix_do_add_to_whereto(struct task_struct *, int);

struct sockaddr;
extern int reserved_mosix_address(struct sockaddr *);
extern void comm_report_violation(char *, struct sockaddr *);

void init_guest_user_struct(void);
extern int get_free_guest_slots(void);
extern int count_guests(void);
#ifdef CONFIG_MOSIX_FS
int mfs_client_statfs(int, mfs_handle_t, struct statfs *);
#endif /* CONFIG_MOSIX_FS */
/* argument of mosix_deputy_setup_args: */
#define SETUP_ARGS_PLAIN        0       
#define SETUP_ARGS_AS_AOUT      1
#define SETUP_ARGS_AS_ELF       2
#define SETUP_ARGS_NOTYET       3

extern int mosix_deputy_restore_sigcontext(struct sigcontext *, int *);
extern void mosix_deputy_setup_frame(unsigned long, struct k_sigaction *, siginfo_t, sigset_t *);
extern unsigned long mosix_deputy_mmap(struct file *, unsigned long, int, unsigned long, unsigned long, unsigned long, off_t, nopage_t);
extern int deputy_munmap(unsigned long, size_t);
extern int deputy_mprotect(unsigned long, size_t, unsigned long);
extern void mosix_deputy_rlimit(int, struct rlimit);
extern int mosix_deputy_dump_fpu(struct user_i387_struct *);
extern int mosix_sync_caps(kernel_cap_t);

#define ALL_REGISTERS   0x7fff  /* as many as in struct pt_regs */
#define BIT_OF_REGISTER(_which) \
        (1 << (((int)&(((struct pt_regs *)0)->_which)) / sizeof(int)))

/*
 * meaning of signals on REMOTE
 */

#define FATAL_SIGSEGV           SIGINT
#define REMOTE_FILE_RELEASED    SIGQUIT

/* other signals that can occur on REMOTE:
 * SIGKILL, SIGSEGV, SIGPROF, SIGVTALRM, SIGFPE, SIGBUS, SIGIOT, SIGILL,
 * SIGXCPU, SIGXFSZ, SIGPROF, SIGTRQAP, SIGPWR (a tricky one).
 * SIGTERM requires the process to migrate back.
 */

#define MOSIX_PRIORITY          (100)
#define MOSIX_ASLEEP_PRIORITY   (MOSIX_PRIORITY * 3 / 10)
#define MOSIX_DEPUTY_PRIORITY   (MOSIX_PRIORITY * 1 / 10)
#define MOSIX_RESPOND_PRIORITY  (MOSIX_PRIORITY * 6 / 10)

#define PROC_MOSIX_USE_START    1024    /* coordinate with proc/fs/base.c */

#if defined(CONFIG_MOSIX_DIAG) && defined(CONFIG_SMP)
#define KERNEL_LOCKED   do{if(current->lock_depth == -1)panic("not locked %d of " __FILE__, __LINE__);}while(0)
#define MOSIX_LOCKED    do{if(current->mosix.lock_depth == -1)panic("not locked %d of " __FILE__, __LINE__);}while(0)
#else
#define KERNEL_LOCKED   do {} while(0)
#define MOSIX_LOCKED    do {} while(0)
#endif /* CONFIG_MOSIX_DIAG */

#define mos_to_contact(m) ((struct socket *)((m)->contact))
#define mos_to_waitp(m) ((wait_queue_head_t *)(&(m)->wait_dist))
#define mos_to_regs(m)  ((struct pt_regs *)((m)->altregs))

struct proc_dir_entry;
extern struct proc_dir_entry *proc_mosix;
typedef ssize_t (proc_mosix_pid_writer)(struct file *, struct task_struct *, const char *, size_t);
extern proc_mosix_pid_writer proc_mosix_pid_set_migrate;
extern proc_mosix_pid_writer proc_mosix_pid_set_goto;
extern proc_mosix_pid_writer proc_mosix_pid_set_lock;
extern proc_mosix_pid_writer proc_mosix_pid_set_sigmig;
extern proc_mosix_pid_writer proc_mosix_pid_set_disclosure;
extern proc_mosix_pid_writer proc_mosix_pid_set_migfilter;
extern proc_mosix_pid_writer proc_mosix_pid_set_migpolicy;
extern proc_mosix_pid_writer proc_mosix_pid_set_mignodes;
extern proc_mosix_pid_writer proc_mosix_pid_set_miggroup;
#ifdef CONFIG_MOSIX_FS
extern proc_mosix_pid_writer proc_mosix_pid_set_selected;
#endif /* CONFIG_MOSIX_FS */

#ifdef CONFIG_MOSIX_UDB
extern void udbinit(void);
extern int udb_booting;
extern int nmi_debugger;
#endif /* CONFIG_MOSIX_UDB */

#endif /*__KERNEL__*/

#endif /* CONFIG_MOSIX */

#endif
\end{verbatim}