linux/drivers
Alexander Gordeev 3003d55b59 pps: fix race in PPS_FETCH handler
There was a race in PPS_FETCH ioctl handler when several processes want to
obtain PPS data simultaneously using sleeping PPS_FETCH.  They all sleep
most of the time in the system call.

With the old approach when the first process waiting on the pps queue is
waken up it makes new system call right away and zeroes pps->go.  So other
processes continue to sleep.  This is a clear race condition because of
the global 'go' variable.

With the new approach pps->last_ev holds some value increasing at each PPS
event.  PPS_FETCH ioctl handler saves current value to the local variable
at the very beginning so it can safely check that there is a new event by
just comparing both variables.

Signed-off-by: Alexander Gordeev <lasaine@lvk.cs.msu.su>
Acked-by: Rodolfo Giometti <giometti@linux.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-01-13 08:03:19 -08:00
..
accessibility
acpi Merge branch 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2011-01-07 17:02:58 -08:00
amba
ata Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev 2011-01-10 08:22:33 -08:00
atm Madge Ambassador ATM Adapter driver: Always release_firmware() in ucode_init() and don't leak memory. 2011-01-09 15:45:48 -08:00
auxdisplay
base Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2011-01-10 16:10:33 -08:00
block Merge branch 'stable/xenbus' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen 2011-01-12 08:37:35 -08:00
bluetooth
cdrom gdrom: don't use flush_scheduled_work() 2010-12-24 15:59:06 +01:00
char cs5535: deprecate older cs5535_gpio driver 2011-01-13 08:03:13 -08:00
clk
clocksource
connector
cpufreq perf: Clean up power events by introducing new, more generic ones 2011-01-04 08:16:54 +01:00
cpuidle Merge branch 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2011-01-07 17:02:58 -08:00
crypto
dca dca: remove unneeded NULL check 2011-01-13 08:03:09 -08:00
dio
dma Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2011-01-11 16:31:41 -08:00
edac Merge branch 'mce-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp 2011-01-07 14:54:03 -08:00
eisa
firewire firewire: use split transaction timeout only for split transactions 2011-01-04 08:48:34 +01:00
firmware
gpio gpio/ml_ioh_gpio: ML7213 GPIO driver 2011-01-13 08:03:14 -08:00
gpu drm/i915/execbuffer: Reorder binding of objects to favour restrictions 2011-01-11 22:55:48 +00:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid 2011-01-10 08:15:37 -08:00
hwmon hwmon: Support for Dallas Semiconductor DS620 2011-01-09 09:10:10 -08:00
i2c i2c: Constify i2c_client where possible 2011-01-10 22:11:23 +01:00
ide
idle perf: Clean up power events by introducing new, more generic ones 2011-01-04 08:16:54 +01:00
ieee802154
infiniband Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband 2011-01-11 16:30:08 -08:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid 2011-01-10 08:15:37 -08:00
isdn Merge branch 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2011-01-07 16:58:04 -08:00
leds leds: add output inversion option to backlight trigger 2011-01-13 08:03:06 -08:00
lguest
macintosh Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2011-01-11 16:31:41 -08:00
mca
md
media Merge branch 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2011-01-07 16:58:04 -08:00
memstick
message
mfd mfd: sh_mobile_sdhi: activate SDIO IRQ for tmio_mmc 2011-01-08 23:52:31 -05:00
misc Merge branch 'next-devicetree' of git://git.secretlab.ca/git/linux-2.6 2011-01-10 08:57:03 -08:00
mmc Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc 2011-01-11 11:01:24 -08:00
mtd kmsg_dump: constrain mtdoops and ramoops to perform their actions only for KMSG_DUMP_PANIC 2011-01-13 08:03:07 -08:00
net Merge branch 'stable/xenbus' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen 2011-01-12 08:37:35 -08:00
nfc NFC: Driver for NXP Semiconductors PN544 NFC chip. 2011-01-13 08:03:19 -08:00
nubus
of Merge remote branch 'gcl/next' into next 2011-01-11 15:10:08 +11:00
oprofile
parisc
parport
pci Merge branch 'stable/xenbus' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen 2011-01-12 08:37:35 -08:00
pcmcia Merge branch 'devel-stable' into devel 2011-01-06 22:33:32 +00:00
platform sony-laptop: support new hotkeys on the P, Z and EC series 2011-01-10 12:00:22 -05:00
pnp
power
pps pps: fix race in PPS_FETCH handler 2011-01-13 08:03:19 -08:00
ps3
rapidio rapidio: add new idt sRIO switches 2011-01-13 08:03:18 -08:00
regulator
rtc rtc: rtc-max6902 - set driver data in max6902_probe() 2011-01-13 08:03:12 -08:00
s390 headers: kobject.h redux 2011-01-10 08:51:44 -08:00
sbus sparc: explicitly cast negative phandle checks to s32 2011-01-03 20:02:06 -07:00
scsi Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev 2011-01-10 08:22:33 -08:00
serial Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier/blackfin 2011-01-10 17:06:08 -08:00
sfi
sh headers: kobject.h redux 2011-01-10 08:51:44 -08:00
sn
spi Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6 2011-01-10 08:14:53 -08:00
ssb ssb: Use pci_is_pcie() 2010-12-22 15:43:26 -05:00
staging cs5535: deprecate older cs5535_gpio driver 2011-01-13 08:03:13 -08:00
tc
telephony drivers/telephony/ixj.c: fix warning 2011-01-13 08:03:15 -08:00
thermal
tty Merge branch 'tty-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6 2011-01-07 14:39:20 -08:00
uio
usb Merge branch 'staging-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6 2011-01-10 16:04:53 -08:00
uwb
vhost
video vgacon: check for efi machine 2011-01-13 08:03:12 -08:00
virtio
vlynq
w1
watchdog Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-01-11 11:02:13 -08:00
xen Merge branch 'stable/xenbus' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen 2011-01-12 08:37:35 -08:00
zorro
Kconfig NFC: Driver for NXP Semiconductors PN544 NFC chip. 2011-01-13 08:03:19 -08:00
Makefile NFC: Driver for NXP Semiconductors PN544 NFC chip. 2011-01-13 08:03:19 -08:00