Bug#691902: [squeeze->wheezy regression] Unable to shutdown via normal means
found 691902 linux/3.6.4-1~experimental.1
quit
Janne Boman wrote:
> acpidump & dmesg attached
> 3.6 from experimental did not work...
Thanks for checking so quickly. By "did not work", you mean that
after booting that kernel, shutting down caused the computer to
reboot, right?
Please test the pre-compiled 3.2.13-1 and 3.2.14-1 packages from
<http://snapshot.debian.org/package/linux-2.6/>, or if you prefer,
please test the attached patch against a 3.7-rc3 or newer kernel, for
example by using the following directions:
0. prerequisites
apt-get install git build-essential
1. get the kernel history, if you don't already have it
git clone \
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
2. configure, build, test
cd linux
git fetch origin
git checkout origin/master
cp /boot/config-3.6-trunk-amd64 .config; # stock configuration
scripts/config --disable DEBUG_INFO
make localmodconfig; # optional: minimize configuration
make deb-pkg; # optionally with -j<num> for parallel build
dpkg -i ../<name of package>; # as root
shut down, unplug, remove battery, wait a few seconds
restore power, boot
shutdown -h now
Hopefully it reproduces the bug, so
3. try the patch
cd linux
git revert 41c7f7424259
:wq
make deb-pkg; # maybe with -j4
dpkg -i ../<name of package>; # as root
... power down completely, test it ...
Hope that helps,
Jonathan
From: Jonathan Nieder <jrnieder@gmail.com>
Date: Sat, 3 Nov 2012 10:58:20 -0700
Subject: Revert "rtc: Disable the alarm in the hardware (v2)"
This reverts commit 41c7f7424259ff11009449f87c95656f69f9b186,
which should tell us whether Alessandro will want to know about
these shutdown failures.
Not signed off, only for testing.
---
drivers/rtc/interface.c | 15 ++-------------
1 file changed, 2 insertions(+), 13 deletions(-)
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c
index 9592b936b71b..c11596b9ba4e 100644
--- a/drivers/rtc/interface.c
+++ b/drivers/rtc/interface.c
@@ -782,14 +782,6 @@ static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
return 0;
}
-static void rtc_alarm_disable(struct rtc_device *rtc)
-{
- if (!rtc->ops || !rtc->ops->alarm_irq_enable)
- return;
-
- rtc->ops->alarm_irq_enable(rtc->dev.parent, false);
-}
-
/**
* rtc_timer_remove - Removes a rtc_timer from the rtc_device timerqueue
* @rtc rtc device
@@ -811,10 +803,8 @@ static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer)
struct rtc_wkalrm alarm;
int err;
next = timerqueue_getnext(&rtc->timerqueue);
- if (!next) {
- rtc_alarm_disable(rtc);
+ if (!next)
return;
- }
alarm.time = rtc_ktime_to_tm(next->expires);
alarm.enabled = 1;
err = __rtc_set_alarm(rtc, &alarm);
@@ -877,8 +867,7 @@ again:
err = __rtc_set_alarm(rtc, &alarm);
if (err == -ETIME)
goto again;
- } else
- rtc_alarm_disable(rtc);
+ }
mutex_unlock(&rtc->ops_lock);
}
--
1.8.0
Reply to: