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 <jrnie...@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