From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Verma, Vishal L" Subject: Re: [PATCH 3/3] libnvdimm, pmem: clear poison on write Date: Fri, 11 Mar 2016 00:39:45 +0000 Message-ID: <1457656781.4525.36.camel@intel.com> References: <20160308224713.16298.33547.stgit@dwillia2-desk3.jf.intel.com> <20160308224729.16298.49406.stgit@dwillia2-desk3.jf.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com ([192.55.52.93]:62953 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932893AbcCKAkC (ORCPT ); Thu, 10 Mar 2016 19:40:02 -0500 In-Reply-To: <20160308224729.16298.49406.stgit@dwillia2-desk3.jf.intel.com> Content-Language: en-US Content-ID: <351DA761BDF12A459E1C5C6CC10AAAA3@intel.com> Sender: linux-acpi-owner@vger.kernel.org List-Id: linux-acpi@vger.kernel.org To: "Williams, Dan J" , "linux-nvdimm@lists.01.org" Cc: "ross.zwisler@linux.intel.com" , "linux-kernel@vger.kernel.org" , "x86@kernel.org" , "linux-acpi@vger.kernel.org" T24gVHVlLCAyMDE2LTAzLTA4IGF0IDE0OjQ3IC0wODAwLCBEYW4gV2lsbGlhbXMgd3JvdGU6DQo+ IElmIGEgd3JpdGUgaXMgZGlyZWN0ZWQgYXQgYSBrbm93biBiYWQgYmxvY2sgcGVyZm9ybSB0aGUg Zm9sbG93aW5nOg0KPiANCj4gMS8gd3JpdGUgdGhlIGRhdGENCj4gDQo+IDIvIHNlbmQgYSBjbGVh ciBwb2lzb24gY29tbWFuZA0KPiANCj4gMy8gaW52YWxpZGF0ZSB0aGUgcG9pc29uIG91dCBvZiB0 aGUgY2FjaGUgaGllcmFyY2h5DQo+IA0KPiBDYzogPHg4NkBrZXJuZWwub3JnPg0KPiBDYzogVmlz aGFsIFZlcm1hIDx2aXNoYWwubC52ZXJtYUBpbnRlbC5jb20+DQo+IENjOiBSb3NzIFp3aXNsZXIg PHJvc3Muendpc2xlckBsaW51eC5pbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IERhbiBXaWxs aWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KPiAtLS0NCj4gwqBhcmNoL3g4Ni9pbmNs dWRlL2FzbS9wbWVtLmggfMKgwqDCoMKgNSArKysrKw0KPiDCoGRyaXZlcnMvbnZkaW1tL2J1cy5j wqDCoMKgwqDCoMKgwqDCoHzCoMKgwqA0Ng0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrDQo+IMKgZHJpdmVycy9udmRpbW0vbmQuaMKgwqDCoMKgwqDCoMKgwqDC oHzCoMKgwqDCoDIgKysNCj4gwqBkcml2ZXJzL252ZGltbS9wbWVtLmPCoMKgwqDCoMKgwqDCoHzC oMKgwqAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gwqBpbmNsdWRlL2xpbnV4L3Bt ZW0uaMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMTkgKysrKysrKysrKysrKysrKysrDQo+IMKgNSBm aWxlcyBjaGFuZ2VkLCAxMDAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiANCj4gZGlm ZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BtZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUv YXNtL3BtZW0uaA0KPiBpbmRleCBjNTdmZDFlYTk2ODkuLmJmOGIzNWQyMDM1YSAxMDA2NDQNCj4g LS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcG1lbS5oDQo+ICsrKyBiL2FyY2gveDg2L2luY2x1 ZGUvYXNtL3BtZW0uaA0KDQo8Pg0KDQo+IMKgc3RhdGljIGludCBwbWVtX2RvX2J2ZWMoc3RydWN0 IHBtZW1fZGV2aWNlICpwbWVtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwNCj4gwqAJCQl1bnNpZ25lZCBp bnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmLCBpbnQgcncsDQo+IMKgCQkJc2VjdG9yX3Qgc2VjdG9y KQ0KPiDCoHsNCj4gwqAJaW50IHJjID0gMDsNCj4gKwlib29sIGJhZF9wbWVtID0gZmFsc2U7DQo+ IMKgCXZvaWQgKm1lbSA9IGttYXBfYXRvbWljKHBhZ2UpOw0KPiDCoAlwaHlzX2FkZHJfdCBwbWVt X29mZiA9IHNlY3RvciAqIDUxMiArIHBtZW0tPmRhdGFfb2Zmc2V0Ow0KPiDCoAl2b2lkIF9fcG1l bSAqcG1lbV9hZGRyID0gcG1lbS0+dmlydF9hZGRyICsgcG1lbV9vZmY7DQo+IMKgDQo+ICsJaWYg KHVubGlrZWx5KGlzX2JhZF9wbWVtKCZwbWVtLT5iYiwgc2VjdG9yLCBsZW4pKSkNCj4gKwkJYmFk X3BtZW0gPSB0cnVlOw0KPiArDQo+IMKgCWlmIChydyA9PSBSRUFEKSB7DQo+IC0JCWlmICh1bmxp a2VseShpc19iYWRfcG1lbSgmcG1lbS0+YmIsIHNlY3RvciwgbGVuKSkpDQo+ICsJCWlmICh1bmxp a2VseShiYWRfcG1lbSkpDQo+IMKgCQkJcmMgPSAtRUlPOw0KPiDCoAkJZWxzZSB7DQo+IMKgCQkJ bWVtY3B5X2Zyb21fcG1lbShtZW0gKyBvZmYsIHBtZW1fYWRkciwgbGVuKTsNCj4gQEAgLTgxLDYg KzEwNCwxMCBAQCBzdGF0aWMgaW50IHBtZW1fZG9fYnZlYyhzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBt ZW0sDQo+IHN0cnVjdCBwYWdlICpwYWdlLA0KPiDCoAl9IGVsc2Ugew0KPiDCoAkJZmx1c2hfZGNh Y2hlX3BhZ2UocGFnZSk7DQo+IMKgCQltZW1jcHlfdG9fcG1lbShwbWVtX2FkZHIsIG1lbSArIG9m ZiwgbGVuKTsNCj4gKwkJaWYgKHVubGlrZWx5KGJhZF9wbWVtKSkgew0KPiArCQkJcG1lbV9jbGVh cl9wb2lzb24ocG1lbSwgcG1lbV9vZmYsIGxlbik7DQo+ICsJCQltZW1jcHlfdG9fcG1lbShwbWVt X2FkZHIsIG1lbSArIG9mZiwgbGVuKTsNCj4gKwkJfQ0KPiDCoAl9DQoNCkp1c3Qgbm90aWNlZCB0 aGlzIC0tIHdoeSBkbyB3ZSBtZW1jcHlfdG9fcG1lbSB0d2ljZSBpbiB0aGUgZXJyb3IgY2FzZT8N ClNoDQpvdWxkbid0IGl0IGJlOg0KDQoJaWYgKHVubGlrZWx5KGJhZF9wbWVtKSkNCgkJcG1lbV9j bGVhcl9wb2lzb24ocG1lbSwgcG1lbV9vZmYsIGxlbik7DQoJbWVtY3B5X3RvX3BtZW0ocG1lbV9h ZGRyLCBtZW0gKyBvZmYsIGxlbik7DQoNCg0K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ml01.01.org (Postfix) with ESMTP id B13BD1A1E0D for ; Thu, 10 Mar 2016 16:40:16 -0800 (PST) From: "Verma, Vishal L" Subject: Re: [PATCH 3/3] libnvdimm, pmem: clear poison on write Date: Fri, 11 Mar 2016 00:39:45 +0000 Message-ID: <1457656781.4525.36.camel@intel.com> References: <20160308224713.16298.33547.stgit@dwillia2-desk3.jf.intel.com> <20160308224729.16298.49406.stgit@dwillia2-desk3.jf.intel.com> In-Reply-To: <20160308224729.16298.49406.stgit@dwillia2-desk3.jf.intel.com> Content-Language: en-US Content-ID: <351DA761BDF12A459E1C5C6CC10AAAA3@intel.com> MIME-Version: 1.0 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" To: "Williams, Dan J" , "linux-nvdimm@lists.01.org" Cc: "linux-acpi@vger.kernel.org" , "x86@kernel.org" , "linux-kernel@vger.kernel.org" List-ID: T24gVHVlLCAyMDE2LTAzLTA4IGF0IDE0OjQ3IC0wODAwLCBEYW4gV2lsbGlhbXMgd3JvdGU6DQo+ IElmIGEgd3JpdGUgaXMgZGlyZWN0ZWQgYXQgYSBrbm93biBiYWQgYmxvY2sgcGVyZm9ybSB0aGUg Zm9sbG93aW5nOg0KPiANCj4gMS8gd3JpdGUgdGhlIGRhdGENCj4gDQo+IDIvIHNlbmQgYSBjbGVh ciBwb2lzb24gY29tbWFuZA0KPiANCj4gMy8gaW52YWxpZGF0ZSB0aGUgcG9pc29uIG91dCBvZiB0 aGUgY2FjaGUgaGllcmFyY2h5DQo+IA0KPiBDYzogPHg4NkBrZXJuZWwub3JnPg0KPiBDYzogVmlz aGFsIFZlcm1hIDx2aXNoYWwubC52ZXJtYUBpbnRlbC5jb20+DQo+IENjOiBSb3NzIFp3aXNsZXIg PHJvc3Muendpc2xlckBsaW51eC5pbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IERhbiBXaWxs aWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KPiAtLS0NCj4gwqBhcmNoL3g4Ni9pbmNs dWRlL2FzbS9wbWVtLmggfMKgwqDCoMKgNSArKysrKw0KPiDCoGRyaXZlcnMvbnZkaW1tL2J1cy5j wqDCoMKgwqDCoMKgwqDCoHzCoMKgwqA0Ng0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrDQo+IMKgZHJpdmVycy9udmRpbW0vbmQuaMKgwqDCoMKgwqDCoMKgwqDC oHzCoMKgwqDCoDIgKysNCj4gwqBkcml2ZXJzL252ZGltbS9wbWVtLmPCoMKgwqDCoMKgwqDCoHzC oMKgwqAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gwqBpbmNsdWRlL2xpbnV4L3Bt ZW0uaMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMTkgKysrKysrKysrKysrKysrKysrDQo+IMKgNSBm aWxlcyBjaGFuZ2VkLCAxMDAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiANCj4gZGlm ZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BtZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUv YXNtL3BtZW0uaA0KPiBpbmRleCBjNTdmZDFlYTk2ODkuLmJmOGIzNWQyMDM1YSAxMDA2NDQNCj4g LS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcG1lbS5oDQo+ICsrKyBiL2FyY2gveDg2L2luY2x1 ZGUvYXNtL3BtZW0uaA0KDQo8Pg0KDQo+IMKgc3RhdGljIGludCBwbWVtX2RvX2J2ZWMoc3RydWN0 IHBtZW1fZGV2aWNlICpwbWVtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwNCj4gwqAJCQl1bnNpZ25lZCBp bnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmLCBpbnQgcncsDQo+IMKgCQkJc2VjdG9yX3Qgc2VjdG9y KQ0KPiDCoHsNCj4gwqAJaW50IHJjID0gMDsNCj4gKwlib29sIGJhZF9wbWVtID0gZmFsc2U7DQo+ IMKgCXZvaWQgKm1lbSA9IGttYXBfYXRvbWljKHBhZ2UpOw0KPiDCoAlwaHlzX2FkZHJfdCBwbWVt X29mZiA9IHNlY3RvciAqIDUxMiArIHBtZW0tPmRhdGFfb2Zmc2V0Ow0KPiDCoAl2b2lkIF9fcG1l bSAqcG1lbV9hZGRyID0gcG1lbS0+dmlydF9hZGRyICsgcG1lbV9vZmY7DQo+IMKgDQo+ICsJaWYg KHVubGlrZWx5KGlzX2JhZF9wbWVtKCZwbWVtLT5iYiwgc2VjdG9yLCBsZW4pKSkNCj4gKwkJYmFk X3BtZW0gPSB0cnVlOw0KPiArDQo+IMKgCWlmIChydyA9PSBSRUFEKSB7DQo+IC0JCWlmICh1bmxp a2VseShpc19iYWRfcG1lbSgmcG1lbS0+YmIsIHNlY3RvciwgbGVuKSkpDQo+ICsJCWlmICh1bmxp a2VseShiYWRfcG1lbSkpDQo+IMKgCQkJcmMgPSAtRUlPOw0KPiDCoAkJZWxzZSB7DQo+IMKgCQkJ bWVtY3B5X2Zyb21fcG1lbShtZW0gKyBvZmYsIHBtZW1fYWRkciwgbGVuKTsNCj4gQEAgLTgxLDYg KzEwNCwxMCBAQCBzdGF0aWMgaW50IHBtZW1fZG9fYnZlYyhzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBt ZW0sDQo+IHN0cnVjdCBwYWdlICpwYWdlLA0KPiDCoAl9IGVsc2Ugew0KPiDCoAkJZmx1c2hfZGNh Y2hlX3BhZ2UocGFnZSk7DQo+IMKgCQltZW1jcHlfdG9fcG1lbShwbWVtX2FkZHIsIG1lbSArIG9m ZiwgbGVuKTsNCj4gKwkJaWYgKHVubGlrZWx5KGJhZF9wbWVtKSkgew0KPiArCQkJcG1lbV9jbGVh cl9wb2lzb24ocG1lbSwgcG1lbV9vZmYsIGxlbik7DQo+ICsJCQltZW1jcHlfdG9fcG1lbShwbWVt X2FkZHIsIG1lbSArIG9mZiwgbGVuKTsNCj4gKwkJfQ0KPiDCoAl9DQoNCkp1c3Qgbm90aWNlZCB0 aGlzIC0tIHdoeSBkbyB3ZSBtZW1jcHlfdG9fcG1lbSB0d2ljZSBpbiB0aGUgZXJyb3IgY2FzZT8N ClNoDQpvdWxkbid0IGl0IGJlOg0KDQoJaWYgKHVubGlrZWx5KGJhZF9wbWVtKSkNCgkJcG1lbV9j bGVhcl9wb2lzb24ocG1lbSwgcG1lbV9vZmYsIGxlbik7DQoJbWVtY3B5X3RvX3BtZW0ocG1lbV9h ZGRyLCBtZW0gKyBvZmYsIGxlbik7DQoNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KTGludXgtbnZkaW1tIG1haWxpbmcgbGlzdApMaW51eC1udmRpbW1A bGlzdHMuMDEub3JnCmh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt bnZkaW1tCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933132AbcCKAkF (ORCPT ); Thu, 10 Mar 2016 19:40:05 -0500 Received: from mga11.intel.com ([192.55.52.93]:62953 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932893AbcCKAkC (ORCPT ); Thu, 10 Mar 2016 19:40:02 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,318,1455004800"; d="scan'208";a="762035747" From: "Verma, Vishal L" To: "Williams, Dan J" , "linux-nvdimm@lists.01.org" CC: "ross.zwisler@linux.intel.com" , "linux-kernel@vger.kernel.org" , "x86@kernel.org" , "linux-acpi@vger.kernel.org" Subject: Re: [PATCH 3/3] libnvdimm, pmem: clear poison on write Thread-Topic: [PATCH 3/3] libnvdimm, pmem: clear poison on write Thread-Index: AQHReYySHa6UJRu1TU6XNch1PXK5uZ9T8AKA Date: Fri, 11 Mar 2016 00:39:45 +0000 Message-ID: <1457656781.4525.36.camel@intel.com> References: <20160308224713.16298.33547.stgit@dwillia2-desk3.jf.intel.com> <20160308224729.16298.49406.stgit@dwillia2-desk3.jf.intel.com> In-Reply-To: <20160308224729.16298.49406.stgit@dwillia2-desk3.jf.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.232.112.171] Content-Type: text/plain; charset="utf-8" Content-ID: <351DA761BDF12A459E1C5C6CC10AAAA3@intel.com> MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id u2B0eMq2011894 On Tue, 2016-03-08 at 14:47 -0800, Dan Williams wrote: > If a write is directed at a known bad block perform the following: > > 1/ write the data > > 2/ send a clear poison command > > 3/ invalidate the poison out of the cache hierarchy > > Cc: > Cc: Vishal Verma > Cc: Ross Zwisler > Signed-off-by: Dan Williams > --- >  arch/x86/include/asm/pmem.h |    5 +++++ >  drivers/nvdimm/bus.c        |   46 > +++++++++++++++++++++++++++++++++++++++++++ >  drivers/nvdimm/nd.h         |    2 ++ >  drivers/nvdimm/pmem.c       |   29 ++++++++++++++++++++++++++- >  include/linux/pmem.h        |   19 ++++++++++++++++++ >  5 files changed, 100 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/include/asm/pmem.h b/arch/x86/include/asm/pmem.h > index c57fd1ea9689..bf8b35d2035a 100644 > --- a/arch/x86/include/asm/pmem.h > +++ b/arch/x86/include/asm/pmem.h <> >  static int pmem_do_bvec(struct pmem_device *pmem, struct page *page, >   unsigned int len, unsigned int off, int rw, >   sector_t sector) >  { >   int rc = 0; > + bool bad_pmem = false; >   void *mem = kmap_atomic(page); >   phys_addr_t pmem_off = sector * 512 + pmem->data_offset; >   void __pmem *pmem_addr = pmem->virt_addr + pmem_off; >   > + if (unlikely(is_bad_pmem(&pmem->bb, sector, len))) > + bad_pmem = true; > + >   if (rw == READ) { > - if (unlikely(is_bad_pmem(&pmem->bb, sector, len))) > + if (unlikely(bad_pmem)) >   rc = -EIO; >   else { >   memcpy_from_pmem(mem + off, pmem_addr, len); > @@ -81,6 +104,10 @@ static int pmem_do_bvec(struct pmem_device *pmem, > struct page *page, >   } else { >   flush_dcache_page(page); >   memcpy_to_pmem(pmem_addr, mem + off, len); > + if (unlikely(bad_pmem)) { > + pmem_clear_poison(pmem, pmem_off, len); > + memcpy_to_pmem(pmem_addr, mem + off, len); > + } >   } Just noticed this -- why do we memcpy_to_pmem twice in the error case? Sh ouldn't it be: if (unlikely(bad_pmem)) pmem_clear_poison(pmem, pmem_off, len); memcpy_to_pmem(pmem_addr, mem + off, len);