async: make sure independent async domains can't accidentally entangle
authorJames Bottomley <James.Bottomley@HansenPartnership.com>
Sun, 24 May 2009 20:03:43 +0000 (13:03 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 24 May 2009 20:38:41 +0000 (13:38 -0700)
commitd5a877e8dd409d8c702986d06485c374b705d340
treeece6d685c074c6823d31b7db99a52134866fd1a7
parent657cafa6b0f5296424d6f43f6f6eeb4a3222117e
async: make sure independent async domains can't accidentally entangle

The problem occurs when async_synchronize_full_domain() is called when
the async_pending list is not empty.  This will cause lowest_running()
to return the cookie of the first entry on the async_pending list, which
might be nothing at all to do with the domain being asked for and thus
cause the domain synchronization to wait for an unrelated domain.   This
can cause a deadlock if domain synchronization is used from one domain
to wait for another.

Fix by running over the async_pending list to see if any pending items
actually belong to our domain (and return their cookies if they do).

Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
kernel/async.c