clockevents: Prevent clockevent_devices list corruption on cpu hotplug
authorThomas Gleixner <tglx@linutronix.de>
Thu, 10 Dec 2009 14:35:10 +0000 (15:35 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 11 Dec 2009 09:28:08 +0000 (10:28 +0100)
commitbb6eddf7676e1c1f3e637aa93c5224488d99036f
tree3256cb7ea6954f28b0bb3ccee2db570e3d0ff762
parente9c0748b687aa70179a9e6d8ffc24b2874fe350b
clockevents: Prevent clockevent_devices list corruption on cpu hotplug

Xiaotian Feng triggered a list corruption in the clock events list on
CPU hotplug and debugged the root cause.

If a CPU registers more than one per cpu clock event device, then only
the active clock event device is removed on CPU_DEAD. The unused
devices are kept in the clock events device list.

On CPU up the clock event devices are registered again, which means
that we list_add an already enqueued list_head. That results in list
corruption.

Resolve this by removing all devices which are associated to the dead
CPU on CPU_DEAD.

Reported-by: Xiaotian Feng <dfeng@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Xiaotian Feng <dfeng@redhat.com>
Cc: stable@kernel.org
kernel/time/clockevents.c