libnvdimm: Stop using HPAGE_SIZE
Currently libnvdimm uses HPAGE_SIZE as the default alignment for DAX and PFN devices. HPAGE_SIZE is the default hugetlbfs page size and when hugetlbfs is disabled it defaults to PAGE_SIZE. Given DAX has more in common with THP than hugetlbfs we should proably be using HPAGE_PMD_SIZE, but this is undefined when THP is disabled so lets just give it a new name. The other usage of HPAGE_SIZE in libnvdimm is when determining how large the altmap should be. For the reasons mentioned above it doesn't really make sense to use HPAGE_SIZE here either. PMD_SIZE seems to be safe to use in generic code and it happens to match the vmemmap allocation block on x86 and Power. It's still a hack, but it's a slightly nicer hack. Signed-off-by: Oliver O'Halloran <oohall@gmail.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
520eccdfe1
commit
0dd6964306
@ -285,6 +285,13 @@ static inline struct device *nd_btt_create(struct nd_region *nd_region)
|
|||||||
|
|
||||||
struct nd_pfn *to_nd_pfn(struct device *dev);
|
struct nd_pfn *to_nd_pfn(struct device *dev);
|
||||||
#if IS_ENABLED(CONFIG_NVDIMM_PFN)
|
#if IS_ENABLED(CONFIG_NVDIMM_PFN)
|
||||||
|
|
||||||
|
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||||
|
#define PFN_DEFAULT_ALIGNMENT HPAGE_PMD_SIZE
|
||||||
|
#else
|
||||||
|
#define PFN_DEFAULT_ALIGNMENT PAGE_SIZE
|
||||||
|
#endif
|
||||||
|
|
||||||
int nd_pfn_probe(struct device *dev, struct nd_namespace_common *ndns);
|
int nd_pfn_probe(struct device *dev, struct nd_namespace_common *ndns);
|
||||||
bool is_nd_pfn(struct device *dev);
|
bool is_nd_pfn(struct device *dev);
|
||||||
struct device *nd_pfn_create(struct nd_region *nd_region);
|
struct device *nd_pfn_create(struct nd_region *nd_region);
|
||||||
|
@ -290,7 +290,7 @@ struct device *nd_pfn_devinit(struct nd_pfn *nd_pfn,
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
nd_pfn->mode = PFN_MODE_NONE;
|
nd_pfn->mode = PFN_MODE_NONE;
|
||||||
nd_pfn->align = HPAGE_SIZE;
|
nd_pfn->align = PFN_DEFAULT_ALIGNMENT;
|
||||||
dev = &nd_pfn->dev;
|
dev = &nd_pfn->dev;
|
||||||
device_initialize(&nd_pfn->dev);
|
device_initialize(&nd_pfn->dev);
|
||||||
if (ndns && !__nd_attach_ndns(&nd_pfn->dev, ndns, &nd_pfn->ndns)) {
|
if (ndns && !__nd_attach_ndns(&nd_pfn->dev, ndns, &nd_pfn->ndns)) {
|
||||||
@ -638,11 +638,12 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
|
|||||||
/ PAGE_SIZE);
|
/ PAGE_SIZE);
|
||||||
if (nd_pfn->mode == PFN_MODE_PMEM) {
|
if (nd_pfn->mode == PFN_MODE_PMEM) {
|
||||||
/*
|
/*
|
||||||
* vmemmap_populate_hugepages() allocates the memmap array in
|
* The altmap should be padded out to the block size used
|
||||||
* HPAGE_SIZE chunks.
|
* when populating the vmemmap. This *should* be equal to
|
||||||
|
* PMD_SIZE for most architectures.
|
||||||
*/
|
*/
|
||||||
offset = ALIGN(start + SZ_8K + 64 * npfns + dax_label_reserve,
|
offset = ALIGN(start + SZ_8K + 64 * npfns + dax_label_reserve,
|
||||||
max(nd_pfn->align, HPAGE_SIZE)) - start;
|
max(nd_pfn->align, PMD_SIZE)) - start;
|
||||||
} else if (nd_pfn->mode == PFN_MODE_RAM)
|
} else if (nd_pfn->mode == PFN_MODE_RAM)
|
||||||
offset = ALIGN(start + SZ_8K + dax_label_reserve,
|
offset = ALIGN(start + SZ_8K + dax_label_reserve,
|
||||||
nd_pfn->align) - start;
|
nd_pfn->align) - start;
|
||||||
|
Loading…
Reference in New Issue
Block a user