diff mbox

[V1] mmc: core: fix still flush cache when eMMC cache off

Message ID 4e7d0b4b8df1430698e822b1a36bcc11@SIWEX5A.sing.micron.com (mailing list archive)
State New, archived
Headers show

Commit Message

Bean Huo March 19, 2017, 12:45 a.m. UTC
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(+)

Comments

Shawn Lin March 20, 2017, 7:33 a.m. UTC | #1
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.
>

--
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
Bartlomiej Zolnierkiewicz March 20, 2017, 11:35 a.m. UTC | #2
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

--
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
Bean Huo March 22, 2017, 5:31 p.m. UTC | #3
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
--
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
Ulf Hansson March 23, 2017, 10:03 a.m. UTC | #4
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
--
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
Bean Huo March 23, 2017, 10:45 a.m. UTC | #5
SGksIA0KDQo+T24gMTkgTWFyY2ggMjAxNyBhdCAwMTo0NSwgQmVhbiBIdW8gKGJlYW5odW8pIDxi
ZWFuaHVvQG1pY3Jvbi5jb20+IHdyb3RlOg0KPj4gVGhpcyBwYXRjaCBmaXhlcyB0aGUgaXNzdWUg
dGhhdCBtbWNfYmxrX2lzc3VlX3JxIHN0aWxsIGZsdXNoZXMgY2FjaGUNCj4+IHdoZW4gZU1NQyBj
YWNoZSBoYXMgYWxyZWFkeSBiZWVuIG9mZiB0aHJvdWdoIHVzZXIgc3BhY2UgdG9vbCwgc3VjaCBh
cw0KPj4gbW1jLXV0aWxzLg0KPj4gVGhlIHJlYXNvbiBpcyB0aGF0IGNhcmQtPmV4dF9jc2QuY2Fj
aGVfY3RybCBpc24ndCByZXNldC4NCj4NCj5GaXJzdCwgd2h5IGRvIHlvdSB3YW50IHRvIHR1cm4g
b2YgdGhlIGNhY2hlIGN0cmw/IElzIHRoZSBlTU1DIGRldmljZSBoYXZpbmcNCj5pc3N1ZXMgd2l0
aCBpdD8gVGhlbiB3ZSBzaG91bGQgaW52ZW50IGEgY2FyZCBxdWlyayBpbnN0ZWFkLg0KDQoNCldo
eSBJIHR1cm4gb2ZmIGl0PyBiZWNhdXNlIEkgZGlkIHBvd2VyIGxvc3MgdGVzdGluZyBhbmQgdmFs
aWRhdGlvbiwgSSBzaG91bGQgc3dpdGNoIGl0IG9mZiBhbmQgb24uDQpXaGVuIEkgZG8gc29tZSBw
ZXJmb3JtYW5jZSBhbmQgcG93ZXIgbG9zcyBjYXNlIHZhbGlkYXRpb24gb24gc2V2ZXJhbCBMaW51
eCByZWxlYXNlIHZlcnNpb25zLA0KSSBuZWVkIHRvIHN3aXRjaCBvZmYgb3Igb24gY2FjaGUgdGhy
b3VnaCB1c2VyIHNwYWNlIHRvb2wuDQpJIGNhbid0IGNvbmZpcm0gZXZlcnkgdXNlciB0aGF0IGxp
a2VzIG1lLCBCdXQgSSB0aGluayBhdCBsZWFzdCBpdCBpcyBub3QgcmVhc29uYWJsZSB0byANCmZs
dXNoIGVNTUMgY2FjaGUsIHdoZW4gaW50ZXJuYWwgZU1NQyBjYWNoZSBpcyBvZmYuDQoNCj5TZWNv
bmQsIHdoYXQgZXJyb3JzIGRvIHlvdSBlbmNvdW50ZXIgd2hlbiB0aGUgbW1jIGNvcmUgdHJpZXMg
dG8gZmx1c2ggdGhlDQo+Y2FjaGUgd2hlbiBpdCBoYXMgYmVlbiB0dXJuZWQgb2ZmPyBDYW4geW91
IHBsZWFzZSBlbGFib3JhdGUgb24gdGhpcz8NCg0KDQpObyBlcnJvciBmb3VuZCwgYnV0IGZpcnN0
bHksIHBsZWFzZSB0aGluayBhYm91dCBvdmVyaGVhZCBpbnRyb2R1Y2VkIGJ5IHVzZWxlc3MgZmx1
c2ggY2FjaGUsIFVubGVzcyB5b3UNCkRvbid0IGNhcmUgdGhpcyB0aW55IHRpbWUuIHNlY29uZCwg
dW5kZXIgdGhlIGNvbmRpdGlvbiBvZiBjYWNoZSBvZmYsIGFkZGl0aW9uYWwgZmx1c2ggY2FjaGUg
cmVxdWVzdCBzdGlsbCBoYXMgaW1wYWN0IG9uDQpJbnRlcm5hbCBlTU1DIGxvZ2ljLiBJIGRvbid0
IGtub3cgV2hhdCBhbmQgaG93IGltcGFjdCwgYnV0IGF0IGxlYXN0IGl0IGlzIHJlYWxseSBleGlz
dC4NCg0KDQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogYmVhbmh1byA8YmVhbmh1b0BtaWNyb24uY29t
Pg0KPj4gLS0tDQo+PiAgZHJpdmVycy9tbWMvY29yZS9ibG9jay5jIHwgOSArKysrKysrKysNCj4+
ICAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvbW1jL2NvcmUvYmxvY2suYyBiL2RyaXZlcnMvbW1jL2NvcmUvYmxvY2suYyBpbmRleA0K
Pj4gMTYyMWZhMC4uZmIzNjM1YWMgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL21tYy9jb3JlL2Js
b2NrLmMNCj4+ICsrKyBiL2RyaXZlcnMvbW1jL2NvcmUvYmxvY2suYw0KPj4gQEAgLTY0LDYgKzY0
LDcgQEAgTU9EVUxFX0FMSUFTKCJtbWM6YmxvY2siKTsNCj4+ICAjZGVmaW5lIE1NQ19CTEtfVElN
RU9VVF9NUyAgKDEwICogNjAgKiAxMDAwKSAgICAgICAgLyogMTAgbWludXRlIHRpbWVvdXQgKi8N
Cj4+ICAjZGVmaW5lIE1NQ19TQU5JVElaRV9SRVFfVElNRU9VVCAyNDAwMDAgICNkZWZpbmUNCj4+
IE1NQ19FWFRSQUNUX0lOREVYX0ZST01fQVJHKHgpICgoeCAmIDB4MDBGRjAwMDApID4+IDE2KQ0K
Pj4gKyNkZWZpbmUgTU1DX0VYVFJBQ1RfVkFMVUVfRlJPTV9BUkcoeCkgKCh4ICYgMHgwMDAwRkYw
MCkgPj4gOCkNCj4+DQo+PiAgI2RlZmluZSBtbWNfcmVxX3JlbF93cihyZXEpICAgICgocmVxLT5j
bWRfZmxhZ3MgJiBSRVFfRlVBKSAmJiBcDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpKSBAQA0KPj4gLTUzNSw2ICs1MzYsMTQg
QEAgc3RhdGljIGludCBfX21tY19ibGtfaW9jdGxfY21kKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwN
Cj5zdHJ1Y3QgbW1jX2Jsa19kYXRhICptZCwNCj4+ICAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YS5lcnJvcjsNCj4+ICAgICAgICAgfQ0KPj4NCj4+ICsgICAgICAgaWYgKChNTUNfRVhUUkFDVF9J
TkRFWF9GUk9NX0FSRyhjbWQuYXJnKSA9PQ0KPkVYVF9DU0RfQ0FDSEVfQ1RSTCkgJiYNCj4+ICsg
ICAgICAgICAgIChjbWQub3Bjb2RlID09IE1NQ19TV0lUQ0gpICYmIChjYXJkLT5leHRfY3NkLmNh
Y2hlX3NpemUgPiAwKSkgew0KPj4gKyAgICAgICAgICAgICAgIGlmIChNTUNfRVhUUkFDVF9WQUxV
RV9GUk9NX0FSRyhjbWQuYXJnKSAmIDEpDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBjYXJk
LT5leHRfY3NkLmNhY2hlX2N0cmwgPSAxOw0KPj4gKyAgICAgICAgICAgICAgIGVsc2UNCj4+ICsg
ICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmV4dF9jc2QuY2FjaGVfY3RybCA9IDA7DQo+PiAr
ICAgICAgIH0NCj4+ICsNCj4NCj5JIGFtIHN1cmUgImNhY2hlIGN0cmwiIGlzbid0IHRoZSBvbmx5
IHRoaW5nIHVzZXIgc3BhY2UgdmlhIG1tYyBpb2N0bCBjYW4gY2F1c2UNCj5wcm9ibGVtcyBmb3Iu
IFRoZSBtbWMgY29yZSBrZWVwIHRyYWNrcyBvZiBvdGhlciBleHQgY3NkIHN0YXRlcywgZXRjLCBh
cyB3ZWxsLiBJDQo+ZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCB0byBjb21wZW5zYXRlIGFuZCB0cnkg
dG8gYWN0IGFjY29yZGluZ2x5IHRvIGNvdmVyIGNhc2VzDQo+d2hlbiB1c2VyIHNwYWNlIGhhcyBt
ZXNzZWQgdXAuDQo+DQo+VG8gYmUgY2xlYXIsIGl0IHdvdWxkIGhhdmUgYmVlbiBlbnRpcmVseSBk
aWZmZXJlbnQgaWYgdGhlIHNvbWV0aGluZyB3YXMgY2hhbmdlZA0KPnZpYSBhIG1tYyBzeXNmcyBp
bnRlcmZhY2UuIFRoZW4gd2UgcmVhbGx5IHNob3VsZCBhY3QgYWNjb3JkaW5nbHksIGhvd2V2ZXIg
Zm9yDQo+bW1jIGlvY3RscyBpdCBqdXN0IGJlY29tZXMgdW5tYW5hZ2VhYmxlIGR1ZSB0byBpdHMg
ZmxleGliaWxpdHkuDQoNCkkgd2lsbCBjaGVjayB0aGlzIGxhdGVyLiBCdXQgZmx1c2ggY2FjaGUg
c2VhbXMgbm93IHRoZXJlIGlzIG9ubHkgb25lIGVudHJ5LCBhbmQNCkl0IGNoZWNrcyAiY2FjaGVf
Y3RybCIuDQoNCj4NCj4+ICAgICAgICAgLyoNCj4+ICAgICAgICAgICogQWNjb3JkaW5nIHRvIHRo
ZSBTRCBzcGVjcywgc29tZSBjb21tYW5kcyByZXF1aXJlIGEgZGVsYXkgYWZ0ZXINCj4+ICAgICAg
ICAgICogaXNzdWluZyB0aGUgY29tbWFuZC4NCj4+IC0tDQo+PiAyLjcuNA0KPg0KPktpbmQgcmVn
YXJkcw0KPlVmZmUNCj4tLQ0KPlRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRo
ZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC1tbWMiIGluIHRoZSBib2R5IG9mDQo+YSBtZXNzYWdl
IHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcgTW9yZSBtYWpvcmRvbW8gaW5mbyBhdA0KPmh0
dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbA0K
--
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
Ulf Hansson March 23, 2017, 1:10 p.m. UTC | #6
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
--
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
Bean Huo March 24, 2017, 11:16 a.m. UTC | #7
SGksIFVmZmUNCg0KPj4+T24gMTkgTWFyY2ggMjAxNyBhdCAwMTo0NSwgQmVhbiBIdW8gKGJlYW5o
dW8pIDxiZWFuaHVvQG1pY3Jvbi5jb20+DQo+d3JvdGU6DQo+Pj4+IFRoaXMgcGF0Y2ggZml4ZXMg
dGhlIGlzc3VlIHRoYXQgbW1jX2Jsa19pc3N1ZV9ycSBzdGlsbCBmbHVzaGVzIGNhY2hlDQo+Pj4+
IHdoZW4gZU1NQyBjYWNoZSBoYXMgYWxyZWFkeSBiZWVuIG9mZiB0aHJvdWdoIHVzZXIgc3BhY2Ug
dG9vbCwgc3VjaA0KPj4+PiBhcyBtbWMtdXRpbHMuDQo+Pj4+IFRoZSByZWFzb24gaXMgdGhhdCBj
YXJkLT5leHRfY3NkLmNhY2hlX2N0cmwgaXNuJ3QgcmVzZXQuDQo+Pj4NCj4+PkZpcnN0LCB3aHkg
ZG8geW91IHdhbnQgdG8gdHVybiBvZiB0aGUgY2FjaGUgY3RybD8gSXMgdGhlIGVNTUMgZGV2aWNl
DQo+Pj5oYXZpbmcgaXNzdWVzIHdpdGggaXQ/IFRoZW4gd2Ugc2hvdWxkIGludmVudCBhIGNhcmQg
cXVpcmsgaW5zdGVhZC4NCj4+DQo+Pg0KPj4gV2h5IEkgdHVybiBvZmYgaXQ/IGJlY2F1c2UgSSBk
aWQgcG93ZXIgbG9zcyB0ZXN0aW5nIGFuZCB2YWxpZGF0aW9uLCBJIHNob3VsZA0KPnN3aXRjaCBp
dCBvZmYgYW5kIG9uLg0KPj4gV2hlbiBJIGRvIHNvbWUgcGVyZm9ybWFuY2UgYW5kIHBvd2VyIGxv
c3MgY2FzZSB2YWxpZGF0aW9uIG9uIHNldmVyYWwNCj4+IExpbnV4IHJlbGVhc2UgdmVyc2lvbnMs
IEkgbmVlZCB0byBzd2l0Y2ggb2ZmIG9yIG9uIGNhY2hlIHRocm91Z2ggdXNlciBzcGFjZSB0b29s
Lg0KPj4gSSBjYW4ndCBjb25maXJtIGV2ZXJ5IHVzZXIgdGhhdCBsaWtlcyBtZSwgQnV0IEkgdGhp
bmsgYXQgbGVhc3QgaXQgaXMNCj4+IG5vdCByZWFzb25hYmxlIHRvIGZsdXNoIGVNTUMgY2FjaGUs
IHdoZW4gaW50ZXJuYWwgZU1NQyBjYWNoZSBpcyBvZmYuDQo+DQo+QWgsIEkgc2VlLiBZb3VyIHVz
ZS1jYXNlIHNlZW1zIHJlYXNvbmFibGUgd2hpbGUgdmFsaWRhdGluZyByb2J1c3RuZXNzIG9mIHRo
ZQ0KPmVNTUMhDQo+DQo+Pg0KPj4+U2Vjb25kLCB3aGF0IGVycm9ycyBkbyB5b3UgZW5jb3VudGVy
IHdoZW4gdGhlIG1tYyBjb3JlIHRyaWVzIHRvIGZsdXNoDQo+Pj50aGUgY2FjaGUgd2hlbiBpdCBo
YXMgYmVlbiB0dXJuZWQgb2ZmPyBDYW4geW91IHBsZWFzZSBlbGFib3JhdGUgb24gdGhpcz8NCj4+
DQo+Pg0KPj4gTm8gZXJyb3IgZm91bmQsIGJ1dCBmaXJzdGx5LCBwbGVhc2UgdGhpbmsgYWJvdXQg
b3ZlcmhlYWQgaW50cm9kdWNlZCBieQ0KPj4gdXNlbGVzcyBmbHVzaCBjYWNoZSwgVW5sZXNzIHlv
dSBEb24ndCBjYXJlIHRoaXMgdGlueSB0aW1lLiBzZWNvbmQsDQo+PiB1bmRlciB0aGUgY29uZGl0
aW9uIG9mIGNhY2hlIG9mZiwgYWRkaXRpb25hbCBmbHVzaCBjYWNoZSByZXF1ZXN0IHN0aWxsIGhh
cyBpbXBhY3QNCj4+b24gSW50ZXJuYWwgZU1NQyBsb2dpYy4gSSBkb24ndCBrbm93IFdoYXQgYW5k
IGhvdyBpbXBhY3QsIGJ1dCBhdCBsZWFzdCBpdCBpcw0KPj5yZWFsbHkgZXhpc3QuDQo+DQo+R290
IGl0IQ0KPg0KPkhvd2V2ZXIgSSBzdGlsbCBkb24ndCBsaWtlIHRoZSBtbWMgaW9jdGxzIEFQSSB0
byBjb21wZW5zYXRlIGFuZCBkZWFsIHdpdGggYWxsDQo+ImNyYXp5LW5lc3MiIHRoYXQgdXNlci1z
cGFjZSBtYXkgY2F1c2UuIENhY2hlLWN0cmwgaXMgb25seSBvbmUgY2FzZSBvdXQgb2YgbWFueS4N
Cg0KUXVlc3Rpb24gaXMgdGhhdCBub3QgZXZlcnkgTGludXgtbW1jIHVzZXIgcmVhbGx5IHVuZGVy
c3RhbmQgdGhhdCBzaG91bGRuJ3QgdXNlICJtbWMgaW9jdGxzIEFQSSANCnRvIGNvbXBlbnNhdGUg
YW5kIGRlYWwgd2l0aCBhbGwgY3JhenktbmVzcyB0aGF0IHVzZXItc3BhY2UgbWF5IGNhdXNlICIu
DQpubyBtYXR0ZXIgd2UgbGlrZSBvciBkaXNsaWtlLCBJc3N1ZSBpcyBhbHJlYWR5IHRoZXJlOyBJ
IHRoaW5rIHRoYXQgbW9zdCBvZiBlTU1DIHVzZXIgaXMgbm93IA0KY29uZmlndXJpbmcgZU1NQyB0
aHJvdWdoIG1tYy11dGlscyBhbmQgbW1jIGlvY3Rscy4gVGhpcyBpcyBhIHJlYWwgY29uZGl0aW9u
Lg0KU29tZSBhdXRvbW90aXZlIGFwcGxpY2F0aW9ucywgQ2FjaGUgd291bGQgbm90IGJlIGVuYWJs
ZWQuIA0KDQpNYXliZSBJIGFtIHNoYWxsb3csIG1tYyBpb2N0bHMgbGlrZXMgYmFja2Rvb3IgdGhh
dCBsZXQgdXNlciBhY2Nlc3MgYW5kIGNvbmZpZ3VyZSBlTU1DIHNvbWUgZmVhdHVyZSwNCkV2ZW4g
bm90IHRvbyBvZnRlbi4gSSBzdGlsbCBzdWdnZXN0IHRvIGZpeCB0aGlzIGluIG1tYyBpb2N0bHMs
IHVubGVzcyBtbWMgaW90Y2xzIGJlaW5nIGRlbGV0ZWQsIGFuZCBtbWMtdXRpbHMNCmRvZXNuJ3Qg
c3VwcG9ydCBDYWNoZSBvZmYvb24uDQpCZWNhdXNlIGVNTUMgaW50ZXJuYWwgY2FjaGUgaGFzIGJl
ZW4gZGlzYWJsZWQsIGJ1dCBMaW51eC1tbWMgc3RpbGwgaXNzdWUgZmx1c2ggY2FjaGUgcmVxdWVz
dCwgdGhpcyBpcyBpbmRlZWQNCk5vdCByZWFzb25hYmxlLiBJdCBkZWZpbml0ZWx5IGluY3JlYXNl
cyBzeXN0ZW0gbGV2ZWwgb3ZlcmhlYWQuDQoNCj5JIHNlZSB0d28gdmlhYmxlIG9wdGlvbnMgdG8g
c29sdmUgeW91ciBwcm9ibGVtLg0KPjEpIEV4dGVuZCBtbWNfdGVzdCB3aXRoIGEgbmV3IHRlc3Qo
cykgZm9yIGNhY2hlIGN0cmwgYW5kIHBlcmhhcHMgc3VzcGVuZC9yZXN1bWUuDQo+SXNuJ3QgdGhp
cyBhY3R1YWxseSBleGFjdGx5IHdoYXQgeW91IHdhbnQ/DQoNCj4yKSBFeHRlbmQgZGVidWdmcyB0
byBiZSBhYmxlIHRvIHR1cm4gY2FjaGUgY3RybCBvbi9vZmYuDQoNCkkgY2FuIHRyeSwgYnV0IHRo
aXMgcGF0Y2ggaXMganVzdCB0byBmaXggbW1jIGN0cmxzIGJhY2tkb29yIG9uIGVNTUMgZmx1c2gg
Y2FjaGUuDQoNCj5bLi4uXQ0KPg0KPktpbmQgcmVnYXJkcw0KPlVmZmUNCj4tLQ0KPlRvIHVuc3Vi
c2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC1t
bWMiIGluIHRoZSBib2R5IG9mDQo+YSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5v
cmcgTW9yZSBtYWpvcmRvbW8gaW5mbyBhdA0KPmh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jk
b21vLWluZm8uaHRtbA0K
--
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
diff mbox

Patch

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.