diff options
author | Oliver O'Halloran <oohall@gmail.com> | 2016-09-19 06:19:00 -0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2016-09-19 11:54:27 -0400 |
commit | 480b6837aa579991c6acc113bccf838e6a90843c (patch) | |
tree | 71aca7c1b20a42e451eca88044a2a81a777e827a | |
parent | 3be7988674ab33565700a37b210f502563d932e6 (diff) |
nvdimm: fix PHYS_PFN/PFN_PHYS mixup
nd_activate_region() iomaps any hint addresses required when activating
a region. To prevent duplicate mappings it checks the PFN of the hint to
be mapped against the PFNs of the already mapped hints. Unfortunately it
doesn't convert the PFN back into a physical address before passing it
to devm_nvdimm_ioremap(). Instead it applies PHYS_PFN a second time
which ends about as well as you would imagine.
Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r-- | drivers/nvdimm/region_devs.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c index e8d5ba7b29af..4eef88eb5144 100644 --- a/drivers/nvdimm/region_devs.c +++ b/drivers/nvdimm/region_devs.c | |||
@@ -57,7 +57,7 @@ static int nvdimm_map_flush(struct device *dev, struct nvdimm *nvdimm, int dimm, | |||
57 | ndrd->flush_wpq[dimm][j] & PAGE_MASK); | 57 | ndrd->flush_wpq[dimm][j] & PAGE_MASK); |
58 | else | 58 | else |
59 | flush_page = devm_nvdimm_ioremap(dev, | 59 | flush_page = devm_nvdimm_ioremap(dev, |
60 | PHYS_PFN(pfn), PAGE_SIZE); | 60 | PFN_PHYS(pfn), PAGE_SIZE); |
61 | if (!flush_page) | 61 | if (!flush_page) |
62 | return -ENXIO; | 62 | return -ENXIO; |
63 | ndrd->flush_wpq[dimm][i] = flush_page | 63 | ndrd->flush_wpq[dimm][i] = flush_page |