]> err.no Git - linux-2.6/blobdiff - arch/ia64/kernel/signal.c
[MIPS] Revert "mips: add pm_power_off"
[linux-2.6] / arch / ia64 / kernel / signal.c
index 774f34b675cfdb3c688e2831b4fb599d1081b2ae..463f6bb44d07880993b0f13e282352100dd05cff 100644 (file)
@@ -387,15 +387,14 @@ setup_frame (int sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *set,
             struct sigscratch *scr)
 {
        extern char __kernel_sigtramp[];
-       unsigned long tramp_addr, new_rbs = 0;
+       unsigned long tramp_addr, new_rbs = 0, new_sp;
        struct sigframe __user *frame;
        long err;
 
-       frame = (void __user *) scr->pt.r12;
+       new_sp = scr->pt.r12;
        tramp_addr = (unsigned long) __kernel_sigtramp;
-       if ((ka->sa.sa_flags & SA_ONSTACK) && sas_ss_flags((unsigned long) frame) == 0) {
-               frame = (void __user *) ((current->sas_ss_sp + current->sas_ss_size)
-                                        & ~(STACK_ALIGN - 1));
+       if ((ka->sa.sa_flags & SA_ONSTACK) && sas_ss_flags(new_sp) == 0) {
+               new_sp = current->sas_ss_sp + current->sas_ss_size;
                /*
                 * We need to check for the register stack being on the signal stack
                 * separately, because it's switched separately (memory stack is switched
@@ -404,7 +403,7 @@ setup_frame (int sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *set,
                if (!rbs_on_sig_stack(scr->pt.ar_bspstore))
                        new_rbs = (current->sas_ss_sp + sizeof(long) - 1) & ~(sizeof(long) - 1);
        }
-       frame = (void __user *) frame - ((sizeof(*frame) + STACK_ALIGN - 1) & ~(STACK_ALIGN - 1));
+       frame = (void __user *) ((new_sp - sizeof(*frame)) & -STACK_ALIGN);
 
        if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
                return force_sigsegv_info(sig, frame);
@@ -656,11 +655,11 @@ set_sigdelayed(pid_t pid, int signo, int code, void __user *addr)
 
                if (!t)
                        return;
-               t->thread_info->sigdelayed.signo = signo;
-               t->thread_info->sigdelayed.code = code;
-               t->thread_info->sigdelayed.addr = addr;
-               t->thread_info->sigdelayed.start_time = start_time;
-               t->thread_info->sigdelayed.pid = pid;
+               task_thread_info(t)->sigdelayed.signo = signo;
+               task_thread_info(t)->sigdelayed.code = code;
+               task_thread_info(t)->sigdelayed.addr = addr;
+               task_thread_info(t)->sigdelayed.start_time = start_time;
+               task_thread_info(t)->sigdelayed.pid = pid;
                wmb();
                set_tsk_thread_flag(t, TIF_SIGDELAYED);
        }