* [PATCH V1] mmc: core: fix still flush cache when eMMC cache off
@ 2017-03-19 0:45 Bean Huo (beanhuo)
2017-03-20 7:33 ` Shawn Lin
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Bean Huo (beanhuo) @ 2017-03-19 0:45 UTC (permalink / raw)
To: ulf.hansson, linus.walleij, shawn.lin, adrian.hunter, axboe
Cc: linux-mmc, linux-kernel, Bean Huo (beanhuo),
Zoltan Szubbocsev (zszubbocsev)
This patch fixes the issue that mmc_blk_issue_rq still
flushes cache when eMMC cache has already been off
through user space tool, such as mmc-utils.
The reason is that card->ext_csd.cache_ctrl isn't reset.
Signed-off-by: beanhuo <beanhuo@micron.com>
---
drivers/mmc/core/block.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index 1621fa0..fb3635ac 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -64,6 +64,7 @@ MODULE_ALIAS("mmc:block");
#define MMC_BLK_TIMEOUT_MS (10 * 60 * 1000) /* 10 minute timeout */
#define MMC_SANITIZE_REQ_TIMEOUT 240000
#define MMC_EXTRACT_INDEX_FROM_ARG(x) ((x & 0x00FF0000) >> 16)
+#define MMC_EXTRACT_VALUE_FROM_ARG(x) ((x & 0x0000FF00) >> 8)
#define mmc_req_rel_wr(req) ((req->cmd_flags & REQ_FUA) && \
(rq_data_dir(req) == WRITE))
@@ -535,6 +536,14 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,
return data.error;
}
+ if ((MMC_EXTRACT_INDEX_FROM_ARG(cmd.arg) == EXT_CSD_CACHE_CTRL) &&
+ (cmd.opcode == MMC_SWITCH) && (card->ext_csd.cache_size > 0)) {
+ if (MMC_EXTRACT_VALUE_FROM_ARG(cmd.arg) & 1)
+ card->ext_csd.cache_ctrl = 1;
+ else
+ card->ext_csd.cache_ctrl = 0;
+ }
+
/*
* According to the SD specs, some commands require a delay after
* issuing the command.
--
2.7.4
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH V1] mmc: core: fix still flush cache when eMMC cache off 2017-03-19 0:45 [PATCH V1] mmc: core: fix still flush cache when eMMC cache off Bean Huo (beanhuo) @ 2017-03-20 7:33 ` Shawn Lin [not found] ` <CGME20170320113503epcas1p1115fcb2a974a38a4133230b5b9013fbb@epcas1p1.samsung.com> 2017-03-23 10:03 ` Ulf Hansson 2 siblings, 0 replies; 8+ messages in thread From: Shawn Lin @ 2017-03-20 7:33 UTC (permalink / raw) To: Bean Huo (beanhuo), adrian.hunter, axboe Cc: ulf.hansson, linus.walleij, linux-mmc, linux-kernel, Zoltan Szubbocsev (zszubbocsev) Hi On 2017/3/19 8:45, Bean Huo (beanhuo) wrote: > This patch fixes the issue that mmc_blk_issue_rq still > flushes cache when eMMC cache has already been off > through user space tool, such as mmc-utils. I did a quick test and see the case you refer to, so Tested-by: Shawn Lin <shawn.lin@rock-chips.com> Reviewed-by: Shawn Lin <shawn.lin@rock-chips.com> > The reason is that card->ext_csd.cache_ctrl isn't reset. > > Signed-off-by: beanhuo <beanhuo@micron.com> > --- > drivers/mmc/core/block.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c > index 1621fa0..fb3635ac 100644 > --- a/drivers/mmc/core/block.c > +++ b/drivers/mmc/core/block.c > @@ -64,6 +64,7 @@ MODULE_ALIAS("mmc:block"); > #define MMC_BLK_TIMEOUT_MS (10 * 60 * 1000) /* 10 minute timeout */ > #define MMC_SANITIZE_REQ_TIMEOUT 240000 > #define MMC_EXTRACT_INDEX_FROM_ARG(x) ((x & 0x00FF0000) >> 16) > +#define MMC_EXTRACT_VALUE_FROM_ARG(x) ((x & 0x0000FF00) >> 8) > > #define mmc_req_rel_wr(req) ((req->cmd_flags & REQ_FUA) && \ > (rq_data_dir(req) == WRITE)) > @@ -535,6 +536,14 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md, > return data.error; > } > > + if ((MMC_EXTRACT_INDEX_FROM_ARG(cmd.arg) == EXT_CSD_CACHE_CTRL) && > + (cmd.opcode == MMC_SWITCH) && (card->ext_csd.cache_size > 0)) { > + if (MMC_EXTRACT_VALUE_FROM_ARG(cmd.arg) & 1) > + card->ext_csd.cache_ctrl = 1; > + else > + card->ext_csd.cache_ctrl = 0; > + } > + > /* > * According to the SD specs, some commands require a delay after > * issuing the command. > ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <CGME20170320113503epcas1p1115fcb2a974a38a4133230b5b9013fbb@epcas1p1.samsung.com>]
* Re: [PATCH V1] mmc: core: fix still flush cache when eMMC cache off [not found] ` <CGME20170320113503epcas1p1115fcb2a974a38a4133230b5b9013fbb@epcas1p1.samsung.com> @ 2017-03-20 11:35 ` Bartlomiej Zolnierkiewicz 2017-03-22 17:31 ` Bean Huo (beanhuo) 0 siblings, 1 reply; 8+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2017-03-20 11:35 UTC (permalink / raw) To: Bean Huo (beanhuo) Cc: ulf.hansson, linus.walleij, shawn.lin, adrian.hunter, axboe, linux-mmc, linux-kernel, Zoltan Szubbocsev (zszubbocsev) On Sunday, March 19, 2017 12:45:40 AM Bean Huo wrote: > This patch fixes the issue that mmc_blk_issue_rq still > flushes cache when eMMC cache has already been off > through user space tool, such as mmc-utils. > The reason is that card->ext_csd.cache_ctrl isn't reset. > > Signed-off-by: beanhuo <beanhuo@micron.com> Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH V1] mmc: core: fix still flush cache when eMMC cache off 2017-03-20 11:35 ` Bartlomiej Zolnierkiewicz @ 2017-03-22 17:31 ` Bean Huo (beanhuo) 0 siblings, 0 replies; 8+ messages in thread From: Bean Huo (beanhuo) @ 2017-03-22 17:31 UTC (permalink / raw) To: ulf.hansson Cc: linus.walleij, shawn.lin, adrian.hunter, axboe, linux-mmc, linux-kernel, Zoltan Szubbocsev (zszubbocsev), Bartlomiej Zolnierkiewicz Ping Linux-mmc maintainer... Tested-by: Shawn Lin <shawn.lin@rock-chips.com> Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> Reviewed-by: Shawn Lin <shawn.lin@rock-chips.com> >On Sunday, March 19, 2017 12:45:40 AM Bean Huo wrote: >> This patch fixes the issue that mmc_blk_issue_rq still flushes cache >> when eMMC cache has already been off through user space tool, such as >> mmc-utils. >> The reason is that card->ext_csd.cache_ctrl isn't reset. >> >> Signed-off-by: beanhuo <beanhuo@micron.com> > > >Best regards, >-- >Bartlomiej Zolnierkiewicz >Samsung R&D Institute Poland >Samsung Electronics > >-- >To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of >a message to majordomo@vger.kernel.org More majordomo info at >http://vger.kernel.org/majordomo-info.html //beanhuo ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH V1] mmc: core: fix still flush cache when eMMC cache off 2017-03-19 0:45 [PATCH V1] mmc: core: fix still flush cache when eMMC cache off Bean Huo (beanhuo) 2017-03-20 7:33 ` Shawn Lin [not found] ` <CGME20170320113503epcas1p1115fcb2a974a38a4133230b5b9013fbb@epcas1p1.samsung.com> @ 2017-03-23 10:03 ` Ulf Hansson 2017-03-23 10:45 ` Bean Huo (beanhuo) 2 siblings, 1 reply; 8+ messages in thread From: Ulf Hansson @ 2017-03-23 10:03 UTC (permalink / raw) To: Bean Huo (beanhuo) Cc: linus.walleij, shawn.lin, adrian.hunter, axboe, linux-mmc, linux-kernel, Zoltan Szubbocsev (zszubbocsev) On 19 March 2017 at 01:45, Bean Huo (beanhuo) <beanhuo@micron.com> wrote: > This patch fixes the issue that mmc_blk_issue_rq still > flushes cache when eMMC cache has already been off > through user space tool, such as mmc-utils. > The reason is that card->ext_csd.cache_ctrl isn't reset. First, why do you want to turn of the cache ctrl? Is the eMMC device having issues with it? Then we should invent a card quirk instead. Second, what errors do you encounter when the mmc core tries to flush the cache when it has been turned off? Can you please elaborate on this. > > Signed-off-by: beanhuo <beanhuo@micron.com> > --- > drivers/mmc/core/block.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c > index 1621fa0..fb3635ac 100644 > --- a/drivers/mmc/core/block.c > +++ b/drivers/mmc/core/block.c > @@ -64,6 +64,7 @@ MODULE_ALIAS("mmc:block"); > #define MMC_BLK_TIMEOUT_MS (10 * 60 * 1000) /* 10 minute timeout */ > #define MMC_SANITIZE_REQ_TIMEOUT 240000 > #define MMC_EXTRACT_INDEX_FROM_ARG(x) ((x & 0x00FF0000) >> 16) > +#define MMC_EXTRACT_VALUE_FROM_ARG(x) ((x & 0x0000FF00) >> 8) > > #define mmc_req_rel_wr(req) ((req->cmd_flags & REQ_FUA) && \ > (rq_data_dir(req) == WRITE)) > @@ -535,6 +536,14 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md, > return data.error; > } > > + if ((MMC_EXTRACT_INDEX_FROM_ARG(cmd.arg) == EXT_CSD_CACHE_CTRL) && > + (cmd.opcode == MMC_SWITCH) && (card->ext_csd.cache_size > 0)) { > + if (MMC_EXTRACT_VALUE_FROM_ARG(cmd.arg) & 1) > + card->ext_csd.cache_ctrl = 1; > + else > + card->ext_csd.cache_ctrl = 0; > + } > + I am sure "cache ctrl" isn't the only thing user space via mmc ioctl can cause problems for. The mmc core keep tracks of other ext csd states, etc, as well. I don't think it's worth to compensate and try to act accordingly to cover cases when user space has messed up. To be clear, it would have been entirely different if the something was changed via a mmc sysfs interface. Then we really should act accordingly, however for mmc ioctls it just becomes unmanageable due to its flexibility. > /* > * According to the SD specs, some commands require a delay after > * issuing the command. > -- > 2.7.4 Kind regards Uffe ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH V1] mmc: core: fix still flush cache when eMMC cache off 2017-03-23 10:03 ` Ulf Hansson @ 2017-03-23 10:45 ` Bean Huo (beanhuo) 2017-03-23 13:10 ` Ulf Hansson 0 siblings, 1 reply; 8+ messages in thread From: Bean Huo (beanhuo) @ 2017-03-23 10:45 UTC (permalink / raw) To: Ulf Hansson Cc: linus.walleij, shawn.lin, adrian.hunter, axboe, linux-mmc, linux-kernel, Zoltan Szubbocsev (zszubbocsev) Hi, >On 19 March 2017 at 01:45, Bean Huo (beanhuo) <beanhuo@micron.com> wrote: >> This patch fixes the issue that mmc_blk_issue_rq still flushes cache >> when eMMC cache has already been off through user space tool, such as >> mmc-utils. >> The reason is that card->ext_csd.cache_ctrl isn't reset. > >First, why do you want to turn of the cache ctrl? Is the eMMC device having >issues with it? Then we should invent a card quirk instead. Why I turn off it? because I did power loss testing and validation, I should switch it off and on. When I do some performance and power loss case validation on several Linux release versions, I need to switch off or on cache through user space tool. I can't confirm every user that likes me, But I think at least it is not reasonable to flush eMMC cache, when internal eMMC cache is off. >Second, what errors do you encounter when the mmc core tries to flush the >cache when it has been turned off? Can you please elaborate on this? No error found, but firstly, please think about overhead introduced by useless flush cache, Unless you Don't care this tiny time. second, under the condition of cache off, additional flush cache request still has impact on Internal eMMC logic. I don't know What and how impact, but at least it is really exist. >> >> Signed-off-by: beanhuo <beanhuo@micron.com> >> --- >> drivers/mmc/core/block.c | 9 +++++++++ >> 1 file changed, 9 insertions(+) >> >> diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index >> 1621fa0..fb3635ac 100644 >> --- a/drivers/mmc/core/block.c >> +++ b/drivers/mmc/core/block.c >> @@ -64,6 +64,7 @@ MODULE_ALIAS("mmc:block"); >> #define MMC_BLK_TIMEOUT_MS (10 * 60 * 1000) /* 10 minute timeout */ >> #define MMC_SANITIZE_REQ_TIMEOUT 240000 #define >> MMC_EXTRACT_INDEX_FROM_ARG(x) ((x & 0x00FF0000) >> 16) >> +#define MMC_EXTRACT_VALUE_FROM_ARG(x) ((x & 0x0000FF00) >> 8) >> >> #define mmc_req_rel_wr(req) ((req->cmd_flags & REQ_FUA) && \ >> (rq_data_dir(req) == WRITE)) @@ >> -535,6 +536,14 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, >struct mmc_blk_data *md, >> return data.error; >> } >> >> + if ((MMC_EXTRACT_INDEX_FROM_ARG(cmd.arg) == >EXT_CSD_CACHE_CTRL) && >> + (cmd.opcode == MMC_SWITCH) && (card->ext_csd.cache_size > 0)) { >> + if (MMC_EXTRACT_VALUE_FROM_ARG(cmd.arg) & 1) >> + card->ext_csd.cache_ctrl = 1; >> + else >> + card->ext_csd.cache_ctrl = 0; >> + } >> + > >I am sure "cache ctrl" isn't the only thing user space via mmc ioctl can cause >problems for. The mmc core keep tracks of other ext csd states, etc, as well. I >don't think it's worth to compensate and try to act accordingly to cover cases >when user space has messed up. > >To be clear, it would have been entirely different if the something was changed >via a mmc sysfs interface. Then we really should act accordingly, however for >mmc ioctls it just becomes unmanageable due to its flexibility. I will check this later. But flush cache seams now there is only one entry, and It checks "cache_ctrl". > >> /* >> * According to the SD specs, some commands require a delay after >> * issuing the command. >> -- >> 2.7.4 > >Kind regards >Uffe >-- >To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of >a message to majordomo@vger.kernel.org More majordomo info at >http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH V1] mmc: core: fix still flush cache when eMMC cache off 2017-03-23 10:45 ` Bean Huo (beanhuo) @ 2017-03-23 13:10 ` Ulf Hansson 2017-03-24 11:16 ` Bean Huo (beanhuo) 0 siblings, 1 reply; 8+ messages in thread From: Ulf Hansson @ 2017-03-23 13:10 UTC (permalink / raw) To: Bean Huo (beanhuo) Cc: linus.walleij, shawn.lin, adrian.hunter, axboe, linux-mmc, linux-kernel, Zoltan Szubbocsev (zszubbocsev) On 23 March 2017 at 11:45, Bean Huo (beanhuo) <beanhuo@micron.com> wrote: > Hi, > >>On 19 March 2017 at 01:45, Bean Huo (beanhuo) <beanhuo@micron.com> wrote: >>> This patch fixes the issue that mmc_blk_issue_rq still flushes cache >>> when eMMC cache has already been off through user space tool, such as >>> mmc-utils. >>> The reason is that card->ext_csd.cache_ctrl isn't reset. >> >>First, why do you want to turn of the cache ctrl? Is the eMMC device having >>issues with it? Then we should invent a card quirk instead. > > > Why I turn off it? because I did power loss testing and validation, I should switch it off and on. > When I do some performance and power loss case validation on several Linux release versions, > I need to switch off or on cache through user space tool. > I can't confirm every user that likes me, But I think at least it is not reasonable to > flush eMMC cache, when internal eMMC cache is off. Ah, I see. Your use-case seems reasonable while validating robustness of the eMMC! > >>Second, what errors do you encounter when the mmc core tries to flush the >>cache when it has been turned off? Can you please elaborate on this? > > > No error found, but firstly, please think about overhead introduced by useless flush cache, Unless you > Don't care this tiny time. second, under the condition of cache off, additional flush cache request still has impact on > Internal eMMC logic. I don't know What and how impact, but at least it is really exist. Got it! However I still don't like the mmc ioctls API to compensate and deal with all "crazy-ness" that user-space may cause. Cache-ctrl is only one case out of many. I see two viable options to solve your problem. 1) Extend mmc_test with a new test(s) for cache ctrl and perhaps suspend/resume. Isn't this actually exactly what you want? 2) Extend debugfs to be able to turn cache ctrl on/off. [...] Kind regards Uffe ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH V1] mmc: core: fix still flush cache when eMMC cache off 2017-03-23 13:10 ` Ulf Hansson @ 2017-03-24 11:16 ` Bean Huo (beanhuo) 0 siblings, 0 replies; 8+ messages in thread From: Bean Huo (beanhuo) @ 2017-03-24 11:16 UTC (permalink / raw) To: Ulf Hansson Cc: linus.walleij, shawn.lin, adrian.hunter, axboe, linux-mmc, linux-kernel, Zoltan Szubbocsev (zszubbocsev) Hi, Uffe >>>On 19 March 2017 at 01:45, Bean Huo (beanhuo) <beanhuo@micron.com> >wrote: >>>> This patch fixes the issue that mmc_blk_issue_rq still flushes cache >>>> when eMMC cache has already been off through user space tool, such >>>> as mmc-utils. >>>> The reason is that card->ext_csd.cache_ctrl isn't reset. >>> >>>First, why do you want to turn of the cache ctrl? Is the eMMC device >>>having issues with it? Then we should invent a card quirk instead. >> >> >> Why I turn off it? because I did power loss testing and validation, I should >switch it off and on. >> When I do some performance and power loss case validation on several >> Linux release versions, I need to switch off or on cache through user space tool. >> I can't confirm every user that likes me, But I think at least it is >> not reasonable to flush eMMC cache, when internal eMMC cache is off. > >Ah, I see. Your use-case seems reasonable while validating robustness of the >eMMC! > >> >>>Second, what errors do you encounter when the mmc core tries to flush >>>the cache when it has been turned off? Can you please elaborate on this? >> >> >> No error found, but firstly, please think about overhead introduced by >> useless flush cache, Unless you Don't care this tiny time. second, >> under the condition of cache off, additional flush cache request still has impact >>on Internal eMMC logic. I don't know What and how impact, but at least it is >>really exist. > >Got it! > >However I still don't like the mmc ioctls API to compensate and deal with all >"crazy-ness" that user-space may cause. Cache-ctrl is only one case out of many. Question is that not every Linux-mmc user really understand that shouldn't use "mmc ioctls API to compensate and deal with all crazy-ness that user-space may cause ". no matter we like or dislike, Issue is already there; I think that most of eMMC user is now configuring eMMC through mmc-utils and mmc ioctls. This is a real condition. Some automotive applications, Cache would not be enabled. Maybe I am shallow, mmc ioctls likes backdoor that let user access and configure eMMC some feature, Even not too often. I still suggest to fix this in mmc ioctls, unless mmc iotcls being deleted, and mmc-utils doesn't support Cache off/on. Because eMMC internal cache has been disabled, but Linux-mmc still issue flush cache request, this is indeed Not reasonable. It definitely increases system level overhead. >I see two viable options to solve your problem. >1) Extend mmc_test with a new test(s) for cache ctrl and perhaps suspend/resume. >Isn't this actually exactly what you want? >2) Extend debugfs to be able to turn cache ctrl on/off. I can try, but this patch is just to fix mmc ctrls backdoor on eMMC flush cache. >[...] > >Kind regards >Uffe >-- >To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of >a message to majordomo@vger.kernel.org More majordomo info at >http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-03-24 11:16 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-19 0:45 [PATCH V1] mmc: core: fix still flush cache when eMMC cache off Bean Huo (beanhuo)
2017-03-20 7:33 ` Shawn Lin
[not found] ` <CGME20170320113503epcas1p1115fcb2a974a38a4133230b5b9013fbb@epcas1p1.samsung.com>
2017-03-20 11:35 ` Bartlomiej Zolnierkiewicz
2017-03-22 17:31 ` Bean Huo (beanhuo)
2017-03-23 10:03 ` Ulf Hansson
2017-03-23 10:45 ` Bean Huo (beanhuo)
2017-03-23 13:10 ` Ulf Hansson
2017-03-24 11:16 ` Bean Huo (beanhuo)
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®