MMC core:
 - Fix an error path in the mmc block layer
 - Fix PM domain attachment for the SDIO bus
 - Add support for driver strength selection
 - Increase a delay to let voltage stabilize
 - Add support for disabling write-protect detection
 - Add facility to support re-tuning
 - Re-tune and retry in the recovery path
 - Add reset option for SDIO
 - Consolidations and clean-ups

MMC host:
 - Add Mediatek MMC driver
 - Constify platform_device_id for a couple of hosts
 - Fix modalias to make module auto-loading work for a couple of hosts
 - sdhci: Add support for sdhci-arasan4.9a
 - sdhci: Fix low memory corruption
 - sdhci: Restore behavior while creating OCR mask
 - sdhci: Add a callback to select drive strength
 - sdhci: Fix driver type B and D handling
 - sdhci: Add support for drive strength selection for SPT
 - sdhci: Enable HS400 for some Intel host controllers
 - sdhci: Convert to use the new re-tuning facility
 - sdhci: Various minor fixes and clean-ups
 - dw_mmc: Add support for hi6220
 - dw_mmc: Use core to handle absent write protect line
 - dw_mmc: Add support to switch voltage
 - tmio: Some fixes and modernizations
 - sh_mmcif: Improve clock rate calculation
mmc: queue: prevent soft lockups on PREEMPT=n

On systems with CONFIG_PREEMPT=n, under certain circumstances, mmcqd
can continuously process requests for several seconds without blocking,
triggering the soft lockup watchdog.  For example, this can happen if
mmcqd runs on the CPU which services the controller's interrupt, and
a process on a different CPU continuously writes to the MMC block
device.

 NMI watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [mmcqd/0:664]
 CPU: 0 PID: 664 Comm: mmcqd/0 Not tainted 4.1.0-rc7+ #4
 PC is at _raw_spin_unlock_irqrestore+0x24/0x28
 LR is at mmc_start_request+0x104/0x134
 ...
 [<805112a8>] (_raw_spin_unlock_irqrestore) from [<803db664>] (mmc_start_request+0x104/0x134)
 [<803db664>] (mmc_start_request) from [<803dc008>] (mmc_start_req+0x274/0x394)
 [<803dc008>] (mmc_start_req) from [<803eb2c4>] (mmc_blk_issue_rw_rq+0xd0/0xb98)
 [<803eb2c4>] (mmc_blk_issue_rw_rq) from [<803ebe8c>] (mmc_blk_issue_rq+0x100/0x470)
 [<803ebe8c>] (mmc_blk_issue_rq) from [<803ecab8>] (mmc_queue_thread+0xd0/0x170)
 [<803ecab8>] (mmc_queue_thread) from [<8003fd14>] (kthread+0xe0/0xfc)
 [<8003fd14>] (kthread) from [<8000f768>] (ret_from_fork+0x14/0x2c)

Fix it by adding a cond_resched() in the request handling loop so that
other processes get a chance to run.

Signed-off-by: Rabin Vincent <rabin.vincent@axis.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
1 file changed