Message ID | 4e7d0b4b8df1430698e822b1a36bcc11@SIWEX5A.sing.micron.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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
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
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
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
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
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
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 --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.
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(+)