1. 26 7月, 2011 1 次提交
  2. 02 7月, 2011 6 次提交
  3. 28 6月, 2011 1 次提交
  4. 24 6月, 2011 1 次提交
  5. 22 6月, 2011 1 次提交
    • J
      rtc: Avoid accumulating time drift in suspend/resume · 3dcad5ff
      John Stultz 提交于
      Because the RTC interface is only a second granular interface,
      each time we read from the RTC for suspend/resume, we introduce a
      half second (on average) of error.
      
      In order to avoid this error accumulating as the system is suspended
      over and over, this patch measures the time delta between the RTC
      and the system CLOCK_REALTIME.
      
      If the delta is less then 2 seconds from the last suspend, we compensate
      by using the previous time delta (keeping it close). If it is larger
      then 2 seconds, we assume the clock was set or has been changed, so we
      do no correction and update the delta.
      
      Note: If NTP is running, ths could seem to "fight" with the NTP corrected
      time, where as if the system time was off by 1 second, and NTP slewed the
      value in, a suspend/resume cycle could undo this correction, by trying to
      restore the previous offset from the RTC. However, without this patch,
      since each read could cause almost a full second worth of error, its
      possible to get almost 2 seconds of error just from the suspend/resume
      cycle alone, so this about equal to any offset added by the compensation.
      
      Further on systems that suspend/resume frequently, this should keep time
      closer then NTP could compensate for if the errors were allowed to
      accumulate.
      
      Credits to Arve Hjønnevåg for suggesting this solution.
      
      This patch also improves some of the variable names and adds more clear
      comments.
      
      CC: Arve Hjønnevåg <arve@android.com>
      CC: Thomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      3dcad5ff
  6. 09 6月, 2011 2 次提交
  7. 02 6月, 2011 2 次提交
  8. 27 5月, 2011 9 次提交
  9. 18 5月, 2011 1 次提交
  10. 12 5月, 2011 1 次提交
  11. 07 5月, 2011 11 次提交
    • U
      rtc: mc13xxx: Don't call rtc_device_register while holding lock · 156229b3
      Uwe Kleine-König 提交于
      Since commit f44f7f96 (RTC: Initialize kernel state from RTC)
      rtc_device_register reads the programmed alarm. As reading the alarm
      needs to take the mc13xxx lock, release it before calling
      rtc_device_register.
      
      This fixes a deadlock during boot:
      
      	INFO: task swapper:1 blocked for more than 120 seconds.
      	"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
      	swapper         D c02b175c     0     1      0 0x00000000
      	[<c02b175c>] (schedule+0x304/0x4f4) from [<c02b25a8>] (__mutex_lock_slowpath+0x7c/0x110)
      	[<c02b25a8>] (__mutex_lock_slowpath+0x7c/0x110) from [<c020b4cc>] (mc13xxx_rtc_read_time+0x1c/0x118)
      	[<c020b4cc>] (mc13xxx_rtc_read_time+0x1c/0x118) from [<c0208f04>] (__rtc_read_time+0x58/0x5c)
      	[<c0208f04>] (__rtc_read_time+0x58/0x5c) from [<c0209508>] (rtc_read_time+0x30/0x48)
      	[<c0209508>] (rtc_read_time+0x30/0x48) from [<c0209dd4>] (__rtc_read_alarm+0x1c/0x290)
      	[<c0209dd4>] (__rtc_read_alarm+0x1c/0x290) from [<c0208d58>] (rtc_device_register+0x150/0x27c)
      	[<c0208d58>] (rtc_device_register+0x150/0x27c) from [<c02b0b74>] (mc13xxx_rtc_probe+0x128/0x17c)
      	[<c02b0b74>] (mc13xxx_rtc_probe+0x128/0x17c) from [<c01d5280>] (platform_drv_probe+0x1c/0x24)
      	[<c01d5280>] (platform_drv_probe+0x1c/0x24) from [<c01d3e58>] (driver_probe_device+0x80/0x1a8)
      	[<c01d3e58>] (driver_probe_device+0x80/0x1a8) from [<c01d400c>] (__driver_attach+0x8c/0x90)
      	[<c01d400c>] (__driver_attach+0x8c/0x90) from [<c01d3654>] (bus_for_each_dev+0x60/0x8c)
      	[<c01d3654>] (bus_for_each_dev+0x60/0x8c) from [<c01d2f6c>] (bus_add_driver+0x180/0x248)
      	[<c01d2f6c>] (bus_add_driver+0x180/0x248) from [<c01d4664>] (driver_register+0x70/0x15c)
      	[<c01d4664>] (driver_register+0x70/0x15c) from [<c01d5700>] (platform_driver_probe+0x18/0x98)
      	[<c01d5700>] (platform_driver_probe+0x18/0x98) from [<c00273a8>] (do_one_initcall+0x2c/0x168)
      	[<c00273a8>] (do_one_initcall+0x2c/0x168) from [<c00083ac>] (kernel_init+0xa0/0x150)
      	[<c00083ac>] (kernel_init+0xa0/0x150) from [<c0033ff8>] (kernel_thread_exit+0x0/0x8)
      Reported-by: NVagrant Cascadian <vagrant@debian.org>
      Signed-off-by: NUwe Kleine-König <u.kleine-koenig@pengutronix.de>
      Closes: http://bugs.debian.org/625804
      [Tweaked commit log -jstultz]
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      156229b3
    • J
      rtc: rp5c01: Initialize drvdata before registering device · 130107b2
      John Stultz 提交于
      Commit f44f7f96 ("RTC: Initialize kernel state from RTC") uncovered
      an issue in a number of RTC drivers, where the drivers call
      rtc_device_register before initializing the device or platform drvdata.
      
      This frequently results in null pointer dereferences when the
      rtc_device_register immediately makes use of the rtc device, calling
      rtc_read_alarm.
      
      The solution is to ensure the drvdata is initialized prior to registering
      the rtc device.
      
      CC: Wolfram Sang <w.sang@pengutronix.de>
      CC: Alessandro Zummo <a.zummo@towertech.it>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: rtc-linux@googlegroups.com
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      130107b2
    • J
      rtc: pcap: Initialize drvdata before registering device · 4b3687f9
      John Stultz 提交于
      Commit f44f7f96 ("RTC: Initialize kernel state from RTC") uncovered
      an issue in a number of RTC drivers, where the drivers call
      rtc_device_register before initializing the device or platform drvdata.
      
      This frequently results in null pointer dereferences when the
      rtc_device_register immediately makes use of the rtc device, calling
      rtc_read_alarm.
      
      The solution is to ensure the drvdata is initialized prior to registering
      the rtc device.
      
      CC: Wolfram Sang <w.sang@pengutronix.de>
      CC: Alessandro Zummo <a.zummo@towertech.it>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: rtc-linux@googlegroups.com
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      4b3687f9
    • J
      rtc: msm6242: Initialize drvdata before registering device · 93015236
      John Stultz 提交于
      Commit f44f7f96 ("RTC: Initialize kernel state from RTC") uncovered
      an issue in a number of RTC drivers, where the drivers call
      rtc_device_register before initializing the device or platform drvdata.
      
      This frequently results in null pointer dereferences when the
      rtc_device_register immediately makes use of the rtc device, calling
      rtc_read_alarm.
      
      The solution is to ensure the drvdata is initialized prior to registering
      the rtc device.
      
      CC: Wolfram Sang <w.sang@pengutronix.de>
      CC: Alessandro Zummo <a.zummo@towertech.it>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: rtc-linux@googlegroups.com
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      93015236
    • J
      rtc: max8998: Initialize drvdata before registering device · 03cf7c47
      John Stultz 提交于
      Commit f44f7f96 ("RTC: Initialize kernel state from RTC") uncovered
      an issue in a number of RTC drivers, where the drivers call
      rtc_device_register before initializing the device or platform drvdata.
      
      This frequently results in null pointer dereferences when the
      rtc_device_register immediately makes use of the rtc device, calling
      rtc_read_alarm.
      
      The solution is to ensure the drvdata is initialized prior to registering
      the rtc device.
      
      CC: Wolfram Sang <w.sang@pengutronix.de>
      CC: Alessandro Zummo <a.zummo@towertech.it>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: rtc-linux@googlegroups.com
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      03cf7c47
    • J
      rtc: max8925: Initialize drvdata before registering device · 2f5c4fe8
      John Stultz 提交于
      Commit f44f7f96 ("RTC: Initialize kernel state from RTC") uncovered
      an issue in a number of RTC drivers, where the drivers call
      rtc_device_register before initializing the device or platform drvdata.
      
      This frequently results in null pointer dereferences when the
      rtc_device_register immediately makes use of the rtc device, calling
      rtc_read_alarm.
      
      The solution is to ensure the drvdata is initialized prior to registering
      the rtc device.
      
      CC: Wolfram Sang <w.sang@pengutronix.de>
      CC: Alessandro Zummo <a.zummo@towertech.it>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: rtc-linux@googlegroups.com
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      2f5c4fe8
    • J
      rtc: m41t80: Initialize clientdata before registering device · a015dbc1
      John Stultz 提交于
      Commit f44f7f96 ("RTC: Initialize kernel state from RTC") uncovered
      an issue in a number of RTC drivers, where the drivers call
      rtc_device_register before initializing the clientdata.
      
      This frequently results in null pointer dereferences when the
      rtc_device_register immediately makes use of the rtc device, calling
      rtc_read_alarm.
      
      The solution is to ensure the clientdata is initialized prior to registering
      the rtc device.
      
      CC: Wolfram Sang <w.sang@pengutronix.de>
      CC: Alessandro Zummo <a.zummo@towertech.it>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: rtc-linux@googlegroups.com
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      a015dbc1
    • J
      rtc: ds1286: Initialize drvdata before registering device · 9a281a67
      John Stultz 提交于
      Commit f44f7f96 ("RTC: Initialize kernel state from RTC") uncovered
      an issue in a number of RTC drivers, where the drivers call
      rtc_device_register before initializing the device or platform drvdata.
      
      This frequently results in null pointer dereferences when the
      rtc_device_register immediately makes use of the rtc device, calling
      rtc_read_alarm.
      
      The solution is to ensure the drvdata is initialized prior to registering
      the rtc device.
      
      CC: Wolfram Sang <w.sang@pengutronix.de>
      CC: Alessandro Zummo <a.zummo@towertech.it>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: rtc-linux@googlegroups.com
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      9a281a67
    • W
      rtc: ep93xx: Initialize drvdata before registering device · 92d921c5
      Wolfram Sang 提交于
      Commit f44f7f96 ("RTC: Initialize kernel state from RTC") uncovered
      an issue in a number of RTC drivers, where the drivers call
      rtc_device_register before initializing the device or platform drvdata.
      
      This frequently results in null pointer dereferences when the
      rtc_device_register immediately makes use of the rtc device, calling
      rtc_read_alarm.
      
      The solution is to ensure the drvdata is initialized prior to registering
      the rtc device.
      
      CC: Alessandro Zummo <a.zummo@towertech.it>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: rtc-linux@googlegroups.com
      Signed-off-by: NWolfram Sang <w.sang@pengutronix.de>
      [Fixed up commit log -jstultz]
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      92d921c5
    • W
      rtc: davinci: Initialize drvdata before registering device · f4e708ae
      Wolfram Sang 提交于
      Commit f44f7f96 ("RTC: Initialize kernel state from RTC") uncovered
      an issue in a number of RTC drivers, where the drivers call
      rtc_device_register before initializing the device or platform drvdata.
      
      This frequently results in null pointer dereferences when the
      rtc_device_register immediately makes use of the rtc device, calling
      rtc_read_alarm.
      
      The solution is to ensure the drvdata is initialized prior to registering
      the rtc device.
      
      CC: Alessandro Zummo <a.zummo@towertech.it>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: rtc-linux@googlegroups.com
      Signed-off-by: NWolfram Sang <w.sang@pengutronix.de>
      [fixed up commit log -jstultz]
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      f4e708ae
    • W
      rtc: mxc: Initialize drvdata before registering device · 5f54c8a0
      Wolfram Sang 提交于
      Commit f44f7f96 ("RTC: Initialize kernel state from RTC") uncovered
      an issue in a number of RTC drivers, where the drivers call
      rtc_device_register before initializing the device or platform drvdata.
      
      This frequently results in null pointer dereferences when the
      rtc_device_register immediately makes use of the rtc device, calling
      rtc_read_alarm.
      
      The solution is to ensure the drvdata is initialized prior to registering
      the rtc device.
      
      CC: Alessandro Zummo <a.zummo@towertech.it>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: rtc-linux@googlegroups.com
      Signed-off-by: NWolfram Sang <w.sang@pengutronix.de>
      [fixed up commit log -jstultz]
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      5f54c8a0
  12. 03 5月, 2011 1 次提交
  13. 28 4月, 2011 1 次提交
  14. 27 4月, 2011 1 次提交
    • J
      time: Add timekeeping_inject_sleeptime · 304529b1
      John Stultz 提交于
      Some platforms cannot implement read_persistent_clock, as
      their RTC devices are only accessible when interrupts are enabled.
      This keeps them from being used by the timekeeping code on resume
      to measure the time in suspend.
      
      The RTC layer tries to work around this, by calling do_settimeofday
      on resume after irqs are reenabled to set the time properly. However,
      this only corrects CLOCK_REALTIME, and does not properly adjust
      the sleep time value. This causes btime in /proc/stat to be incorrect
      as well as making the new CLOCK_BOTTTIME inaccurate.
      
      This patch resolves the issue by introducing a new timekeeping hook
      to allow the RTC layer to inject the sleep time on resume.
      
      The code also checks to make sure that read_persistent_clock is
      nonfunctional before setting the sleep time, so that should the RTC's
      HCTOSYS option be configured in on a system that does support
      read_persistent_clock we will not increase the total_sleep_time twice.
      
      CC: Arve Hjønnevåg <arve@android.com>
      CC: Thomas Gleixner <tglx@linutronix.de>
      Acked-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      304529b1
  15. 21 4月, 2011 1 次提交