From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ecfrec.frec.bull.fr (ecfrec.frec.bull.fr [129.183.4.8]) by ozlabs.org (Postfix) with ESMTP id AAAF8DDDEA for ; Fri, 28 Nov 2008 01:52:10 +1100 (EST) Date: Thu, 27 Nov 2008 15:52:03 +0100 From: Sebastien Dugue To: linux-ppc Subject: [PATCH] powerpc/pseries: fix idle sleep early exit state Message-ID: <20081127155203.2a1d6af9@bull.net> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Cc: Will Schmidt , Paul Mackerras , Jean Pierre Dion , Gilles Carry List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , In pseries_dedicated_idle_sleep(), if we need to exit idle during the snooze period (i.e. need_resched or cpu has been offlined), then we should re-disable the interrupts and clear TIF_POLLING_NRFLAG before leaving. Signed-off-by: Sebastien Dugue Cc: Paul Mackerras --- arch/powerpc/platforms/pseries/setup.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index ec34170..8270f04 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c @@ -504,8 +504,13 @@ static void pseries_dedicated_idle_sleep(void) set_thread_flag(TIF_POLLING_NRFLAG); while (get_tb() < start_snooze) { - if (need_resched() || cpu_is_offline(cpu)) - goto out; + if (need_resched() || cpu_is_offline(cpu)) { + HMT_medium(); + clear_thread_flag(TIF_POLLING_NRFLAG); + smp_mb(); + local_irq_disable(); + goto out2; + } ppc64_runlatch_off(); HMT_low(); HMT_very_low(); @@ -523,6 +528,7 @@ static void pseries_dedicated_idle_sleep(void) out: HMT_medium(); +out2: out_purr = mfspr(SPRN_PURR); get_lppaca()->wait_state_cycles += out_purr - in_purr; get_lppaca()->donate_dedicated_cpu = 0; -- 1.6.0.1.308.gede4c