LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
To: linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>,
	Martin Schwidefsky <schwidefsky@de.ibm.com>
Subject: [patch 04/13] Make sure enabled wait psw is loaded in default_idle.
Date: Tue, 19 Feb 2008 15:40:51 +0100	[thread overview]
Message-ID: <20080219144503.680430685@de.ibm.com> (raw)
In-Reply-To: <20080219144047.587547541@de.ibm.com>

[-- Attachment #1: 004-idle.diff --]
[-- Type: text/plain, Size: 1760 bytes --]

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.


  parent reply	other threads:[~2008-02-19 14:46 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-19 14:40 [patch 00/13] s390 bux fixes for 2.6.25-rc2 Martin Schwidefsky
2008-02-19 14:40 ` [patch 01/13] cio: Remember to initialize recovery_lock Martin Schwidefsky
2008-02-19 14:40 ` [patch 02/13] cio: Do timed recovery on workqueue Martin Schwidefsky
2008-02-19 14:40 ` [patch 03/13] Let NR_CPUS default to 32/64 on s390/s390x Martin Schwidefsky
2008-02-19 14:40 ` Martin Schwidefsky [this message]
2008-02-19 14:40 ` [patch 05/13] dasd: fix locking in __dasd_device_process_final_queue Martin Schwidefsky
2008-02-19 14:40 ` [patch 06/13] find bit corner case Martin Schwidefsky
2008-02-19 14:40 ` [patch 07/13] Initialize per cpu lowcores on cpu hotplug Martin Schwidefsky
2008-02-19 15:13   ` Bastian Blank
2008-02-19 15:38     ` Heiko Carstens
2008-02-19 15:41       ` Heiko Carstens
2008-02-19 18:44         ` Segher Boessenkool
2008-02-20  9:45           ` Heiko Carstens
2008-02-20 10:09             ` Bastian Blank
2008-02-20 10:24               ` Heiko Carstens
2008-02-19 14:40 ` [patch 08/13] qdio: fix qdio_activate timeout handling Martin Schwidefsky
2008-02-19 14:40 ` [patch 09/13] etr: fix compile error on !SMP Martin Schwidefsky
2008-02-19 14:40 ` [patch 10/13] sclp: clean up send/receive naming scheme Martin Schwidefsky
2008-02-19 14:40 ` [patch 11/13] dcss: Fix Unlikely(x) != y Martin Schwidefsky
2008-02-19 14:40 ` [patch 12/13] Fix futex_atomic_cmpxchg_std inline assembly Martin Schwidefsky
2008-02-19 14:41 ` [patch 13/13] qdio: FCP/SCSI write I/O stagnates on LPAR Martin Schwidefsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080219144503.680430685@de.ibm.com \
    --to=schwidefsky@de.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --subject='Re: [patch 04/13] Make sure enabled wait psw is loaded in default_idle.' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).