Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c3d4ed4e3e5aa8d9e6b4b795f004a7028ce780e9
Commit:     c3d4ed4e3e5aa8d9e6b4b795f004a7028ce780e9
Parent:     3bb457af4fa86dceef57d7c3e959aff162457fdc
Author:     Kyle McMartin <[EMAIL PROTECTED]>
AuthorDate: Mon Jun 4 02:26:52 2007 -0400
Committer:  Kyle McMartin <[EMAIL PROTECTED]>
CommitDate: Mon Jun 4 02:26:52 2007 -0400

    [PARISC] Fix kernel panic in check_ivt
    
    check_ivt had some seriously broken code wrt function pointers on
    parisc64. Instead of referencing the hpmc code via a function pointer,
    export symbols and reference it as a const array.
    
    Thanks to jda for pointing out the broken 64-bit func ptr handling.
    
    Signed-off-by: Kyle McMartin <[EMAIL PROTECTED]>
---
 arch/parisc/kernel/hpmc.S  |    5 +----
 arch/parisc/kernel/traps.c |    7 ++++---
 2 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/arch/parisc/kernel/hpmc.S b/arch/parisc/kernel/hpmc.S
index d8baa15..43b41df 100644
--- a/arch/parisc/kernel/hpmc.S
+++ b/arch/parisc/kernel/hpmc.S
@@ -295,8 +295,5 @@ os_hpmc_6:
        b .
        nop
 ENDPROC(os_hpmc)
-
-       /* this label used to compute os_hpmc checksum */
-ENTRY(os_hpmc_end)
-
+ENTRY(os_hpmc_end)     /* this label used to compute os_hpmc checksum */
        nop
diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c
index 0ba1d3d..c3ec9f1 100644
--- a/arch/parisc/kernel/traps.c
+++ b/arch/parisc/kernel/traps.c
@@ -802,13 +802,14 @@ void handle_interruption(int code, struct pt_regs *regs)
 
 int __init check_ivt(void *iva)
 {
+       extern const u32 os_hpmc[];
+       extern const u32 os_hpmc_end[];
+
        int i;
        u32 check = 0;
        u32 *ivap;
        u32 *hpmcp;
        u32 length;
-       extern void os_hpmc(void);
-       extern void os_hpmc_end(void);
 
        if (strcmp((char *)iva, "cows can fly"))
                return -1;
@@ -820,7 +821,7 @@ int __init check_ivt(void *iva)
 
        /* Compute Checksum for HPMC handler */
 
-       length = (u32)((unsigned long)os_hpmc_end - (unsigned long)os_hpmc);
+       length = os_hpmc_end - os_hpmc;
        ivap[7] = length;
 
        hpmcp = (u32 *)os_hpmc;
-
To unsubscribe from this list: send the line "unsubscribe git-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