lkml.org 
[lkml]   [2005]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 2.6.15-rc5-mm2 can't boot on ia64 due to changing on_each_cpu().
    Benjamin LaHaise wrote:
    > On Wed, Dec 14, 2005 at 06:56:58PM -0800, Andrew Morton wrote:
    >
    >>Thanks. I'll drop it.
    >
    >
    > Please don't. Fix ia64's brain damage instead. Function pointers
    > should not be cast, period.
    >
    > -ben

    How about this?

    Thanks,
    Kenji Kaneshige


    We need this patch on ia64 to convert on_each_cpu to a macro.

    Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>

    arch/ia64/kernel/smp.c | 4 ++--
    arch/ia64/kernel/smpboot.c | 2 +-
    arch/ia64/mm/tlb.c | 6 +++---
    include/asm-ia64/mmu_context.h | 4 ++--
    include/asm-ia64/tlbflush.h | 5 +++--
    5 files changed, 11 insertions(+), 10 deletions(-)

    Index: linux-2.6.15-rc5-mm2/arch/ia64/kernel/smpboot.c
    ===================================================================
    --- linux-2.6.15-rc5-mm2.orig/arch/ia64/kernel/smpboot.c
    +++ linux-2.6.15-rc5-mm2/arch/ia64/kernel/smpboot.c
    @@ -652,7 +652,7 @@ int __cpu_disable(void)
    remove_siblinginfo(cpu);
    cpu_clear(cpu, cpu_online_map);
    fixup_irqs();
    - local_flush_tlb_all();
    + local_flush_tlb_all(NULL);
    cpu_clear(cpu, cpu_callin_map);
    return 0;
    }
    Index: linux-2.6.15-rc5-mm2/arch/ia64/mm/tlb.c
    ===================================================================
    --- linux-2.6.15-rc5-mm2.orig/arch/ia64/mm/tlb.c
    +++ linux-2.6.15-rc5-mm2/arch/ia64/mm/tlb.c
    @@ -81,7 +81,7 @@ wrap_mmu_context (struct mm_struct *mm)
    if (i != cpu)
    per_cpu(ia64_need_tlb_flush, i) = 1;
    put_cpu();
    - local_flush_tlb_all();
    + local_flush_tlb_all(NULL);
    }

    void
    @@ -111,7 +111,7 @@ ia64_global_tlb_purge (struct mm_struct
    }

    void
    -local_flush_tlb_all (void)
    +local_flush_tlb_all (void *dummy)
    {
    unsigned long i, j, flags, count0, count1, stride0, stride1, addr;

    @@ -192,5 +192,5 @@ ia64_tlb_init (void)
    local_cpu_data->ptce_stride[0] = ptce_info.stride[0];
    local_cpu_data->ptce_stride[1] = ptce_info.stride[1];

    - local_flush_tlb_all(); /* nuke left overs from bootstrapping... */
    + local_flush_tlb_all(NULL);/* nuke left overs from bootstrapping... */
    }
    Index: linux-2.6.15-rc5-mm2/arch/ia64/kernel/smp.c
    ===================================================================
    --- linux-2.6.15-rc5-mm2.orig/arch/ia64/kernel/smp.c
    +++ linux-2.6.15-rc5-mm2/arch/ia64/kernel/smp.c
    @@ -225,7 +225,7 @@ smp_send_reschedule (int cpu)
    void
    smp_flush_tlb_all (void)
    {
    - on_each_cpu((void (*)(void *))local_flush_tlb_all, NULL, 1, 1);
    + on_each_cpu(local_flush_tlb_all, NULL, 1, 1);
    }

    void
    @@ -248,7 +248,7 @@ smp_flush_tlb_mm (struct mm_struct *mm)
    * anyhow, and once a CPU is interrupted, the cost of local_flush_tlb_all() is
    * rather trivial.
    */
    - on_each_cpu((void (*)(void *))local_finish_flush_tlb_mm, mm, 1, 1);
    + on_each_cpu(local_finish_flush_tlb_mm, mm, 1, 1);
    }

    /*
    Index: linux-2.6.15-rc5-mm2/include/asm-ia64/tlbflush.h
    ===================================================================
    --- linux-2.6.15-rc5-mm2.orig/include/asm-ia64/tlbflush.h
    +++ linux-2.6.15-rc5-mm2/include/asm-ia64/tlbflush.h
    @@ -23,7 +23,7 @@
    * Flush everything (kernel mapping may also have changed due to
    * vmalloc/vfree).
    */
    -extern void local_flush_tlb_all (void);
    +extern void local_flush_tlb_all (void *dummy);

    #ifdef CONFIG_SMP
    extern void smp_flush_tlb_all (void);
    @@ -34,8 +34,9 @@ extern void local_flush_tlb_all (void);
    #endif

    static inline void
    -local_finish_flush_tlb_mm (struct mm_struct *mm)
    +local_finish_flush_tlb_mm (void *info)
    {
    + struct mm_struct *mm = (struct mm_struct *)info;
    if (mm == current->active_mm)
    activate_context(mm);
    }
    Index: linux-2.6.15-rc5-mm2/include/asm-ia64/mmu_context.h
    ===================================================================
    --- linux-2.6.15-rc5-mm2.orig/include/asm-ia64/mmu_context.h
    +++ linux-2.6.15-rc5-mm2/include/asm-ia64/mmu_context.h
    @@ -60,13 +60,13 @@ enter_lazy_tlb (struct mm_struct *mm, st
    static inline void
    delayed_tlb_flush (void)
    {
    - extern void local_flush_tlb_all (void);
    + extern void local_flush_tlb_all (void *);
    unsigned long flags;

    if (unlikely(__ia64_per_cpu_var(ia64_need_tlb_flush))) {
    spin_lock_irqsave(&ia64_ctx.lock, flags);
    if (__ia64_per_cpu_var(ia64_need_tlb_flush)) {
    - local_flush_tlb_all();
    + local_flush_tlb_all(NULL);
    __ia64_per_cpu_var(ia64_need_tlb_flush) = 0;
    }
    spin_unlock_irqrestore(&ia64_ctx.lock, flags);

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-12-15 06:28    [W:0.040 / U:0.024 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site