lkml.org 
[lkml]   [2008]   [Feb]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 04/13] Make sure enabled wait psw is loaded in default_idle.
    From: Heiko Carstens <heiko.carstens@de.ibm.com>

    If both NO_IDLE_HZ and VIRT_TIMER are disabled default_idle won't load
    an enabled wait psw and busy loop instead. This is because the
    idle_chain is empty and the return value of atomic_notifier_call_chain
    will be NOTIFY_DONE, which causes default_idle to return instead of
    loading an enabled wait psw.
    Fix this by calling __atomic_notifier_call_chain instead and add proper
    return value handling.

    Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    ---

    arch/s390/kernel/process.c | 15 +++++++++------
    1 file changed, 9 insertions(+), 6 deletions(-)

    Index: quilt-2.6/arch/s390/kernel/process.c
    ===================================================================
    --- quilt-2.6.orig/arch/s390/kernel/process.c
    +++ quilt-2.6/arch/s390/kernel/process.c
    @@ -114,24 +114,27 @@ extern void s390_handle_mcck(void);
    static void default_idle(void)
    {
    int cpu, rc;
    + int nr_calls = 0;
    + void *hcpu;
    #ifdef CONFIG_SMP
    struct s390_idle_data *idle;
    #endif

    /* CPU is going idle. */
    cpu = smp_processor_id();
    -
    + hcpu = (void *)(long)cpu;
    local_irq_disable();
    if (need_resched()) {
    local_irq_enable();
    return;
    }

    - rc = atomic_notifier_call_chain(&idle_chain,
    - S390_CPU_IDLE, (void *)(long) cpu);
    - if (rc != NOTIFY_OK && rc != NOTIFY_DONE)
    - BUG();
    - if (rc != NOTIFY_OK) {
    + rc = __atomic_notifier_call_chain(&idle_chain, S390_CPU_IDLE, hcpu, -1,
    + &nr_calls);
    + if (rc == NOTIFY_BAD) {
    + nr_calls--;
    + __atomic_notifier_call_chain(&idle_chain, S390_CPU_NOT_IDLE,
    + hcpu, nr_calls, NULL);
    local_irq_enable();
    return;
    }
    --
    blue skies,
    Martin.

    "Reality continues to ruin my life." - Calvin.



    \
     
     \ /
      Last update: 2008-02-19 15:49    [W:0.022 / U:60.364 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site