Merge tag 'libnvdimm-for-5.5' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm
Pull libnvdimm updates from Dan Williams: "The highlight this cycle is continuing integration fixes for PowerPC and some resulting optimizations. Summary: - Updates to better support vmalloc space restrictions on PowerPC platforms. - Cleanups to move common sysfs attributes to core 'struct device_type' objects. - Export the 'target_node' attribute (the effective numa node if pmem is marked online) for regions and namespaces. - Miscellaneous fixups and optimizations" * tag 'libnvdimm-for-5.5' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm: (21 commits) MAINTAINERS: Remove Keith from NVDIMM maintainers libnvdimm: Export the target_node attribute for regions and namespaces dax: Add numa_node to the default device-dax attributes libnvdimm: Simplify root read-only definition for the 'resource' attribute dax: Simplify root read-only definition for the 'resource' attribute dax: Create a dax device_type libnvdimm: Move nvdimm_bus_attribute_group to device_type libnvdimm: Move nvdimm_attribute_group to device_type libnvdimm: Move nd_mapping_attribute_group to device_type libnvdimm: Move nd_region_attribute_group to device_type libnvdimm: Move nd_numa_attribute_group to device_type libnvdimm: Move nd_device_attribute_group to device_type libnvdimm: Move region attribute group definition libnvdimm: Move attribute groups to device type libnvdimm: Remove prototypes for nonexistent functions libnvdimm/btt: fix variable 'rc' set but not used libnvdimm/pmem: Delete include of nd-core.h libnvdimm/namespace: Differentiate between probe mapping and runtime mapping libnvdimm/pfn_dev: Don't clear device memmap area during generic namespace probe libnvdimm: Trivial comment fix ...
Šī revīzija ir iekļauta:
@@ -309,7 +309,7 @@ static ssize_t resource_show(struct device *dev,
|
||||
|
||||
return sprintf(buf, "%#llx\n", dev_dax_resource(dev_dax));
|
||||
}
|
||||
static DEVICE_ATTR_RO(resource);
|
||||
static DEVICE_ATTR(resource, 0400, resource_show, NULL);
|
||||
|
||||
static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
@@ -322,6 +322,13 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
|
||||
}
|
||||
static DEVICE_ATTR_RO(modalias);
|
||||
|
||||
static ssize_t numa_node_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return sprintf(buf, "%d\n", dev_to_node(dev));
|
||||
}
|
||||
static DEVICE_ATTR_RO(numa_node);
|
||||
|
||||
static umode_t dev_dax_visible(struct kobject *kobj, struct attribute *a, int n)
|
||||
{
|
||||
struct device *dev = container_of(kobj, struct device, kobj);
|
||||
@@ -329,8 +336,8 @@ static umode_t dev_dax_visible(struct kobject *kobj, struct attribute *a, int n)
|
||||
|
||||
if (a == &dev_attr_target_node.attr && dev_dax_target_node(dev_dax) < 0)
|
||||
return 0;
|
||||
if (a == &dev_attr_resource.attr)
|
||||
return 0400;
|
||||
if (a == &dev_attr_numa_node.attr && !IS_ENABLED(CONFIG_NUMA))
|
||||
return 0;
|
||||
return a->mode;
|
||||
}
|
||||
|
||||
@@ -339,6 +346,7 @@ static struct attribute *dev_dax_attributes[] = {
|
||||
&dev_attr_size.attr,
|
||||
&dev_attr_target_node.attr,
|
||||
&dev_attr_resource.attr,
|
||||
&dev_attr_numa_node.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
@@ -373,6 +381,11 @@ static void dev_dax_release(struct device *dev)
|
||||
kfree(dev_dax);
|
||||
}
|
||||
|
||||
static const struct device_type dev_dax_type = {
|
||||
.release = dev_dax_release,
|
||||
.groups = dax_attribute_groups,
|
||||
};
|
||||
|
||||
static void unregister_dev_dax(void *dev)
|
||||
{
|
||||
struct dev_dax *dev_dax = to_dev_dax(dev);
|
||||
@@ -430,8 +443,7 @@ struct dev_dax *__devm_create_dev_dax(struct dax_region *dax_region, int id,
|
||||
else
|
||||
dev->class = dax_class;
|
||||
dev->parent = parent;
|
||||
dev->groups = dax_attribute_groups;
|
||||
dev->release = dev_dax_release;
|
||||
dev->type = &dev_dax_type;
|
||||
dev_set_name(dev, "dax%d.%d", dax_region->id, id);
|
||||
|
||||
rc = device_add(dev);
|
||||
|
@@ -25,20 +25,20 @@ struct dev_dax *__dax_pmem_probe(struct device *dev, enum dev_dax_subsys subsys)
|
||||
ndns = nvdimm_namespace_common_probe(dev);
|
||||
if (IS_ERR(ndns))
|
||||
return ERR_CAST(ndns);
|
||||
nsio = to_nd_namespace_io(&ndns->dev);
|
||||
|
||||
/* parse the 'pfn' info block via ->rw_bytes */
|
||||
rc = devm_nsio_enable(dev, nsio);
|
||||
rc = devm_namespace_enable(dev, ndns, nd_info_block_reserve());
|
||||
if (rc)
|
||||
return ERR_PTR(rc);
|
||||
rc = nvdimm_setup_pfn(nd_pfn, &pgmap);
|
||||
if (rc)
|
||||
return ERR_PTR(rc);
|
||||
devm_nsio_disable(dev, nsio);
|
||||
devm_namespace_disable(dev, ndns);
|
||||
|
||||
/* reserve the metadata area, device-dax will reserve the data */
|
||||
pfn_sb = nd_pfn->pfn_sb;
|
||||
offset = le64_to_cpu(pfn_sb->dataoff);
|
||||
nsio = to_nd_namespace_io(&ndns->dev);
|
||||
if (!devm_request_mem_region(dev, nsio->res.start, offset,
|
||||
dev_name(&ndns->dev))) {
|
||||
dev_warn(dev, "could not reserve metadata\n");
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user