linux/drivers
Mark Lord 0e36a9a4a7 rtc: fix readback from /sys/class/rtc/rtc?/wakealarm
Fix readback of RTC alarms on platforms which return -1 in
non-hardware-supported RTC alarm fields.

To fill in the missing (-1) values, we grab an RTC timestamp along with the
RTC alarm value, and use the timestamp fields to populate the missing alarm
fields.

To counter field-wrap races (since the timestamp and alarm are not read
together atomically), we read the RTC timestamp both before and after
reading the RTC alarm value, and then check for wrapped fields --> if any
have wrapped, we know we have a possible inconsistency, so we loop and
reread the timestamp and alarm again.

Wrapped fields in the RTC timestamps are an issue because rtc-cmos.c, for
example, also gets/uses an RTC timestamp internally while fetching the RTC
alarm.  If our timestamp here wasn't the same (minutes and higher) as what
was used internally there, then we might end up populating the -1 fields
with inconsistent values.

This fixes readbacks from /sys/class/rtc/rtc?/wakealarm, as well as other
code paths which call rtc_read_alarm().

Signed-off-by: Mark Lord <mlord@pobox.com>
Cc: David Brownell <david-b@pacbell.net>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-10-16 09:43:13 -07:00
..
acorn/char
acpi more trivial signedness fixes in drivers 2007-10-14 12:41:52 -07:00
amba
ata docbook: fix libata content 2007-10-15 17:56:36 -07:00
atm more trivial signedness fixes in drivers 2007-10-14 12:41:52 -07:00
auxdisplay
base mm: add node states sysfs class attributeS 2007-10-16 09:43:03 -07:00
block deny partial write for loop dev fd 2007-10-16 09:42:55 -07:00
bluetooth
cdrom
char Memoryless nodes: Uncached allocator updates 2007-10-16 09:42:58 -07:00
clocksource
connector
cpufreq
crypto
dca I/OAT: Add DCA services 2007-10-16 09:43:09 -07:00
dio
dma I/OAT: Add DCA services 2007-10-16 09:43:09 -07:00
edac
eisa signedness: module_param_array nump argument 2007-10-14 12:41:52 -07:00
fc4 Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2007-10-15 08:19:33 -07:00
firewire fw-cdev __user annotations 2007-10-14 12:41:51 -07:00
firmware
hid HID: fix HIDIOCGRDESC memory access in hidraw 2007-10-15 08:12:00 -07:00
hwmon Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2007-10-15 13:41:39 -07:00
i2c Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm 2007-10-15 16:08:50 -07:00
ide
ieee1394
infiniband IB/ipoib: Verify address handle validity on send 2007-10-15 14:20:45 -04:00
input Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm 2007-10-15 16:08:50 -07:00
isdn isdn: guard against a potential NULL pointer dereference in old_capi_manufacturer() 2007-10-16 09:43:10 -07:00
kvm sched: guest CPU accounting: maintain guest state in KVM 2007-10-15 17:00:19 +02:00
leds [ARM] 4576/1: CM-X270 machine support 2007-10-15 18:53:57 +01:00
lguest
macintosh
mca
md
media signedness: module_param_array nump argument 2007-10-14 12:41:52 -07:00
message docbook: fix kernel-api content 2007-10-15 17:56:36 -07:00
mfd
misc Map volume and brightness events on thinkpads 2007-10-15 13:54:40 -07:00
mmc spi doesn't need class_device 2007-10-16 09:43:10 -07:00
mtd Reinstate lost flush_ioremap_region() fix to pxa2xx-flash driver 2007-10-15 12:55:20 -07:00
net Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm 2007-10-15 16:08:50 -07:00
nubus
of
oprofile
parisc
parport
pci Get rid of unused variable warning in drivers/pci/hotplug/pci_hotplug_core.c 2007-10-15 09:07:58 -07:00
pcmcia pcmcia: use DMA_MASK_NONE for the default for all pcmcia devices 2007-10-16 09:42:50 -07:00
pnp
power
ps3
rapidio
rtc rtc: fix readback from /sys/class/rtc/rtc?/wakealarm 2007-10-16 09:43:13 -07:00
s390 Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2007-10-15 08:19:33 -07:00
sbus
scsi scsi/gdth: fix crash in gdth_timeout if no gdth controllers found 2007-10-15 12:46:16 -07:00
serial tty: bring the old cris driver back somewhere into the realm of new tty buffering 2007-10-16 09:43:04 -07:00
sh
sn
spi spi doesn't need class_device 2007-10-16 09:43:10 -07:00
ssb missing include in ssb 2007-10-14 08:53:33 -07:00
tc
telephony
uio
usb docbook: fix usb content 2007-10-15 17:56:36 -07:00
video Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm 2007-10-15 16:08:50 -07:00
w1
xen
zorro
Kconfig DCA: Add Direct Cache Access driver 2007-10-16 09:43:09 -07:00
Makefile DCA: Add Direct Cache Access driver 2007-10-16 09:43:09 -07:00