posix timers: Allocate timer id per process (v2)
authorPavel Emelyanov <xemul@parallels.com>
Mon, 11 Mar 2013 09:12:21 +0000 (13:12 +0400)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 17 Apr 2013 18:51:01 +0000 (20:51 +0200)
commit5ed67f05f66c41e39880a6d61358438a25f9fee5
treed3e52cca63e119a1f437b660f5d7a553f8ee37bc
parent4e8f8b34b92b6514cc070aeb94d317cadd5071d7
posix timers: Allocate timer id per process (v2)

Currently kernel generates IDs for posix timers in a global manner --
there's a kernel-wide IDR tree from which IDs are created. This makes
it impossible to recreate a timer with a desired ID (in particular
this is done by the CRIU checkpoint-restore project) -- since these
IDs are global it may happen, that at the time we recreate a timer, the
ID we want for it is already busy by some other timer.

In order to address this, replace the IDR tree with a global hash
table for timers and makes timer IDs unique per signal_struct (to
which timers are linked anyway). With this, two timers belonging to
different processes may have equal IDs and we can recreate either of
them with the ID we want.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Michael Kerrisk <mtk.manpages@gmail.com>
Cc: Matthew Helsley <matt.helsley@gmail.com>
Link: http://lkml.kernel.org/r/513D9FF5.9010004@parallels.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
include/linux/posix-timers.h
include/linux/sched.h
kernel/posix-timers.c