]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/x86/kernel/signal.c
cpu/hotplug: Cleanup state names
[karo-tx-linux.git] / arch / x86 / kernel / signal.c
index 04cb3212db2d1d6e0e3263cef736121e6b0ad0d6..763af1d0de64d8f8bbd323453e9ca7d266864c13 100644 (file)
@@ -42,6 +42,7 @@
 #include <asm/syscalls.h>
 
 #include <asm/sigframe.h>
+#include <asm/signal.h>
 
 #define COPY(x)                        do {                    \
        get_user_ex(regs->x, &sc->x);                   \
@@ -547,7 +548,7 @@ static int x32_setup_rt_frame(struct ksignal *ksig,
                return -EFAULT;
 
        if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
-               if (copy_siginfo_to_user32(&frame->info, &ksig->info))
+               if (__copy_siginfo_to_user32(&frame->info, &ksig->info, true))
                        return -EFAULT;
        }
 
@@ -660,20 +661,21 @@ badframe:
        return 0;
 }
 
-static inline int is_ia32_compat_frame(void)
+static inline int is_ia32_compat_frame(struct ksignal *ksig)
 {
        return IS_ENABLED(CONFIG_IA32_EMULATION) &&
-              test_thread_flag(TIF_IA32);
+               ksig->ka.sa.sa_flags & SA_IA32_ABI;
 }
 
-static inline int is_ia32_frame(void)
+static inline int is_ia32_frame(struct ksignal *ksig)
 {
-       return IS_ENABLED(CONFIG_X86_32) || is_ia32_compat_frame();
+       return IS_ENABLED(CONFIG_X86_32) || is_ia32_compat_frame(ksig);
 }
 
-static inline int is_x32_frame(void)
+static inline int is_x32_frame(struct ksignal *ksig)
 {
-       return IS_ENABLED(CONFIG_X86_X32_ABI) && test_thread_flag(TIF_X32);
+       return IS_ENABLED(CONFIG_X86_X32_ABI) &&
+               ksig->ka.sa.sa_flags & SA_X32_ABI;
 }
 
 static int
@@ -684,12 +686,12 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
        compat_sigset_t *cset = (compat_sigset_t *) set;
 
        /* Set up the stack frame */
-       if (is_ia32_frame()) {
+       if (is_ia32_frame(ksig)) {
                if (ksig->ka.sa.sa_flags & SA_SIGINFO)
                        return ia32_setup_rt_frame(usig, ksig, cset, regs);
                else
                        return ia32_setup_frame(usig, ksig, cset, regs);
-       } else if (is_x32_frame()) {
+       } else if (is_x32_frame(ksig)) {
                return x32_setup_rt_frame(ksig, cset, regs);
        } else {
                return __setup_rt_frame(ksig->sig, ksig, set, regs);
@@ -783,7 +785,7 @@ static inline unsigned long get_nr_restart_syscall(const struct pt_regs *regs)
         * than the tracee.
         */
 #ifdef CONFIG_IA32_EMULATION
-       if (current_thread_info()->status & (TS_COMPAT|TS_I386_REGS_POKED))
+       if (current->thread.status & (TS_COMPAT|TS_I386_REGS_POKED))
                return __NR_ia32_restart_syscall;
 #endif
 #ifdef CONFIG_X86_X32_ABI