summaryrefslogtreecommitdiff
path: root/drivers/nvdimm/pmem.c
diff options
context:
space:
mode:
authorVishal Verma <vishal.l.verma@intel.com>2015-12-25 05:21:43 +0300
committerDan Williams <dan.j.williams@intel.com>2016-01-09 19:39:03 +0300
commit0caeef63e6d2f866d85bb507bf63e0ce8ec91cef (patch)
treedbd09f34ab455ca2dfc8c246ff7d19d17edd1de7 /drivers/nvdimm/pmem.c
parentd26f73f083ed6fbea7fd3fdbacb527b7f3e75ac0 (diff)
downloadlinux-0caeef63e6d2f866d85bb507bf63e0ce8ec91cef.tar.xz
libnvdimm: Add a poison list and export badblocks
During region creation, perform Address Range Scrubs (ARS) for the SPA (System Physical Address) ranges to retrieve known poison locations from firmware. Add a new data structure 'nd_poison' which is used as a list in nvdimm_bus to store these poison locations. When creating a pmem namespace, if there is any known poison associated with its physical address space, convert the poison ranges to bad sectors that are exposed using the badblocks interface. Signed-off-by: Vishal Verma <vishal.l.verma@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/nvdimm/pmem.c')
-rw-r--r--drivers/nvdimm/pmem.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index 8ee79893d2f5..5b95043443a3 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -27,6 +27,7 @@
#include <linux/slab.h>
#include <linux/pmem.h>
#include <linux/nd.h>
+#include "nd-core.h"
#include "pfn.h"
#include "nd.h"
@@ -168,6 +169,7 @@ static int pmem_attach_disk(struct device *dev,
{
int nid = dev_to_node(dev);
struct gendisk *disk;
+ int ret;
pmem->pmem_queue = blk_alloc_queue_node(GFP_KERNEL, nid);
if (!pmem->pmem_queue)
@@ -196,6 +198,10 @@ static int pmem_attach_disk(struct device *dev,
set_capacity(disk, (pmem->size - pmem->data_offset) / 512);
pmem->pmem_disk = disk;
+ ret = nvdimm_namespace_add_poison(disk, pmem->data_offset, ndns);
+ if (ret)
+ return ret;
+
add_disk(disk);
revalidate_disk(disk);