mmc: fix a deadlock between system suspend and MMC block IO
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Wed, 4 Jan 2012 14:28:45 +0000 (15:28 +0100)
committerChris Ball <cjb@laptop.org>
Thu, 12 Jan 2012 20:17:17 +0000 (15:17 -0500)
commit0db13fc2abbb0b1a8d8efee20dfbd7f3c5d54022
tree9932b8a8bca14f536e9a23f905919d9ee9c1a10a
parent3abc1e804253add41990cbe1461e79c1165108e0
mmc: fix a deadlock between system suspend and MMC block IO

Performing MMC block IO with simultaneous STR can lead to a deadlock: the
mmc_pm_notify() function claims the host and then calls bus .remove()
method, which lands in mmc_blk_remove(), which calls mmc_blk_remove_req()
then it goes to -> mmc_cleanup_queue() -> kthread_stop(), which waits for
the mmc-block thread to stop. If the mmc-block thread at that time is
processing block requests, it will also try to claim the host in
mmc_blk_issue_rq() and block there. This patch fixes the problem by
calling .remove() before claiming the host.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: Arindam Nath <arindam.nath@amd.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/core/core.c