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

Reply via email to