MN10300: Prevent cnt32_to_63() from being preempted in sched_clock()
commit3b950de9c94b4b9fde4f1340358ab52ce0f34be0
authorDavid Howells <dhowells@redhat.com>
Wed, 27 Oct 2010 16:28:35 +0000 (27 17:28 +0100)
committerDavid Howells <dhowells@redhat.com>
Wed, 27 Oct 2010 16:28:35 +0000 (27 17:28 +0100)
tree724923f90b0d12bd6e0374b73e8fd06d8d8787e1
parentdcd42ed3ea829aa99cf00d34c61e082ce575b193
MN10300: Prevent cnt32_to_63() from being preempted in sched_clock()

Prevent cnt32_to_63() from being preempted in sched_clock() because it may
read its internal counter, get preempted, get delayed for more than the half
period of the 'TSC' and then write the internal counter, thus corrupting it.

Whilst some callers of sched_clock() have interrupts disabled or hold
spinlocks, not all do, and so preemption must be held here.

Note that sched_clock() is called from lockdep, but that shouldn't be a problem
because although preempt_disable() calls into lockdep, lockdep has a recursion
counter to deal with this.

Signed-off-by: David Howells <dhowells@redhat.com>
arch/mn10300/kernel/time.c