ChangeSet 1.2073, 2005/03/12 09:14:01-08:00, [EMAIL PROTECTED]
[PATCH] Fix PA-RISC unwinding from millicode
Fix unwinding from millicode
Signed-off-by: Randolph Chung <[EMAIL PROTECTED]>
Signed-off-by: Randolph Chung <[EMAIL PROTECTED]>
Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
traps.c | 19 +++++++++++++------
1 files changed, 13 insertions(+), 6 deletions(-)
diff -Nru a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c
--- a/arch/parisc/kernel/traps.c 2005-03-12 21:42:07 -08:00
+++ b/arch/parisc/kernel/traps.c 2005-03-12 21:42:07 -08:00
@@ -163,13 +163,20 @@
struct unwind_frame_info info;
if (!task) {
- unsigned long sp, ip, rp;
+ unsigned long sp;
+ struct pt_regs *r;
HERE:
asm volatile ("copy %%r30, %0" : "=r"(sp));
- ip = (unsigned long)&&HERE;
- rp = (unsigned long)__builtin_return_address(0);
- unwind_frame_init(&info, current, sp, ip, rp);
+ r = (struct pt_regs *)kmalloc(sizeof(struct pt_regs),
GFP_KERNEL);
+ if (!r)
+ return;
+ memset(r, 0, sizeof(struct pt_regs));
+ r->iaoq[0] = (unsigned long)&&HERE;
+ r->gr[2] = (unsigned long)__builtin_return_address(0);
+ r->gr[30] = sp;
+ unwind_frame_init(&info, current, r);
+ kfree(r);
} else {
unwind_frame_init_from_blocked_task(&info, task);
}
@@ -416,7 +423,7 @@
{
/* show_stack(NULL, (unsigned long *)regs->gr[30]); */
struct unwind_frame_info info;
- unwind_frame_init(&info, current, regs->gr[30], regs->iaoq[0],
regs->gr[2]);
+ unwind_frame_init(&info, current, regs);
do_show_stack(&info);
}
@@ -732,7 +739,7 @@
}
if (user_mode(regs)) {
- if ((fault_space>>SPACEID_SHIFT) != (regs->sr[7] >> SPACEID_SHIFT))
{
+ if ((fault_space >> SPACEID_SHIFT) != (regs->sr[7] >>
SPACEID_SHIFT)) {
#ifdef PRINT_USER_FAULTS
if (fault_space == 0)
printk(KERN_DEBUG "User Fault on Kernel Space ");
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html