diff options
author | Jan Beulich <jbeulich@novell.com> | 2008-02-05 02:43:03 -0500 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2008-02-05 11:26:44 -0500 |
commit | 620de2f5dc697f906408743b1139fe5fb7b0b7f8 (patch) | |
tree | 01c731dfc3f8aca8f100482ef79d6795e03b4dba /arch/ia64/kernel/unaligned.c | |
parent | ef3c4cb936d854d1564172f2dcce9c20d1b08761 (diff) |
[IA64] honor notify_die() returning NOTIFY_STOP
This requires making die() and die_if_kernel() return a value, and their
callers to honor this (and be prepared that it returns).
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64/kernel/unaligned.c')
-rw-r--r-- | arch/ia64/kernel/unaligned.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/ia64/kernel/unaligned.c b/arch/ia64/kernel/unaligned.c index f6a1aeb742b3..52f70bbc192a 100644 --- a/arch/ia64/kernel/unaligned.c +++ b/arch/ia64/kernel/unaligned.c | |||
@@ -23,7 +23,7 @@ | |||
23 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
24 | #include <asm/unaligned.h> | 24 | #include <asm/unaligned.h> |
25 | 25 | ||
26 | extern void die_if_kernel(char *str, struct pt_regs *regs, long err); | 26 | extern int die_if_kernel(char *str, struct pt_regs *regs, long err); |
27 | 27 | ||
28 | #undef DEBUG_UNALIGNED_TRAP | 28 | #undef DEBUG_UNALIGNED_TRAP |
29 | 29 | ||
@@ -675,8 +675,9 @@ emulate_load_updates (update_t type, load_store_t ld, struct pt_regs *regs, unsi | |||
675 | */ | 675 | */ |
676 | if (ld.x6_op == 1 || ld.x6_op == 3) { | 676 | if (ld.x6_op == 1 || ld.x6_op == 3) { |
677 | printk(KERN_ERR "%s: register update on speculative load, error\n", __FUNCTION__); | 677 | printk(KERN_ERR "%s: register update on speculative load, error\n", __FUNCTION__); |
678 | die_if_kernel("unaligned reference on speculative load with register update\n", | 678 | if (die_if_kernel("unaligned reference on speculative load with register update\n", |
679 | regs, 30); | 679 | regs, 30)) |
680 | return; | ||
680 | } | 681 | } |
681 | 682 | ||
682 | 683 | ||
@@ -1317,7 +1318,8 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs) | |||
1317 | 1318 | ||
1318 | if (ia64_psr(regs)->be) { | 1319 | if (ia64_psr(regs)->be) { |
1319 | /* we don't support big-endian accesses */ | 1320 | /* we don't support big-endian accesses */ |
1320 | die_if_kernel("big-endian unaligned accesses are not supported", regs, 0); | 1321 | if (die_if_kernel("big-endian unaligned accesses are not supported", regs, 0)) |
1322 | return; | ||
1321 | goto force_sigbus; | 1323 | goto force_sigbus; |
1322 | } | 1324 | } |
1323 | 1325 | ||
@@ -1534,7 +1536,8 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs) | |||
1534 | ia64_handle_exception(regs, eh); | 1536 | ia64_handle_exception(regs, eh); |
1535 | goto done; | 1537 | goto done; |
1536 | } | 1538 | } |
1537 | die_if_kernel("error during unaligned kernel access\n", regs, ret); | 1539 | if (die_if_kernel("error during unaligned kernel access\n", regs, ret)) |
1540 | return; | ||
1538 | /* NOT_REACHED */ | 1541 | /* NOT_REACHED */ |
1539 | } | 1542 | } |
1540 | force_sigbus: | 1543 | force_sigbus: |