aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/extable.c
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-06-17 09:26:05 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-06-17 09:26:05 +0000
commit342af1372bb5971cc39d6ffade50d03c8c6648ec (patch)
treefc675fecd4df07c1067f5e67502502bb255244d7 /xen/arch/x86/extable.c
parent4c6d37d5a2856376f2b16e41f3992629754a2969 (diff)
downloadxen-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.c57
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);
}