clockevents: Prevent clockevent_devices list corruption on cpu hotplug
commitfa3f5a5c1c8e6a2cbc7e21755ea7c215f8cf0577
authorThomas Gleixner <tglx@linutronix.de>
Thu, 10 Dec 2009 14:35:10 +0000 (10 15:35 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 6 Jan 2010 23:03:21 +0000 (6 15:03 -0800)
treecae1c072d865b639ec0a421815ad3ef72f063cd7
parent8e04c81a2240ac2fc5d9efe804388526331ccac7
clockevents: Prevent clockevent_devices list corruption on cpu hotplug

commit bb6eddf7676e1c1f3e637aa93c5224488d99036f upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
kernel/time/clockevents.c