Merge tag 'libnvdimm-fixes-5.15-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm

Pull libnvdimm fixes from Dan Williams:
"A fix for a regression added this cycle in the pmem driver, and for a
long standing bug for failed NUMA node lookups on ARM64.

This has appeared in -next for several days with no reported issues.

Summary:

- Fix a regression that caused the sysfs ABI for pmem block devices
to not be registered. This fails the nvdimm unit tests and dax
xfstests.

- Fix numa node lookups for dax-kmem memory (device-dax memory
assigned to the page allocator) on ARM64"

* tag 'libnvdimm-fixes-5.15-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm:
nvdimm/pmem: fix creating the dax group
ACPI: NFIT: Use fallback node id when numa info in NFIT table is incorrect

+13 -4
+12
drivers/acpi/nfit/core.c
··· 3007 ndr_desc->target_node = NUMA_NO_NODE; 3008 } 3009 3010 /* 3011 * Persistence domain bits are hierarchical, if 3012 * ACPI_NFIT_CAPABILITY_CACHE_FLUSH is set then
··· 3007 ndr_desc->target_node = NUMA_NO_NODE; 3008 } 3009 3010 + /* Fallback to address based numa information if node lookup failed */ 3011 + if (ndr_desc->numa_node == NUMA_NO_NODE) { 3012 + ndr_desc->numa_node = memory_add_physaddr_to_nid(spa->address); 3013 + dev_info(acpi_desc->dev, "changing numa node from %d to %d for nfit region [%pa-%pa]", 3014 + NUMA_NO_NODE, ndr_desc->numa_node, &res.start, &res.end); 3015 + } 3016 + if (ndr_desc->target_node == NUMA_NO_NODE) { 3017 + ndr_desc->target_node = phys_to_target_node(spa->address); 3018 + dev_info(acpi_desc->dev, "changing target node from %d to %d for nfit region [%pa-%pa]", 3019 + NUMA_NO_NODE, ndr_desc->numa_node, &res.start, &res.end); 3020 + } 3021 + 3022 /* 3023 * Persistence domain bits are hierarchical, if 3024 * ACPI_NFIT_CAPABILITY_CACHE_FLUSH is set then
+1 -4
drivers/nvdimm/pmem.c
··· 380 struct nd_pfn_sb *pfn_sb; 381 struct pmem_device *pmem; 382 struct request_queue *q; 383 - struct device *gendev; 384 struct gendisk *disk; 385 void *addr; 386 int rc; ··· 488 } 489 dax_write_cache(dax_dev, nvdimm_has_cache(nd_region)); 490 pmem->dax_dev = dax_dev; 491 - gendev = disk_to_dev(disk); 492 - gendev->groups = pmem_attribute_groups; 493 494 - device_add_disk(dev, disk, NULL); 495 if (devm_add_action_or_reset(dev, pmem_release_disk, pmem)) 496 return -ENOMEM; 497
··· 380 struct nd_pfn_sb *pfn_sb; 381 struct pmem_device *pmem; 382 struct request_queue *q; 383 struct gendisk *disk; 384 void *addr; 385 int rc; ··· 489 } 490 dax_write_cache(dax_dev, nvdimm_has_cache(nd_region)); 491 pmem->dax_dev = dax_dev; 492 493 + device_add_disk(dev, disk, pmem_attribute_groups); 494 if (devm_add_action_or_reset(dev, pmem_release_disk, pmem)) 495 return -ENOMEM; 496