Hi Ulf,
On 2017/11/21 17:02, Ulf Hansson wrote:
On 20 November 2017 at 05:50, Park Huijin <bbang.huijin.park@xxxxxxxxx> wrote:
2017-11-15 18:13 GMT+09:00 Ulf Hansson <ulf.hansson@xxxxxxxxxx>:
On 14 November 2017 at 03:48, Huijin Park <huijin.park@xxxxxxxxxxx> wrote:
Some eMMC products keep busy time a little longer intermittently.
(eg. prepare free blocks, garbage collection...)
In this case, we recommend to wait a little longer than fail.
Is this an rpmb specific problem, because the code seems only to change that.
Is it write and read or only write?
Yes. It's rpmb specific problem.
RPMB R/W use same flow. but only 'write' case makes the problem(long
busy state) sometimes.
When I test it, the 5~25ms is not enough although there is not max
busy time in the spec.
As a matter of fact this isn't specific to RPMB writes at all but to
all data writes. That's why we call card_busy_detect() after a data
write.
Further more, we should cover all transfer pattern from userspace, not
just data writes. :)
https://www.spinics.net/lists/linux-mmc/msg46147.html
Signed-off-by: Huijin Park <huijin.park@xxxxxxxxxxx>
---
drivers/mmc/core/block.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index ea80ff4..b5b0fe6 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -584,7 +584,7 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,
* Ensure RPMB command has completed by polling CMD13
* "Send Status".
*/
- err = ioctl_rpmb_card_status_poll(card, &status, 5);
+ err = ioctl_rpmb_card_status_poll(card, &status, 50);
First, you are changing "re-tries" not a timeout value, which would
seem like a better approach.
I will modify it. Thanks.
Second, it seems like we should remove the
ioctl_rpmb_card_status_poll() function altogether and instead make use
of the more generic card_busy_detect() function here.
Then if card_busy_detect() needs to be adopted to suite rpmb, then we
should do that instead.
I agree that. But the two function are different a little.
'ioctl_rpmb_card_status_poll()' has interval(1~5ms) that prevent to
poll too frequently.
Well, polling too frequently is then already a problem for the general
data writes. Isn't it?
Or you think RPMB may differ a bit in this regards?
So I suggest to improve 'card_busy_detect()' about interval time in
another patch.
Okay.
However, I don't think it's a stopper, you should be able to convert
RPMB to use card_busy_detect() as is. Then you can fix the polling
interval time on top.
What you do need to fix is that card_busy_detect() takes an struct
request *req as in-parameter, and uses it to print the disk_name. I
suggest to change the in-parameter to be the disk_name instead, that
way it would work for RPMB as well.
Then the 'ioctl_rpmb_card_status_poll()' can replaced by 'card_busy_detect()'
Great!
[...]
Kind regards
Uffe
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html