[PATCH] UML: add generic BUG support
authorJeff Dike <jdike@addtoit.com>
Fri, 8 Dec 2006 10:36:23 +0000 (02:36 -0800)
committerLinus Torvalds <torvalds@woody.osdl.org>
Fri, 8 Dec 2006 16:28:39 +0000 (08:28 -0800)
The BUG changes in -mm3 need some arch support.  This patch adds the UML
support needed.  For the most part, it was stolen from the underlying
architecture.  The exception is the kernel eip < PAGE_OFFSET test, which is
wrong for skas mode UMLs.

Signed-off-by: Jeff Dike <jdike@addtoit.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/um/Kconfig
arch/um/sys-i386/Makefile
arch/um/sys-i386/bug.c [new file with mode: 0644]
arch/um/sys-x86_64/Makefile
arch/um/sys-x86_64/bug.c [new file with mode: 0644]
include/asm-um/bug.h

index 5ac1f2963ae383e391cb601c730ed645e0707b6a..d32a80e6668c08c008714d8c0ef1f26ce6a4645b 100644 (file)
@@ -47,6 +47,11 @@ config GENERIC_CALIBRATE_DELAY
        bool
        default y
 
+config GENERIC_BUG
+       bool
+       default y
+       depends on BUG
+
 # Used in kernel/irq/manage.c and include/linux/irq.h
 config IRQ_RELEASE_METHOD
        bool
index 0e32adf03be1940a0cace32c2e4842d3eef7a78a..098720be019a09d25fba077207a5e80ad3da3ab6 100644 (file)
@@ -1,4 +1,4 @@
-obj-y = bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \
+obj-y = bug.o bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \
        ptrace_user.o setjmp.o signal.o sigcontext.o syscalls.o sysrq.o \
        sys_call_table.o tls.o
 
diff --git a/arch/um/sys-i386/bug.c b/arch/um/sys-i386/bug.c
new file mode 100644 (file)
index 0000000..200c8ba
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2006 Jeff Dike (jdike@addtoit.com)
+ * Licensed under the GPL V2
+ */
+
+#include <linux/uaccess.h>
+
+/* Mostly copied from i386/x86_86 - eliminated the eip < PAGE_OFFSET because
+ * that's not relevent in skas mode.
+ */
+
+int is_valid_bugaddr(unsigned long eip)
+{
+       unsigned short ud2;
+
+       if (probe_kernel_address((unsigned short __user *)eip, ud2))
+               return 0;
+
+       return ud2 == 0x0b0f;
+}
index f41768b8e25eb25978093f8481e294dadbc1c8f4..4d9e5efa6fb900025c9319f7a12a91825ba7417d 100644 (file)
@@ -4,7 +4,7 @@
 # Licensed under the GPL
 #
 
-obj-y = bugs.o delay.o fault.o ldt.o mem.o ptrace.o ptrace_user.o \
+obj-y = bug.o bugs.o delay.o fault.o ldt.o mem.o ptrace.o ptrace_user.o \
        setjmp.o sigcontext.o signal.o syscalls.o syscall_table.o sysrq.o \
        ksyms.o tls.o
 
diff --git a/arch/um/sys-x86_64/bug.c b/arch/um/sys-x86_64/bug.c
new file mode 100644 (file)
index 0000000..200c8ba
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2006 Jeff Dike (jdike@addtoit.com)
+ * Licensed under the GPL V2
+ */
+
+#include <linux/uaccess.h>
+
+/* Mostly copied from i386/x86_86 - eliminated the eip < PAGE_OFFSET because
+ * that's not relevent in skas mode.
+ */
+
+int is_valid_bugaddr(unsigned long eip)
+{
+       unsigned short ud2;
+
+       if (probe_kernel_address((unsigned short __user *)eip, ud2))
+               return 0;
+
+       return ud2 == 0x0b0f;
+}
index 1e22fa26ff061cb1c3ccb9c9395154d66062d908..3357c5e2468e7868b14cc8c7efe63494afaa3f6b 100644 (file)
@@ -1,4 +1,6 @@
 #ifndef __UM_BUG_H
 #define __UM_BUG_H
-#include <asm-generic/bug.h>
+
+#include <asm/arch/bug.h>
+
 #endif