diff options
-rw-r--r-- | i386/i386/locore.h | 34 | ||||
-rw-r--r-- | i386/i386/trap.c | 21 |
2 files changed, 27 insertions, 28 deletions
diff --git a/i386/i386/locore.h b/i386/i386/locore.h index b649726..bfd1317 100644 --- a/i386/i386/locore.h +++ b/i386/i386/locore.h @@ -1,6 +1,5 @@ /* - * Header file for printf type functions. - * Copyright (C) 2006 Free Software Foundation. + * Copyright (C) 2006, 2011 Free Software Foundation. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,18 +23,37 @@ #include <kern/sched_prim.h> -extern int copyin (const void *userbuf, void *kernelbuf, size_t cn); +/* + * Fault recovery in copyin/copyout routines. + */ +struct recovery { + int fault_addr; + int recover_addr; +}; -extern int copyinmsg (const void *userbuf, void *kernelbuf, size_t cn); +extern struct recovery recover_table[]; +extern struct recovery recover_table_end[]; -extern int copyout (const void *kernelbuf, void *userbuf, size_t cn); +/* + * Recovery from Successful fault in copyout does not + * return directly - it retries the pte check, since + * the 386 ignores write protection in kernel mode. + */ +extern struct recovery retry_table[]; +extern struct recovery retry_table_end[]; + + +extern int call_continuation (continuation_t continuation); +extern int discover_x86_cpu_type (void); + +extern int copyin (const void *userbuf, void *kernelbuf, size_t cn); +extern int copyinmsg (const void *userbuf, void *kernelbuf, size_t cn); +extern int copyout (const void *kernelbuf, void *userbuf, size_t cn); extern int copyoutmsg (const void *kernelbuf, void *userbuf, size_t cn); extern int inst_fetch (int eip, int cs); -extern int call_continuation (continuation_t continuation); - extern void cpu_shutdown (void); extern unsigned int cpu_features[1]; @@ -72,7 +90,5 @@ extern unsigned int cpu_features[1]; #define CPU_HAS_FEATURE(feature) (cpu_features[(feature) / 32] & (1 << ((feature) % 32))) -extern int discover_x86_cpu_type (void); - #endif /* _MACHINE__LOCORE_H_ */ diff --git a/i386/i386/trap.c b/i386/i386/trap.c index 90d4c31..01c83f5 100644 --- a/i386/i386/trap.c +++ b/i386/i386/trap.c @@ -123,25 +123,6 @@ user_page_fault_continue(kr) /*NOTREACHED*/ } -/* - * Fault recovery in copyin/copyout routines. - */ -struct recovery { - int fault_addr; - int recover_addr; -}; - -extern struct recovery recover_table[]; -extern struct recovery recover_table_end[]; - -/* - * Recovery from Successful fault in copyout does not - * return directly - it retries the pte check, since - * the 386 ignores write protection in kernel mode. - */ -extern struct recovery retry_table[]; -extern struct recovery retry_table_end[]; - static char *trap_type[] = { "Divide error", @@ -296,6 +277,7 @@ dump_ss(regs); */ register struct recovery *rp; + /* Linear searching; but the list is small enough. */ for (rp = retry_table; rp < retry_table_end; rp++) { if (regs->eip == rp->fault_addr) { regs->eip = rp->recover_addr; @@ -312,6 +294,7 @@ dump_ss(regs); { register struct recovery *rp; + /* Linear searching; but the list is small enough. */ for (rp = recover_table; rp < recover_table_end; rp++) { |