lkml.org 
[lkml]   [2013]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:smp/hotplug] arm64: Use generic idle loop
    Commit-ID:  0087298f68a726493a637c4f68d148b31102b0d9
    Gitweb: http://git.kernel.org/tip/0087298f68a726493a637c4f68d148b31102b0d9
    Author: Thomas Gleixner <tglx@linutronix.de>
    AuthorDate: Thu, 21 Mar 2013 22:49:39 +0100
    Committer: Thomas Gleixner <tglx@linutronix.de>
    CommitDate: Mon, 8 Apr 2013 17:39:24 +0200

    arm64: Use generic idle loop

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Rusty Russell <rusty@rustcorp.com.au>
    Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Reviewed-by: Cc: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    Cc: Magnus Damm <magnus.damm@gmail.com>
    Acked-by: Catalin Marinas <catalin.marinas@arm.com>
    Link: http://lkml.kernel.org/r/20130321215233.887563095@linutronix.de
    ---
    arch/arm64/Kconfig | 1 +
    arch/arm64/kernel/process.c | 43 +++++--------------------------------------
    arch/arm64/kernel/smp.c | 2 +-
    3 files changed, 7 insertions(+), 39 deletions(-)

    diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
    index 9b6d19f..ca2c871 100644
    --- a/arch/arm64/Kconfig
    +++ b/arch/arm64/Kconfig
    @@ -9,6 +9,7 @@ config ARM64
    select CLONE_BACKWARDS
    select COMMON_CLK
    select GENERIC_CLOCKEVENTS
    + select GENERIC_IDLE_LOOP
    select GENERIC_IOMAP
    select GENERIC_IRQ_PROBE
    select GENERIC_IRQ_SHOW
    diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
    index 0337cdb..83a0ad5 100644
    --- a/arch/arm64/kernel/process.c
    +++ b/arch/arm64/kernel/process.c
    @@ -84,11 +84,15 @@ EXPORT_SYMBOL_GPL(pm_power_off);
    void (*pm_restart)(const char *cmd);
    EXPORT_SYMBOL_GPL(pm_restart);

    +void arch_cpu_idle_prepare(void)
    +{
    + local_fiq_enable();
    +}

    /*
    * This is our default idle handler.
    */
    -static void default_idle(void)
    +void arch_cpu_idle(void)
    {
    /*
    * This should do all the clock switching and wait for interrupt
    @@ -98,43 +102,6 @@ static void default_idle(void)
    local_irq_enable();
    }

    -/*
    - * The idle thread.
    - * We always respect 'hlt_counter' to prevent low power idle.
    - */
    -void cpu_idle(void)
    -{
    - local_fiq_enable();
    -
    - /* endless idle loop with no priority at all */
    - while (1) {
    - tick_nohz_idle_enter();
    - rcu_idle_enter();
    - while (!need_resched()) {
    - /*
    - * We need to disable interrupts here to ensure
    - * we don't miss a wakeup call.
    - */
    - local_irq_disable();
    - if (!need_resched()) {
    - stop_critical_timings();
    - default_idle();
    - start_critical_timings();
    - /*
    - * default_idle functions should always return
    - * with IRQs enabled.
    - */
    - WARN_ON(irqs_disabled());
    - } else {
    - local_irq_enable();
    - }
    - }
    - rcu_idle_exit();
    - tick_nohz_idle_exit();
    - schedule_preempt_disabled();
    - }
    -}
    -
    void machine_shutdown(void)
    {
    #ifdef CONFIG_SMP
    diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
    index bdd3459..261445c 100644
    --- a/arch/arm64/kernel/smp.c
    +++ b/arch/arm64/kernel/smp.c
    @@ -216,7 +216,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
    /*
    * OK, it's off to the idle thread for us
    */
    - cpu_idle();
    + cpu_startup_entry(CPUHP_ONLINE);
    }

    void __init smp_cpus_done(unsigned int max_cpus)

    \
     
     \ /
      Last update: 2013-04-08 23:21    [W:2.832 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site