summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2016-03-08 07:16:07 -0800
committerDan Williams <dan.j.williams@intel.com>2016-03-09 15:15:32 -0800
commit59e6473980f321c16299e12db69d1fabc2644a6f (patch)
tree6c59e4bb7a8a0f2208269643f5b7b8b056680aef /arch
parentb5ebc8ec693281c3c1efff7459a069cbd8b9a149 (diff)
downloadlinux-59e6473980f321c16299e12db69d1fabc2644a6f.tar.gz
linux-59e6473980f321c16299e12db69d1fabc2644a6f.tar.bz2
linux-59e6473980f321c16299e12db69d1fabc2644a6f.zip
libnvdimm, pmem: clear poison on write
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: <x86@kernel.org> Cc: Ross Zwisler <ross.zwisler@linux.intel.com> Reviewed-by: Vishal Verma <vishal.l.verma@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/include/asm/pmem.h5
1 files changed, 5 insertions, 0 deletions
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
@@ -137,6 +137,11 @@ static inline void arch_clear_pmem(void __pmem *addr, size_t size)
arch_wb_cache_pmem(addr, size);
}
+static inline void arch_invalidate_pmem(void __pmem *addr, size_t size)
+{
+ clflush_cache_range((void __force *) addr, size);
+}
+
static inline bool __arch_has_wmb_pmem(void)
{
/*