aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/nfit/core.c8
-rw-r--r--drivers/acpi/numa.c1
-rw-r--r--drivers/dax/bus.c4
-rw-r--r--drivers/dax/bus.h3
-rw-r--r--drivers/dax/dax-private.h4
-rw-r--r--drivers/dax/pmem/core.c4
-rw-r--r--drivers/nvdimm/e820.c1
-rw-r--r--drivers/nvdimm/nd.h2
-rw-r--r--drivers/nvdimm/of_pmem.c1
-rw-r--r--drivers/nvdimm/region_devs.c1
10 files changed, 23 insertions, 6 deletions
diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
index 011d3db19c80..475899974c70 100644
--- a/drivers/acpi/nfit/core.c
+++ b/drivers/acpi/nfit/core.c
@@ -2869,11 +2869,15 @@ static int acpi_nfit_register_region(struct acpi_nfit_desc *acpi_desc,
2869 ndr_desc->res = &res; 2869 ndr_desc->res = &res;
2870 ndr_desc->provider_data = nfit_spa; 2870 ndr_desc->provider_data = nfit_spa;
2871 ndr_desc->attr_groups = acpi_nfit_region_attribute_groups; 2871 ndr_desc->attr_groups = acpi_nfit_region_attribute_groups;
2872 if (spa->flags & ACPI_NFIT_PROXIMITY_VALID) 2872 if (spa->flags & ACPI_NFIT_PROXIMITY_VALID) {
2873 ndr_desc->numa_node = acpi_map_pxm_to_online_node( 2873 ndr_desc->numa_node = acpi_map_pxm_to_online_node(
2874 spa->proximity_domain); 2874 spa->proximity_domain);
2875 else 2875 ndr_desc->target_node = acpi_map_pxm_to_node(
2876 spa->proximity_domain);
2877 } else {
2876 ndr_desc->numa_node = NUMA_NO_NODE; 2878 ndr_desc->numa_node = NUMA_NO_NODE;
2879 ndr_desc->target_node = NUMA_NO_NODE;
2880 }
2877 2881
2878 /* 2882 /*
2879 * Persistence domain bits are hierarchical, if 2883 * Persistence domain bits are hierarchical, if
diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c
index 274699463b4f..b9d86babb13a 100644
--- a/drivers/acpi/numa.c
+++ b/drivers/acpi/numa.c
@@ -84,6 +84,7 @@ int acpi_map_pxm_to_node(int pxm)
84 84
85 return node; 85 return node;
86} 86}
87EXPORT_SYMBOL(acpi_map_pxm_to_node);
87 88
88/** 89/**
89 * acpi_map_pxm_to_online_node - Map proximity ID to online node 90 * acpi_map_pxm_to_online_node - Map proximity ID to online node
diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
index 568168500217..c620ad52d7e5 100644
--- a/drivers/dax/bus.c
+++ b/drivers/dax/bus.c
@@ -214,7 +214,7 @@ static void dax_region_unregister(void *region)
214} 214}
215 215
216struct dax_region *alloc_dax_region(struct device *parent, int region_id, 216struct dax_region *alloc_dax_region(struct device *parent, int region_id,
217 struct resource *res, unsigned int align, 217 struct resource *res, int target_node, unsigned int align,
218 unsigned long pfn_flags) 218 unsigned long pfn_flags)
219{ 219{
220 struct dax_region *dax_region; 220 struct dax_region *dax_region;
@@ -244,6 +244,7 @@ struct dax_region *alloc_dax_region(struct device *parent, int region_id,
244 dax_region->id = region_id; 244 dax_region->id = region_id;
245 dax_region->align = align; 245 dax_region->align = align;
246 dax_region->dev = parent; 246 dax_region->dev = parent;
247 dax_region->target_node = target_node;
247 if (sysfs_create_groups(&parent->kobj, dax_region_attribute_groups)) { 248 if (sysfs_create_groups(&parent->kobj, dax_region_attribute_groups)) {
248 kfree(dax_region); 249 kfree(dax_region);
249 return NULL; 250 return NULL;
@@ -348,6 +349,7 @@ struct dev_dax *__devm_create_dev_dax(struct dax_region *dax_region, int id,
348 349
349 dev_dax->dax_dev = dax_dev; 350 dev_dax->dax_dev = dax_dev;
350 dev_dax->region = dax_region; 351 dev_dax->region = dax_region;
352 dev_dax->target_node = dax_region->target_node;
351 kref_get(&dax_region->kref); 353 kref_get(&dax_region->kref);
352 354
353 inode = dax_inode(dax_dev); 355 inode = dax_inode(dax_dev);
diff --git a/drivers/dax/bus.h b/drivers/dax/bus.h
index ce977552ffb5..8619e3299943 100644
--- a/drivers/dax/bus.h
+++ b/drivers/dax/bus.h
@@ -10,7 +10,8 @@ struct dax_device;
10struct dax_region; 10struct dax_region;
11void dax_region_put(struct dax_region *dax_region); 11void dax_region_put(struct dax_region *dax_region);
12struct dax_region *alloc_dax_region(struct device *parent, int region_id, 12struct dax_region *alloc_dax_region(struct device *parent, int region_id,
13 struct resource *res, unsigned int align, unsigned long flags); 13 struct resource *res, int target_node, unsigned int align,
14 unsigned long flags);
14 15
15enum dev_dax_subsys { 16enum dev_dax_subsys {
16 DEV_DAX_BUS, 17 DEV_DAX_BUS,
diff --git a/drivers/dax/dax-private.h b/drivers/dax/dax-private.h
index a82ce48f5884..a45612148ca0 100644
--- a/drivers/dax/dax-private.h
+++ b/drivers/dax/dax-private.h
@@ -26,6 +26,7 @@ void dax_bus_exit(void);
26/** 26/**
27 * struct dax_region - mapping infrastructure for dax devices 27 * struct dax_region - mapping infrastructure for dax devices
28 * @id: kernel-wide unique region for a memory range 28 * @id: kernel-wide unique region for a memory range
29 * @target_node: effective numa node if this memory range is onlined
29 * @kref: to pin while other agents have a need to do lookups 30 * @kref: to pin while other agents have a need to do lookups
30 * @dev: parent device backing this region 31 * @dev: parent device backing this region
31 * @align: allocation and mapping alignment for child dax devices 32 * @align: allocation and mapping alignment for child dax devices
@@ -34,6 +35,7 @@ void dax_bus_exit(void);
34 */ 35 */
35struct dax_region { 36struct dax_region {
36 int id; 37 int id;
38 int target_node;
37 struct kref kref; 39 struct kref kref;
38 struct device *dev; 40 struct device *dev;
39 unsigned int align; 41 unsigned int align;
@@ -46,6 +48,7 @@ struct dax_region {
46 * data while the device is activated in the driver. 48 * data while the device is activated in the driver.
47 * @region - parent region 49 * @region - parent region
48 * @dax_dev - core dax functionality 50 * @dax_dev - core dax functionality
51 * @target_node: effective numa node if dev_dax memory range is onlined
49 * @dev - device core 52 * @dev - device core
50 * @pgmap - pgmap for memmap setup / lifetime (driver owned) 53 * @pgmap - pgmap for memmap setup / lifetime (driver owned)
51 * @ref: pgmap reference count (driver owned) 54 * @ref: pgmap reference count (driver owned)
@@ -54,6 +57,7 @@ struct dax_region {
54struct dev_dax { 57struct dev_dax {
55 struct dax_region *region; 58 struct dax_region *region;
56 struct dax_device *dax_dev; 59 struct dax_device *dax_dev;
60 int target_node;
57 struct device dev; 61 struct device dev;
58 struct dev_pagemap pgmap; 62 struct dev_pagemap pgmap;
59 struct percpu_ref ref; 63 struct percpu_ref ref;
diff --git a/drivers/dax/pmem/core.c b/drivers/dax/pmem/core.c
index bdcff1b14e95..f71019ce0647 100644
--- a/drivers/dax/pmem/core.c
+++ b/drivers/dax/pmem/core.c
@@ -20,6 +20,7 @@ struct dev_dax *__dax_pmem_probe(struct device *dev, enum dev_dax_subsys subsys)
20 struct nd_namespace_common *ndns; 20 struct nd_namespace_common *ndns;
21 struct nd_dax *nd_dax = to_nd_dax(dev); 21 struct nd_dax *nd_dax = to_nd_dax(dev);
22 struct nd_pfn *nd_pfn = &nd_dax->nd_pfn; 22 struct nd_pfn *nd_pfn = &nd_dax->nd_pfn;
23 struct nd_region *nd_region = to_nd_region(dev->parent);
23 24
24 ndns = nvdimm_namespace_common_probe(dev); 25 ndns = nvdimm_namespace_common_probe(dev);
25 if (IS_ERR(ndns)) 26 if (IS_ERR(ndns))
@@ -52,7 +53,8 @@ struct dev_dax *__dax_pmem_probe(struct device *dev, enum dev_dax_subsys subsys)
52 memcpy(&res, &pgmap.res, sizeof(res)); 53 memcpy(&res, &pgmap.res, sizeof(res));
53 res.start += offset; 54 res.start += offset;
54 dax_region = alloc_dax_region(dev, region_id, &res, 55 dax_region = alloc_dax_region(dev, region_id, &res,
55 le32_to_cpu(pfn_sb->align), PFN_DEV|PFN_MAP); 56 nd_region->target_node, le32_to_cpu(pfn_sb->align),
57 PFN_DEV|PFN_MAP);
56 if (!dax_region) 58 if (!dax_region)
57 return ERR_PTR(-ENOMEM); 59 return ERR_PTR(-ENOMEM);
58 60
diff --git a/drivers/nvdimm/e820.c b/drivers/nvdimm/e820.c
index 521eaf53a52a..36be9b619187 100644
--- a/drivers/nvdimm/e820.c
+++ b/drivers/nvdimm/e820.c
@@ -47,6 +47,7 @@ static int e820_register_one(struct resource *res, void *data)
47 ndr_desc.res = res; 47 ndr_desc.res = res;
48 ndr_desc.attr_groups = e820_pmem_region_attribute_groups; 48 ndr_desc.attr_groups = e820_pmem_region_attribute_groups;
49 ndr_desc.numa_node = e820_range_to_nid(res->start); 49 ndr_desc.numa_node = e820_range_to_nid(res->start);
50 ndr_desc.target_node = ndr_desc.numa_node;
50 set_bit(ND_REGION_PAGEMAP, &ndr_desc.flags); 51 set_bit(ND_REGION_PAGEMAP, &ndr_desc.flags);
51 if (!nvdimm_pmem_region_create(nvdimm_bus, &ndr_desc)) 52 if (!nvdimm_pmem_region_create(nvdimm_bus, &ndr_desc))
52 return -ENXIO; 53 return -ENXIO;
diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h
index cfde992684e7..0b3d7595b3cb 100644
--- a/drivers/nvdimm/nd.h
+++ b/drivers/nvdimm/nd.h
@@ -153,7 +153,7 @@ struct nd_region {
153 u16 ndr_mappings; 153 u16 ndr_mappings;
154 u64 ndr_size; 154 u64 ndr_size;
155 u64 ndr_start; 155 u64 ndr_start;
156 int id, num_lanes, ro, numa_node; 156 int id, num_lanes, ro, numa_node, target_node;
157 void *provider_data; 157 void *provider_data;
158 struct kernfs_node *bb_state; 158 struct kernfs_node *bb_state;
159 struct badblocks bb; 159 struct badblocks bb;
diff --git a/drivers/nvdimm/of_pmem.c b/drivers/nvdimm/of_pmem.c
index 0a701837dfc0..ecaaa27438e2 100644
--- a/drivers/nvdimm/of_pmem.c
+++ b/drivers/nvdimm/of_pmem.c
@@ -68,6 +68,7 @@ static int of_pmem_region_probe(struct platform_device *pdev)
68 memset(&ndr_desc, 0, sizeof(ndr_desc)); 68 memset(&ndr_desc, 0, sizeof(ndr_desc));
69 ndr_desc.attr_groups = region_attr_groups; 69 ndr_desc.attr_groups = region_attr_groups;
70 ndr_desc.numa_node = dev_to_node(&pdev->dev); 70 ndr_desc.numa_node = dev_to_node(&pdev->dev);
71 ndr_desc.target_node = ndr_desc.numa_node;
71 ndr_desc.res = &pdev->resource[i]; 72 ndr_desc.res = &pdev->resource[i];
72 ndr_desc.of_node = np; 73 ndr_desc.of_node = np;
73 set_bit(ND_REGION_PAGEMAP, &ndr_desc.flags); 74 set_bit(ND_REGION_PAGEMAP, &ndr_desc.flags);
diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
index e2818f94f292..caf2f3129ccd 100644
--- a/drivers/nvdimm/region_devs.c
+++ b/drivers/nvdimm/region_devs.c
@@ -1065,6 +1065,7 @@ static struct nd_region *nd_region_create(struct nvdimm_bus *nvdimm_bus,
1065 nd_region->flags = ndr_desc->flags; 1065 nd_region->flags = ndr_desc->flags;
1066 nd_region->ro = ro; 1066 nd_region->ro = ro;
1067 nd_region->numa_node = ndr_desc->numa_node; 1067 nd_region->numa_node = ndr_desc->numa_node;
1068 nd_region->target_node = ndr_desc->target_node;
1068 ida_init(&nd_region->ns_ida); 1069 ida_init(&nd_region->ns_ida);
1069 ida_init(&nd_region->btt_ida); 1070 ida_init(&nd_region->btt_ida);
1070 ida_init(&nd_region->pfn_ida); 1071 ida_init(&nd_region->pfn_ida);