Messages in this thread Patch in this message | | | Date | Mon, 13 Jan 2003 13:49:42 +1000 | From | Greg Ungerer <> | Subject | Re: exception tables in 2.5.55 |
| |
Hi Linus,
Linus Torvalds wrote: > On Mon, 13 Jan 2003, Greg Ungerer wrote: > >>Tested and working on m68knommu architecture. > > > Why does exceptions have anything to do with no-mmu? > > There are exceptions that have nothing to do with MMU's, and a no-mmu > architecture should still support them. On x86, we have a number of such > exceptions, for example general protection stuff for wrong values for > special registers etc. > > In other words, not applied.
Good thing I was only after comments then :-)
> Page table exceptions are just the most > _common_ exception type, but there's absolutely nothing in the mechanism > that has anything at all to do with MMU-less. > > If some archtiecture happens to have an empty exception table, that's > fine.
OK, heres an alternative patch that fully supports exception tables for m68knommu (Miles you'll need to do the same for v850).
This is tested on my ColdFire targets...
Regards Greg
diff -Naur linux-2.5.56/arch/m68knommu/mm/Makefile linux-2.5.56-uc0/arch/m68knommu/mm/Makefile --- linux-2.5.56/arch/m68knommu/mm/Makefile Sat Jan 11 06:12:25 2003 +++ linux-2.5.56-uc0/arch/m68knommu/mm/Makefile Mon Jan 13 13:43:22 2003 @@ -2,4 +2,4 @@ # Makefile for the linux m68knommu specific parts of the memory manager. #
-obj-y += init.o fault.o memory.o kmap.o +obj-y += init.o fault.o memory.o kmap.o extable.o diff -Naur linux-2.5.56/arch/m68knommu/mm/extable.c linux-2.5.56-uc0/arch/m68knommu/mm/extable.c --- linux-2.5.56/arch/m68knommu/mm/extable.c Thu Jan 1 10:00:00 1970 +++ linux-2.5.56-uc0/arch/m68knommu/mm/extable.c Mon Jan 13 13:43:08 2003@@ -0,0 +1,30 @@ +/* + * linux/arch/m68knommu/mm/extable.c + */ + +#include <linux/config.h> +#include <linux/module.h> +#include <linux/spinlock.h> +#include <asm/uaccess.h> + +/* Simple binary search */ +const struct exception_table_entry * +search_extable(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; + + mid = (last - first) / 2 + first; + diff = mid->insn - value; + if (diff == 0) + return mid; + else if (diff < 0) + first = mid+1; + else + last = mid-1; + } + return NULL; +} ------------------------------------------------------------------------ Greg Ungerer -- Chief Software Wizard EMAIL: gerg@snapgear.com SnapGear Pty Ltd PHONE: +61 7 3435 2888 825 Stanley St, FAX: +61 7 3891 3630 Woolloongabba, QLD, 4102, Australia WEB: www.SnapGear.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |