From 29c51fbe38feebb7f4fa530ed8ce4675b15ace0c Mon Sep 17 00:00:00 2001 From: Martin Michlmayr Date: Sat, 17 Oct 2009 15:54:15 +0000 Subject: [PATCH] CPUidle: always return with interrupts enabled svn path=/dists/trunk/linux-2.6/; revision=14397 --- debian/changelog | 3 ++ .../all/cpuidle-return-with-irq-enabled.patch | 38 +++++++++++++++++++ debian/patches/series/base | 1 + 3 files changed, 42 insertions(+) create mode 100644 debian/patches/bugfix/all/cpuidle-return-with-irq-enabled.patch diff --git a/debian/changelog b/debian/changelog index 841ae5290..ce2e53fcd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,9 @@ linux-2.6 (2.6.31-1~experimental.3) UNRELEASED; urgency=low * Include aufs2, marked as staging (Closes: #541828) * Include speakup modules under staging + [ Martin Michlmayr ] + * CPUidle: always return with interrupts enabled. + -- Ben Hutchings Tue, 13 Oct 2009 02:18:40 +0100 linux-2.6 (2.6.31-1~experimental.2) experimental; urgency=low diff --git a/debian/patches/bugfix/all/cpuidle-return-with-irq-enabled.patch b/debian/patches/bugfix/all/cpuidle-return-with-irq-enabled.patch new file mode 100644 index 000000000..786fe89bc --- /dev/null +++ b/debian/patches/bugfix/all/cpuidle-return-with-irq-enabled.patch @@ -0,0 +1,38 @@ +Subject: [PATCH] CPUidle: always return with interrupts enabled + +In the case where cpuidle_idle_call() returns before changing state +due to a need_resched(), it was returning with IRQs disabled. + +This patch ensures IRQs are (re)enabled before returning. + +Reported-by: Hemanth V +Signed-off-by: Kevin Hilman +--- + drivers/cpuidle/cpuidle.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c +index ad41f19..12fdd39 100644 +--- a/drivers/cpuidle/cpuidle.c ++++ b/drivers/cpuidle/cpuidle.c +@@ -75,8 +75,11 @@ static void cpuidle_idle_call(void) + #endif + /* ask the governor for the next state */ + next_state = cpuidle_curr_governor->select(dev); +- if (need_resched()) ++ if (need_resched()) { ++ local_irq_enable(); + return; ++ } ++ + target_state = &dev->states[next_state]; + + /* enter the state and update stats */ +-- +1.6.4.3 + +-- +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/ diff --git a/debian/patches/series/base b/debian/patches/series/base index 1521804a1..13846eb6d 100644 --- a/debian/patches/series/base +++ b/debian/patches/series/base @@ -58,3 +58,4 @@ + bugfix/all/stable/2.6.31.3.patch + bugfix/all/hfsplus-limit-to-2tb.patch + bugfix/all/stable/2.6.31.4.patch ++ bugfix/all/cpuidle-return-with-irq-enabled.patch