From a1f72dad666512d9b7f9d084e4100100dce17a7d Mon Sep 17 00:00:00 2001 From: Dave Martin Date: Thu, 28 Jul 2011 14:29:40 +0100 Subject: [PATCH] --- yaml --- r: 262730 b: refs/heads/master c: 2102a65e69eac8d77dd71b4991b395e825087ba8 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/arm/mm/alignment.c | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 59bff4382f04..af7e3af0f7d8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 088c01f1e39dbe93a13e0b00f4532ed8b79d35f4 +refs/heads/master: 2102a65e69eac8d77dd71b4991b395e825087ba8 diff --git a/trunk/arch/arm/mm/alignment.c b/trunk/arch/arm/mm/alignment.c index 1df38e833570..cfbcf8b95599 100644 --- a/trunk/arch/arm/mm/alignment.c +++ b/trunk/arch/arm/mm/alignment.c @@ -22,6 +22,7 @@ #include #include +#include #include #include "fault.h" @@ -913,9 +914,16 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) if (ai_usermode & UM_FIXUP) goto fixup; - if (ai_usermode & UM_SIGNAL) - force_sig(SIGBUS, current); - else { + if (ai_usermode & UM_SIGNAL) { + siginfo_t si; + + si.si_signo = SIGBUS; + si.si_errno = 0; + si.si_code = BUS_ADRALN; + si.si_addr = (void __user *)addr; + + force_sig_info(si.si_signo, &si, current); + } else { /* * We're about to disable the alignment trap and return to * user space. But if an interrupt occurs before actually