Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fab95c55e3b94e219044dc7a558632d08c198771
Commit:     fab95c55e3b94e219044dc7a558632d08c198771
Parent:     0a7675aa204ac2470bb06f562557978b03914a71
Author:     Jeff Dike <[EMAIL PROTECTED]>
AuthorDate: Tue Oct 16 01:27:05 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Oct 16 09:43:05 2007 -0700

    uml: get rid of do_longjmp
    
    do_longjmp used to be needed when UML didn't have its own implementation of
    setjmp and longjmp.  They came from libc, and couldn't be called directly 
from
    kernel code, as the libc jmp_buf couldn't be imported there.  do_longjmp 
was a
    userspace function which served to provide longjmp access to kernel code.
    
    This is gone, and a number of void * pointers can now be jmp_buf *.
    
    Signed-off-by: Jeff Dike <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 arch/um/include/os.h               |    5 ++---
 arch/um/include/um_uaccess.h       |    4 ++++
 arch/um/include/uml_uaccess.h      |   24 ------------------------
 arch/um/kernel/exec.c              |    2 +-
 arch/um/kernel/mem.c               |    2 +-
 arch/um/kernel/trap.c              |    6 +++---
 arch/um/kernel/uaccess.c           |    2 +-
 arch/um/os-Linux/process.c         |    2 +-
 arch/um/os-Linux/trap.c            |    7 -------
 arch/um/os-Linux/uaccess.c         |    2 +-
 include/asm-um/processor-generic.h |    4 ++--
 11 files changed, 16 insertions(+), 44 deletions(-)

diff --git a/arch/um/include/os.h b/arch/um/include/os.h
index 96f333c..c704851 100644
--- a/arch/um/include/os.h
+++ b/arch/um/include/os.h
@@ -193,7 +193,7 @@ extern int os_getpid(void);
 extern int os_getpgrp(void);
 
 extern void init_new_thread_signals(void);
-extern int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr);
+extern int run_kernel_thread(int (*fn)(void *), void *arg, jmp_buf **jmp_ptr);
 
 extern int os_map_memory(void *virt, int fd, unsigned long long off,
                         unsigned long len, int r, int w, int x);
@@ -206,7 +206,7 @@ extern void os_flush_stdout(void);
 
 /* uaccess.c */
 extern unsigned long __do_user_copy(void *to, const void *from, int n,
-                                   void **fault_addr, void **fault_catcher,
+                                   void **fault_addr, jmp_buf **fault_catcher,
                                    void (*op)(void *to, const void *from,
                                               int n), int *faulted_out);
 
@@ -240,7 +240,6 @@ extern int set_signals(int enable);
 
 /* trap.c */
 extern void os_fill_handlinfo(struct kern_handlers h);
-extern void do_longjmp(void *p, int val);
 
 /* util.c */
 extern void stack_protections(unsigned long address);
diff --git a/arch/um/include/um_uaccess.h b/arch/um/include/um_uaccess.h
index 5ef311a..fdfc06b 100644
--- a/arch/um/include/um_uaccess.h
+++ b/arch/um/include/um_uaccess.h
@@ -30,6 +30,10 @@
 extern int copy_from_user(void *to, const void __user *from, int n);
 extern int copy_to_user(void __user *to, const void *from, int n);
 
+extern int __do_copy_to_user(void *to, const void *from, int n,
+                            void **fault_addr, jmp_buf **fault_catcher);
+extern void __do_copy(void *to, const void *from, int n);
+
 /*
  * strncpy_from_user: - Copy a NUL terminated string from userspace.
  * @dst:   Destination address, in kernel space.  This buffer must be at
diff --git a/arch/um/include/uml_uaccess.h b/arch/um/include/uml_uaccess.h
deleted file mode 100644
index c0df11d..0000000
--- a/arch/um/include/uml_uaccess.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2001 Jeff Dike ([EMAIL PROTECTED])
- * Licensed under the GPL
- */
-
-#ifndef __UML_UACCESS_H__
-#define __UML_UACCESS_H__
-
-extern int __do_copy_to_user(void *to, const void *from, int n,
-                            void **fault_addr, void **fault_catcher);
-void __do_copy(void *to, const void *from, int n);
-
-#endif
-
-/*
- * Overrides for Emacs so that we follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only.  This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-file-style: "linux"
- * End:
- */
diff --git a/arch/um/kernel/exec.c b/arch/um/kernel/exec.c
index 0d26056..25c5026 100644
--- a/arch/um/kernel/exec.c
+++ b/arch/um/kernel/exec.c
@@ -75,7 +75,7 @@ long um_execve(char *file, char __user *__user *argv, char 
__user *__user *env)
 
        err = execve1(file, argv, env);
        if (!err)
