linux/include
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
..
acpi ACPI: video: fix build for CONFIG_ACPI=n 2010-12-11 02:01:46 -05:00
asm-generic gpiolib: annotate gpio-intialization with __must_check 2011-01-13 08:03:14 -08:00
crypto
drm Merge branch 'drm-radeon-ni' of ../drm-radeon-next into drm-core-next 2011-01-10 09:27:06 +10:00
keys keys: add new key-type encrypted 2010-11-29 08:55:29 +11:00
linux pps: fix race in PPS_FETCH handler 2011-01-13 08:03:19 -08:00
math-emu
media Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6 2011-01-06 18:32:12 -08:00
mtd
net ah: update maximum truncated ICV length 2011-01-11 14:03:10 -08:00
pcmcia
rdma
rxrpc
scsi [SCSI] libiscsi: do not take host lock in queuecommand 2010-12-31 09:52:44 -06:00
sound
trace tracing: remove duplicate null-pointer check in skb tracepoint 2011-01-07 20:55:42 -05:00
video Merge branch 'fbdev/udlfb' 2011-01-06 18:10:09 +09: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
Kbuild