[Debian] Clock problems across suspend/resume. Apmd considered harmful?

Rask Ingemann Lambertsen rask at sygehus.dk
Mon Apr 13 01:32:04 CEST 2009


   User space messes up the hardware clock across syspend/resume, it seems:

Mar 25 13:01:43 debian-gta02 kernel: [32936.875000] PM: Syncing filesystems ... done.
Mar 25 13:01:50 debian-gta02 kernel: [32944.480000] pcf50633 0-0073: Masking IRQ 7
Mar 25 13:01:50 debian-gta02 kernel: [32944.500000] pcf50633 0-0073: Masking IRQ 7
Mar 25 13:01:50 debian-gta02 kernel: [32944.650000] pcf50633 0-0073: Unmasking IRQ 7
Mar 25 13:01:50 debian-gta02 kernel: [32944.690000] pcf50633 0-0073: Masking IRQ 7
Mar 25 13:01:50 debian-gta02 kernel: [32944.710000] pcf50633 0-0073: Masking IRQ 7
Mar 25 13:01:50 debian-gta02 kernel: [32944.730000] pcf50633 0-0073: Masking IRQ 7
Mar 25 13:01:50 debian-gta02 kernel: [32944.760000] pcf50633-rtc pcf50633-rtc: PCF_TIME: 25.03.09 12:01:50
Mar 25 13:01:50 debian-gta02 kernel: [32944.760000] pcf50633-rtc pcf50633-rtc: RTC_TIME: 25.2.109 12:1:50
Mar 25 13:01:50 debian-gta02 kernel: [32944.770000] pcf50633 0-0073: Masking IRQ 7
Mar 25 13:01:50 debian-gta02 kernel: [32944.790000] pcf50633 0-0073: Masking IRQ 7

   Some user space program reads the hardware clock. No problem.

Mar 25 23:00:21 debian-gta02 kernel: [32945.465000] Freezing user space processes ... (elapsed 0.02 seconds) done.
Mar 25 23:00:21 debian-gta02 kernel: [32945.495000] Freezing remaining freezable tasks ... (elapsed 0.00 seconds) done.
Mar 25 23:00:21 debian-gta02 kernel: [32945.500000] Suspending console(s) (use no_console_suspend to debug)
Mar 25 23:00:21 debian-gta02 kernel: [32945.525000] glamo-mci glamo-mci.0: glamo_mci_set_ios: power down.
Mar 25 23:00:21 debian-gta02 kernel: [32945.595000] jbt6k74 spi2.0: **** jbt6k74 suspend end
Mar 25 23:00:21 debian-gta02 kernel: [32945.595000] fbcon_event_notify action=2, data=c7b9be08
Mar 25 23:00:21 debian-gta02 kernel: [32945.595000] glamo3362 glamo3362.0: ***** glamo_power -> 1
Mar 25 23:00:21 debian-gta02 kernel: [32945.595000] neo1973-pm-bt neo1973-pm-bt.0: __gta02_pm_bt_toggle_radio 0
Mar 25 23:00:21 debian-gta02 kernel: [32945.615000] pcf50633-rtc pcf50633-rtc: PCF_TIME: 25.03.09 12:01:51
Mar 25 23:00:21 debian-gta02 kernel: [32945.615000] pcf50633-rtc pcf50633-rtc: RTC_TIME: 25.2.109 12:1:51
Mar 25 23:00:21 debian-gta02 kernel: [32945.635000] gta02_udc_command S3C2410_UDC_P_DISABLE
Mar 25 23:00:21 debian-gta02 kernel: [32945.635000] suspending dma channel 0
[snip]

   The kernel reads the hardware clock. No problem.

Mar 25 23:00:22 debian-gta02 kernel: [32945.635000] ##### callback_all_resume_dependencies(head=c0357274)
Mar 25 23:00:22 debian-gta02 kernel: [32945.695000] pcf50633-rtc pcf50633-rtc: PCF_TIME: 25.03.09 22:00:21
Mar 25 23:00:22 debian-gta02 kernel: [32945.695000] pcf50633-rtc pcf50633-rtc: RTC_TIME: 25.2.109 22:0:21
Mar 25 23:00:22 debian-gta02 kernel: [32945.695000] neo1973-pm-bt neo1973-pm-bt.0: __gta02_pm_bt_toggle_radio 0
Mar 25 23:00:22 debian-gta02 kernel: [32945.705000] neo1973-pm-bt neo1973-pm-bt.0: __gta02_pm_bt_toggle_radio 0
Mar 25 23:00:22 debian-gta02 kernel: [32945.715000] glamo3362 glamo3362.0: ***** glamo_power -> 0
[snip]

   Now the system is coming back up and the kernel reads the hardware
