Merge tag 'libnvdimm-fixes-5.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm
More libnvdimm updates from Dan Williams: - Complete the reworks to interoperate with powerpc dynamic huge page sizes - Fix a crash due to missed accounting for the powerpc 'struct page'-memmap mapping granularity - Fix badblock initialization for volatile (DRAM emulated) pmem ranges - Stop triggering request_key() notifications to userspace when NVDIMM-security is disabled / not present - Miscellaneous small fixups * tag 'libnvdimm-fixes-5.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm: libnvdimm/region: Enable MAP_SYNC for volatile regions libnvdimm: prevent nvdimm from requesting key when security is disabled libnvdimm/region: Initialize bad block for volatile namespaces libnvdimm/nfit_test: Fix acpi_handle redefinition libnvdimm/altmap: Track namespace boundaries in altmap libnvdimm: Fix endian conversion issues libnvdimm/dax: Pick the right alignment default when creating dax devices powerpc/book3s64: Export has_transparent_hugepage() related functions.
This commit is contained in:
@@ -406,6 +406,8 @@ int hash__has_transparent_hugepage(void)
|
||||
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hash__has_transparent_hugepage);
|
||||
|
||||
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
||||
|
||||
#ifdef CONFIG_STRICT_KERNEL_RWX
|
||||
|
@@ -1027,13 +1027,6 @@ pmd_t radix__pmdp_huge_get_and_clear(struct mm_struct *mm,
|
||||
return old_pmd;
|
||||
}
|
||||
|
||||
int radix__has_transparent_hugepage(void)
|
||||
{
|
||||
/* For radix 2M at PMD level means thp */
|
||||
if (mmu_psize_defs[MMU_PAGE_2M].shift == PMD_SHIFT)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
||||
|
||||
void radix__ptep_set_access_flags(struct vm_area_struct *vma, pte_t *ptep,
|
||||
|
@@ -172,6 +172,21 @@ static __meminit void vmemmap_list_populate(unsigned long phys,
|
||||
vmemmap_list = vmem_back;
|
||||
}
|
||||
|
||||
static bool altmap_cross_boundary(struct vmem_altmap *altmap, unsigned long start,
|
||||
unsigned long page_size)
|
||||
{
|
||||
unsigned long nr_pfn = page_size / sizeof(struct page);
|
||||
unsigned long start_pfn = page_to_pfn((struct page *)start);
|
||||
|
||||
if ((start_pfn + nr_pfn) > altmap->end_pfn)
|
||||
return true;
|
||||
|
||||
if (start_pfn < altmap->base_pfn)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
|
||||
struct vmem_altmap *altmap)
|
||||
{
|
||||
@@ -194,7 +209,7 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
|
||||
* fail due to alignment issues when using 16MB hugepages, so
|
||||
* fall back to system memory if the altmap allocation fail.
|
||||
*/
|
||||
if (altmap) {
|
||||
if (altmap && !altmap_cross_boundary(altmap, start, page_size)) {
|
||||
p = altmap_alloc_block_buf(page_size, altmap);
|
||||
if (!p)
|
||||
pr_debug("altmap block allocation failed, falling back to system memory");
|
||||
|
Reference in New Issue
Block a user