git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable
[pandora-kernel.git]
/
arch
/
parisc
/
kernel
/
traps.c
diff --git
a/arch/parisc/kernel/traps.c
b/arch/parisc/kernel/traps.c
index
4c771cd
..
c32f5d6
100644
(file)
--- a/
arch/parisc/kernel/traps.c
+++ b/
arch/parisc/kernel/traps.c
@@
-247,6
+247,8
@@
void die_if_kernel(char *str, struct pt_regs *regs, long err)
oops_in_progress = 1;
oops_in_progress = 1;
+ oops_enter();
+
/* Amuse the user in a SPARC fashion */
if (err) printk(
KERN_CRIT " _______________________________ \n"
/* Amuse the user in a SPARC fashion */
if (err) printk(
KERN_CRIT " _______________________________ \n"
@@
-293,6
+295,7
@@
KERN_CRIT " || ||\n");
panic("Fatal exception");
}
panic("Fatal exception");
}
+ oops_exit();
do_exit(SIGSEGV);
}
do_exit(SIGSEGV);
}
@@
-494,7
+497,7
@@
void parisc_terminate(char *msg, struct pt_regs *regs, int code, unsigned long o
panic(msg);
}
panic(msg);
}
-void handle_interruption(int code, struct pt_regs *regs)
+void
notrace
handle_interruption(int code, struct pt_regs *regs)
{
unsigned long fault_address = 0;
unsigned long fault_space = 0;
{
unsigned long fault_address = 0;
unsigned long fault_space = 0;
@@
-745,6
+748,10
@@
void handle_interruption(int code, struct pt_regs *regs)
/* Fall Through */
case 27:
/* Data memory protection ID trap */
/* Fall Through */
case 27:
/* Data memory protection ID trap */
+ if (code == 27 && !user_mode(regs) &&
+ fixup_exception(regs))
+ return;
+
die_if_kernel("Protection id trap", regs, code);
si.si_code = SEGV_MAPERR;
si.si_signo = SIGSEGV;
die_if_kernel("Protection id trap", regs, code);
si.si_code = SEGV_MAPERR;
si.si_signo = SIGSEGV;
@@
-821,8
+828,8
@@
void handle_interruption(int code, struct pt_regs *regs)
int __init check_ivt(void *iva)
{
int __init check_ivt(void *iva)
{
+ extern u32 os_hpmc_size;
extern const u32 os_hpmc[];
extern const u32 os_hpmc[];
- extern const u32 os_hpmc_end[];
int i;
u32 check = 0;
int i;
u32 check = 0;
@@
-839,8
+846,7
@@
int __init check_ivt(void *iva)
*ivap++ = 0;
/* Compute Checksum for HPMC handler */
*ivap++ = 0;
/* Compute Checksum for HPMC handler */
-
- length = os_hpmc_end - os_hpmc;
+ length = os_hpmc_size;
ivap[7] = length;
hpmcp = (u32 *)os_hpmc;
ivap[7] = length;
hpmcp = (u32 *)os_hpmc;