clock again. So far, so good.

Mar 25 23:00:22 debian-gta02 kernel: [32945.975000] glamo-mci glamo-mci.0: powered (vdd = 15) clk: 16666kHz div=2 (req: 16666kHz). Bus width=2
Mar 25 23:00:22 debian-gta02 kernel: [32945.995000] Restarting tasks ... <7>pcf50633-rtc pcf50633-rtc: RTC_TIME: 25.2.109 12:1:51
Mar 25 23:00:22 debian-gta02 kernel: [32946.005000] pcf50633-rtc pcf50633-rtc: PCF_TIME: 25.03.09 12:01:51
Mar 25 23:00:22 debian-gta02 kernel: [32946.030000] pcf50633 0-0073: Masking IRQ 6
Mar 25 23:00:22 debian-gta02 kernel: [32946.100000] pcf50633 0-0073: Unmasking IRQ 6
Mar 25 23:00:22 debian-gta02 kernel: [32946.105000] done.
Mar 25 23:00:22 debian-gta02 kernel: [32946.135000] pcf50633 0-0073: Masking IRQ 7
Mar 25 23:00:22 debian-gta02 kernel: [32946.180000] pcf50633 0-0073: Masking IRQ 7
Mar 25 23:00:22 debian-gta02 kernel: [32946.865000] fbcon_event_notify action=1, data=c6d0fdc8

   Here's a problem. User space sets the hardware clock back to suspend time.

Mar 25 23:00:23 debian-gta02 kernel: [32948.020000] rxerr: port=1 ch=0x00, rxs=0x0000000c
Mar 25 23:00:28 debian-gta02 kernel: [32953.130000] pcf50633 0-0073: Masking IRQ 7
Mar 25 23:00:28 debian-gta02 kernel: [32953.150000] pcf50633 0-0073: Masking IRQ 7
Mar 25 23:00:28 debian-gta02 kernel: [32953.215000] pcf50633 0-0073: Unmasking IRQ 7
Mar 25 23:00:28 debian-gta02 kernel: [32953.265000] pcf50633 0-0073: Masking IRQ 7
Mar 25 23:00:28 debian-gta02 kernel: [32953.300000] pcf50633 0-0073: Masking IRQ 7
Mar 25 23:00:28 debian-gta02 kernel: [32953.320000] pcf50633 0-0073: Masking IRQ 7
Mar 25 23:00:28 debian-gta02 kernel: [32953.355000] pcf50633-rtc pcf50633-rtc: PCF_TIME: 25.03.09 12:01:58
Mar 25 23:00:28 debian-gta02 kernel: [32953.355000] pcf50633-rtc pcf50633-rtc: RTC_TIME: 25.2.109 12:1:58
Mar 25 23:00:28 debian-gta02 kernel: [32953.360000] pcf50633 0-0073: Masking IRQ 7
Mar 25 23:00:28 debian-gta02 kernel: [32953.390000] pcf50633 0-0073: Masking IRQ 7
Mar 25 13:02:51 debian-gta02 kernel: [33006.645000] fbcon_event_notify action=9, data=c7b9bde0

   And here we see user space setting the system clock from the hardware
clock, that is suspend time.

   So, who might be the culprit? It looks like apmd does this:

# ls -l /etc/apm/resume.d /etc/apm/suspend.d 
/etc/apm/resume.d:
total 0
lrwxrwxrwx 1 root root 20 Dec 25 20:27 00hwclock -> ../scripts.d/hwclock
lrwxrwxrwx 1 root root 17 Dec 25 20:27 20alsa -> ../scripts.d/alsa

/etc/apm/suspend.d:
total 0
lrwxrwxrwx 1 root root 17 Dec 25 20:27 80alsa -> ../scripts.d/alsa
lrwxrwxrwx 1 root root 20 Dec 25 20:27 99hwclock -> ../scripts.d/hwclock

   I guess the systems suspends before apmd gets to run the hwclock script.
When the system resumes, the script continues, setting the clock backwards.

   Suggested fix: Stop and disable apmd:

# /etc/init.d/apmd stop
# update-rc.d -f apmd remove
# update-rc.d apmd stop 20 0 1 2 3 4 5 6 .

   Btw, it is zhone that brings in apmd as a dependency.

-- 
Rask Ingemann Lambertsen
Danish law requires addresses in e-mail to be logged and stored for a year



More information about the support mailing list