-               do_longjmp(current->thread.exec_buf, 1);
+               UML_LONGJMP(current->thread.exec_buf, 1);
        return err;
 }
 
diff --git a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c
index d2b11f2..8456397 100644
--- a/arch/um/kernel/mem.c
+++ b/arch/um/kernel/mem.c
@@ -17,7 +17,7 @@
 #include "as-layout.h"
 #include "kern.h"
 #include "mem_user.h"
-#include "uml_uaccess.h"
+#include "um_uaccess.h"
 #include "os.h"
 #include "linux/types.h"
 #include "linux/string.h"
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c
index eac63fb..bd06055 100644
--- a/arch/um/kernel/trap.c
+++ b/arch/um/kernel/trap.c
@@ -149,7 +149,7 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, 
int is_user,
                   struct uml_pt_regs *regs)
 {
        struct siginfo si;
-       void *catcher;
+       jmp_buf *catcher;
        int err;
        int is_write = FAULT_WRITE(fi);
        unsigned long address = FAULT_ADDRESS(fi);
@@ -181,7 +181,7 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, 
int is_user,
                return 0;
        else if (catcher != NULL) {
                current->thread.fault_addr = (void *) address;
-               do_longjmp(catcher, 1);
+               UML_LONGJMP(catcher, 1);
        }
        else if (current->thread.fault_addr != NULL)
                panic("fault_addr set but no fault catcher");
@@ -233,7 +233,7 @@ void relay_signal(int sig, struct uml_pt_regs *regs)
 static void bus_handler(int sig, struct uml_pt_regs *regs)
 {
        if (current->thread.fault_catcher != NULL)
-               do_longjmp(current->thread.fault_catcher, 1);
+               UML_LONGJMP(current->thread.fault_catcher, 1);
        else relay_signal(sig, regs);
 }
 
diff --git a/arch/um/kernel/uaccess.c b/arch/um/kernel/uaccess.c
index 054e3de..d7436aa 100644
--- a/arch/um/kernel/uaccess.c
+++ b/arch/um/kernel/uaccess.c
@@ -18,7 +18,7 @@ void __do_copy(void *to, const void *from, int n)
 
 
 int __do_copy_to_user(void *to, const void *from, int n,
-                     void **fault_addr, void **fault_catcher)
+                     void **fault_addr, jmp_buf **fault_catcher)
 {
        unsigned long fault;
        int faulted;
diff --git a/arch/um/os-Linux/process.c b/arch/um/os-Linux/process.c
index b2e0d8c..8b57eb3 100644
--- a/arch/um/os-Linux/process.c
+++ b/arch/um/os-Linux/process.c
@@ -249,7 +249,7 @@ void init_new_thread_signals(void)
        init_irq_signals(1);
 }
 
-int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr)
+int run_kernel_thread(int (*fn)(void *), void *arg, jmp_buf **jmp_ptr)
 {
        jmp_buf buf;
        int n;
diff --git a/arch/um/os-Linux/trap.c b/arch/um/os-Linux/trap.c
index be8e029..d3a34ca 100644
--- a/arch/um/os-Linux/trap.c
+++ b/arch/um/os-Linux/trap.c
@@ -22,10 +22,3 @@ void os_fill_handlinfo(struct kern_handlers h)
        sig_info[SIGVTALRM] = h.timer_handler;
        sig_info[SIGALRM] = h.timer_handler;
 }
-
-void do_longjmp(void *b, int val)
-{
-       jmp_buf *buf = b;
-
-       UML_LONGJMP(buf, val);
-}
diff --git a/arch/um/os-Linux/uaccess.c b/arch/um/os-Linux/uaccess.c
index bbb73a6..8d27b6d 100644
--- a/arch/um/os-Linux/uaccess.c
+++ b/arch/um/os-Linux/uaccess.c
@@ -8,7 +8,7 @@
 #include "longjmp.h"
 
 unsigned long __do_user_copy(void *to, const void *from, int n,
-                            void **fault_addr, void **fault_catcher,
+                            void **fault_addr, jmp_buf **fault_catcher,
                             void (*op)(void *to, const void *from,
                                        int n), int *faulted_out)
 {
diff --git a/include/asm-um/processor-generic.h 
b/include/asm-um/processor-generic.h
index d40eae9..78c0599 100644
--- a/include/asm-um/processor-generic.h
+++ b/include/asm-um/processor-generic.h
@@ -30,10 +30,10 @@ struct thread_struct {
        struct pt_regs regs;
        int singlestep_syscall;
        void *fault_addr;
-       void *fault_catcher;
+       jmp_buf *fault_catcher;
        struct task_struct *prev_sched;
        unsigned long temp_stack;
-       void *exec_buf;
+       jmp_buf *exec_buf;
        struct arch_thread arch;
        jmp_buf switch_buf;
        int mm_count;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to