*/
 long compat_arm_syscall(struct pt_regs *regs)
 {
-       siginfo_t info;
        unsigned int no = regs->regs[7];
+       void __user *addr;
 
        switch (no) {
        /*
                break;
        }
 
-       clear_siginfo(&info);
-       info.si_signo = SIGILL;
-       info.si_errno = 0;
-       info.si_code  = ILL_ILLTRP;
-       info.si_addr  = (void __user *)instruction_pointer(regs) -
-                        (compat_thumb_mode(regs) ? 2 : 4);
+       addr  = (void __user *)instruction_pointer(regs) -
+               (compat_thumb_mode(regs) ? 2 : 4);
 
-       arm64_notify_die("Oops - bad compat syscall(2)", regs, &info, no);
+       arm64_notify_die("Oops - bad compat syscall(2)", regs,
+                        SIGILL, ILL_ILLTRP, addr, no);
        return 0;
 }
 
 }
 
 void arm64_notify_die(const char *str, struct pt_regs *regs,
-                     struct siginfo *info, int err)
+                     int signo, int sicode, void __user *addr,
+                     int err)
 {
        if (user_mode(regs)) {
+               struct siginfo info;
+
                WARN_ON(regs != current_pt_regs());
                current->thread.fault_address = 0;
                current->thread.fault_code = err;
-               arm64_force_sig_info(info, str, current);
+
+               clear_siginfo(&info);
+               info.si_signo = signo;
+               info.si_errno = 0;
+               info.si_code  = sicode;
+               info.si_addr  = addr;
+
+               arm64_force_sig_info(&info, str, current);
        } else {
                die(str, regs, err);
        }
 
 void force_signal_inject(int signal, int code, unsigned long address)
 {
-       siginfo_t info;
        const char *desc;
        struct pt_regs *regs = current_pt_regs();
 
-       clear_siginfo(&info);
-
        switch (signal) {
        case SIGILL:
                desc = "undefined instruction";
                signal = SIGKILL;
        }
 
-       info.si_signo = signal;
-       info.si_errno = 0;
-       info.si_code  = code;
-       info.si_addr  = (void __user *)address;
-
-       arm64_notify_die(desc, regs, &info, 0);
+       arm64_notify_die(desc, regs, signal, code, (void __user *)address, 0);
 }
 
 /*
 
 
 static int do_sea(unsigned long addr, unsigned int esr, struct pt_regs *regs)
 {
-       struct siginfo info;
        const struct fault_info *inf;
+       void __user *siaddr;
 
        inf = esr_to_fault_info(esr);
 
                        nmi_exit();
        }
 
-       clear_siginfo(&info);
-       info.si_signo = inf->sig;
-       info.si_errno = 0;
-       info.si_code  = inf->code;
        if (esr & ESR_ELx_FnV)
-               info.si_addr = NULL;
+               siaddr = NULL;
        else
-               info.si_addr  = (void __user *)addr;
-       arm64_notify_die(inf->name, regs, &info, esr);
+               siaddr  = (void __user *)addr;
+       arm64_notify_die(inf->name, regs, inf->sig, inf->code, siaddr, esr);
 
        return 0;
 }
                                         struct pt_regs *regs)
 {
        const struct fault_info *inf = esr_to_fault_info(esr);
-       struct siginfo info;
 
        if (!inf->fn(addr, esr, regs))
                return;
                show_pte(addr);
        }
 
-       clear_siginfo(&info);
-       info.si_signo = inf->sig;
-       info.si_errno = 0;
-       info.si_code  = inf->code;
-       info.si_addr  = (void __user *)addr;
-       arm64_notify_die(inf->name, regs, &info, esr);
+       arm64_notify_die(inf->name, regs,
+                        inf->sig, inf->code, (void __user *)addr, esr);
 }
 
 asmlinkage void __exception do_el0_irq_bp_hardening(void)
                                           unsigned int esr,
                                           struct pt_regs *regs)
 {
-       struct siginfo info;
-
        if (user_mode(regs)) {
                if (instruction_pointer(regs) > TASK_SIZE)
                        arm64_apply_bp_hardening();
                local_irq_enable();
        }
 
-       clear_siginfo(&info);
-       info.si_signo = SIGBUS;
-       info.si_errno = 0;
-       info.si_code  = BUS_ADRALN;
-       info.si_addr  = (void __user *)addr;
-       arm64_notify_die("SP/PC alignment exception", regs, &info, esr);
+       arm64_notify_die("SP/PC alignment exception", regs,
+                        SIGBUS, BUS_ADRALN, (void __user *)addr, esr);
 }
 
 int __init early_brk64(unsigned long addr, unsigned int esr,
        if (!inf->fn(addr, esr, regs)) {
                rv = 1;
        } else {
-               struct siginfo info;
-
-               clear_siginfo(&info);
-               info.si_signo = inf->sig;
-               info.si_errno = 0;
-               info.si_code  = inf->code;
-               info.si_addr  = (void __user *)addr;
-               arm64_notify_die(inf->name, regs, &info, esr);
+               arm64_notify_die(inf->name, regs,
+                                inf->sig, inf->code, (void __user *)addr, esr);
                rv = 0;
        }