diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-06-17 09:26:05 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-06-17 09:26:05 +0000 |
commit | 342af1372bb5971cc39d6ffade50d03c8c6648ec (patch) | |
tree | fc675fecd4df07c1067f5e67502502bb255244d7 /xen/arch/x86/extable.c | |
parent | 4c6d37d5a2856376f2b16e41f3992629754a2969 (diff) | |
download | xen-342af1372bb5971cc39d6ffade50d03c8c6648ec.tar.gz xen-342af1372bb5971cc39d6ffade50d03c8c6648ec.tar.bz2 xen-342af1372bb5971cc39d6ffade50d03c8c6648ec.zip |
bitkeeper revision 1.971.1.1 (40d163adsjmFburVM5p7loFTWzaluA)
More cleanups.
Diffstat (limited to 'xen/arch/x86/extable.c')
-rw-r--r-- | xen/arch/x86/extable.c | 57 |
1 files changed, 15 insertions, 42 deletions
diff --git a/xen/arch/x86/extable.c b/xen/arch/x86/extable.c index af37b86013..6dc4a2e634 100644 --- a/xen/arch/x86/extable.c +++ b/xen/arch/x86/extable.c @@ -1,9 +1,5 @@ -/* - * linux/arch/i386/mm/extable.c - */ #include <xen/config.h> -#include <xen/module.h> #include <xen/spinlock.h> #include <asm/uaccess.h> @@ -15,48 +11,25 @@ search_one_table(const struct exception_table_entry *first, const struct exception_table_entry *last, unsigned long value) { - while (first <= last) { - const struct exception_table_entry *mid; - long diff; + const struct exception_table_entry *mid; + long diff; - mid = (last - first) / 2 + first; - diff = mid->insn - value; - if (diff == 0) - return mid->fixup; - else if (diff < 0) - first = mid+1; - else - last = mid-1; - } - return 0; + while ( first <= last ) + { + mid = (last - first) / 2 + first; + diff = mid->insn - value; + if (diff == 0) + return mid->fixup; + else if (diff < 0) + first = mid+1; + else + last = mid-1; + } + return 0; } -extern spinlock_t modlist_lock; - unsigned long search_exception_table(unsigned long addr) { - unsigned long ret = 0; - -#ifndef CONFIG_MODULES - /* There is only the kernel to search. */ - ret = search_one_table(__start___ex_table, __stop___ex_table-1, addr); - return ret; -#else - unsigned long flags; - /* The kernel is the last "module" -- no need to treat it special. */ - struct module *mp; - - spin_lock_irqsave(&modlist_lock, flags); - for (mp = module_list; mp != NULL; mp = mp->next) { - if (mp->ex_table_start == NULL || !(mp->flags&(MOD_RUNNING|MOD_INITIALIZING))) - continue; - ret = search_one_table(mp->ex_table_start, - mp->ex_table_end - 1, addr); - if (ret) - break; - } - spin_unlock_irqrestore(&modlist_lock, flags); - return ret; -#endif + return search_one_table(__start___ex_table, __stop___ex_table-1, addr); } |