Tool/software: Linux
Hello,
We've noticed an issue that causes the mmcqd thread to hang in an uninterruptible state, starving the other threads. This happens if we remove the SD card from its slot during I/O operations.
Checking the kernel, we've noticed that the mmc layer correctly detects the there has been a timeout during communication with the target, and tell the upper layers to abort, but the thread keeps trying to start new requisitions (mmc_start_req), eventually hanging. The omap_hsmmc also identifies the timeout, signalizing that 0 bytes were transfered.
While I understand that the operation should be retried a few times in case of spurious timeouts, I can't find the reason that it just doesn't give up after a reasonable number of tries.
With this in mind, i have two questions:
1 - Is there any way to signal the mmcqd that it should give up on waiting for the data?
2 - If I wish to implement a mechanism to forcefully finish the mmcqd thread, what is the best course?
We are using the 3.2 Kernel, and updating it is out of the question. Our MMC slot has no pin for card detection as well.
Regards,
Guilherme