Commit a61fe6f7 authored by Dan Williams's avatar Dan Williams

nfit, tools/testing/nvdimm: unify common init for acpi_nfit_desc

The nvdimm unit test infrastructure performs its own initialization of
an acpi_nfit_desc to specify test overrides over the native
implementation.  Make it clear which attributes and operations it is
overriding by re-using acpi_nfit_init_desc() as a common starting point.
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 71999466
...@@ -748,12 +748,11 @@ static struct attribute_group acpi_nfit_attribute_group = { ...@@ -748,12 +748,11 @@ static struct attribute_group acpi_nfit_attribute_group = {
.attrs = acpi_nfit_attributes, .attrs = acpi_nfit_attributes,
}; };
const struct attribute_group *acpi_nfit_attribute_groups[] = { static const struct attribute_group *acpi_nfit_attribute_groups[] = {
&nvdimm_bus_attribute_group, &nvdimm_bus_attribute_group,
&acpi_nfit_attribute_group, &acpi_nfit_attribute_group,
NULL, NULL,
}; };
EXPORT_SYMBOL_GPL(acpi_nfit_attribute_groups);
static struct acpi_nfit_memory_map *to_nfit_memdev(struct device *dev) static struct acpi_nfit_memory_map *to_nfit_memdev(struct device *dev)
{ {
...@@ -1962,15 +1961,9 @@ int acpi_nfit_init(struct acpi_nfit_desc *acpi_desc, acpi_size sz) ...@@ -1962,15 +1961,9 @@ int acpi_nfit_init(struct acpi_nfit_desc *acpi_desc, acpi_size sz)
} }
EXPORT_SYMBOL_GPL(acpi_nfit_init); EXPORT_SYMBOL_GPL(acpi_nfit_init);
static struct acpi_nfit_desc *acpi_nfit_desc_init(struct acpi_device *adev) void acpi_nfit_desc_init(struct acpi_nfit_desc *acpi_desc, struct device *dev)
{ {
struct nvdimm_bus_descriptor *nd_desc; struct nvdimm_bus_descriptor *nd_desc;
struct acpi_nfit_desc *acpi_desc;
struct device *dev = &adev->dev;
acpi_desc = devm_kzalloc(dev, sizeof(*acpi_desc), GFP_KERNEL);
if (!acpi_desc)
return ERR_PTR(-ENOMEM);
dev_set_drvdata(dev, acpi_desc); dev_set_drvdata(dev, acpi_desc);
acpi_desc->dev = dev; acpi_desc->dev = dev;
...@@ -1980,12 +1973,6 @@ static struct acpi_nfit_desc *acpi_nfit_desc_init(struct acpi_device *adev) ...@@ -1980,12 +1973,6 @@ static struct acpi_nfit_desc *acpi_nfit_desc_init(struct acpi_device *adev)
nd_desc->ndctl = acpi_nfit_ctl; nd_desc->ndctl = acpi_nfit_ctl;
nd_desc->attr_groups = acpi_nfit_attribute_groups; nd_desc->attr_groups = acpi_nfit_attribute_groups;
acpi_desc->nvdimm_bus = nvdimm_bus_register(dev, nd_desc);
if (!acpi_desc->nvdimm_bus) {
devm_kfree(dev, acpi_desc);
return ERR_PTR(-ENXIO);
}
INIT_LIST_HEAD(&acpi_desc->spa_maps); INIT_LIST_HEAD(&acpi_desc->spa_maps);
INIT_LIST_HEAD(&acpi_desc->spas); INIT_LIST_HEAD(&acpi_desc->spas);
INIT_LIST_HEAD(&acpi_desc->dcrs); INIT_LIST_HEAD(&acpi_desc->dcrs);
...@@ -1996,9 +1983,8 @@ static struct acpi_nfit_desc *acpi_nfit_desc_init(struct acpi_device *adev) ...@@ -1996,9 +1983,8 @@ static struct acpi_nfit_desc *acpi_nfit_desc_init(struct acpi_device *adev)
INIT_LIST_HEAD(&acpi_desc->dimms); INIT_LIST_HEAD(&acpi_desc->dimms);
mutex_init(&acpi_desc->spa_map_mutex); mutex_init(&acpi_desc->spa_map_mutex);
mutex_init(&acpi_desc->init_mutex); mutex_init(&acpi_desc->init_mutex);
return acpi_desc;
} }
EXPORT_SYMBOL_GPL(acpi_nfit_desc_init);
static int acpi_nfit_add(struct acpi_device *adev) static int acpi_nfit_add(struct acpi_device *adev)
{ {
...@@ -2017,12 +2003,13 @@ static int acpi_nfit_add(struct acpi_device *adev) ...@@ -2017,12 +2003,13 @@ static int acpi_nfit_add(struct acpi_device *adev)
return 0; return 0;
} }
acpi_desc = acpi_nfit_desc_init(adev); acpi_desc = devm_kzalloc(dev, sizeof(*acpi_desc), GFP_KERNEL);
if (IS_ERR(acpi_desc)) { if (!acpi_desc)
dev_err(dev, "%s: error initializing acpi_desc: %ld\n", return -ENOMEM;
__func__, PTR_ERR(acpi_desc)); acpi_nfit_desc_init(acpi_desc, &adev->dev);
return PTR_ERR(acpi_desc); acpi_desc->nvdimm_bus = nvdimm_bus_register(dev, &acpi_desc->nd_desc);
} if (!acpi_desc->nvdimm_bus)
return -ENOMEM;
/* /*
* Save the acpi header for later and then skip it, * Save the acpi header for later and then skip it,
...@@ -2085,12 +2072,13 @@ static void acpi_nfit_notify(struct acpi_device *adev, u32 event) ...@@ -2085,12 +2072,13 @@ static void acpi_nfit_notify(struct acpi_device *adev, u32 event)
} }
if (!acpi_desc) { if (!acpi_desc) {
acpi_desc = acpi_nfit_desc_init(adev); acpi_desc = devm_kzalloc(dev, sizeof(*acpi_desc), GFP_KERNEL);
if (IS_ERR(acpi_desc)) { if (!acpi_desc)
dev_err(dev, "%s: error initializing acpi_desc: %ld\n", goto out_unlock;
__func__, PTR_ERR(acpi_desc)); acpi_nfit_desc_init(acpi_desc, &adev->dev);
acpi_desc->nvdimm_bus = nvdimm_bus_register(dev, &acpi_desc->nd_desc);
if (!acpi_desc->nvdimm_bus)
goto out_unlock; goto out_unlock;
}
} }
/* Evaluate _FIT */ /* Evaluate _FIT */
......
...@@ -195,5 +195,5 @@ static inline struct acpi_nfit_desc *to_acpi_desc( ...@@ -195,5 +195,5 @@ static inline struct acpi_nfit_desc *to_acpi_desc(
const u8 *to_nfit_uuid(enum nfit_uuids id); const u8 *to_nfit_uuid(enum nfit_uuids id);
int acpi_nfit_init(struct acpi_nfit_desc *nfit, acpi_size sz); int acpi_nfit_init(struct acpi_nfit_desc *nfit, acpi_size sz);
extern const struct attribute_group *acpi_nfit_attribute_groups[]; void acpi_nfit_desc_init(struct acpi_nfit_desc *acpi_desc, struct device *dev);
#endif /* __NFIT_H__ */ #endif /* __NFIT_H__ */
...@@ -499,7 +499,6 @@ static int nfit_test1_alloc(struct nfit_test *t) ...@@ -499,7 +499,6 @@ static int nfit_test1_alloc(struct nfit_test *t)
static void nfit_test0_setup(struct nfit_test *t) static void nfit_test0_setup(struct nfit_test *t)
{ {
struct nvdimm_bus_descriptor *nd_desc;
struct acpi_nfit_desc *acpi_desc; struct acpi_nfit_desc *acpi_desc;
struct acpi_nfit_memory_map *memdev; struct acpi_nfit_memory_map *memdev;
void *nfit_buf = t->nfit_buf; void *nfit_buf = t->nfit_buf;
...@@ -1165,8 +1164,6 @@ static void nfit_test0_setup(struct nfit_test *t) ...@@ -1165,8 +1164,6 @@ static void nfit_test0_setup(struct nfit_test *t)
set_bit(ND_CMD_ARS_CAP, &acpi_desc->bus_dsm_force_en); set_bit(ND_CMD_ARS_CAP, &acpi_desc->bus_dsm_force_en);
set_bit(ND_CMD_ARS_START, &acpi_desc->bus_dsm_force_en); set_bit(ND_CMD_ARS_START, &acpi_desc->bus_dsm_force_en);
set_bit(ND_CMD_ARS_STATUS, &acpi_desc->bus_dsm_force_en); set_bit(ND_CMD_ARS_STATUS, &acpi_desc->bus_dsm_force_en);
nd_desc = &acpi_desc->nd_desc;
nd_desc->ndctl = nfit_test_ctl;
} }
static void nfit_test1_setup(struct nfit_test *t) static void nfit_test1_setup(struct nfit_test *t)
...@@ -1176,7 +1173,6 @@ static void nfit_test1_setup(struct nfit_test *t) ...@@ -1176,7 +1173,6 @@ static void nfit_test1_setup(struct nfit_test *t)
struct acpi_nfit_memory_map *memdev; struct acpi_nfit_memory_map *memdev;
struct acpi_nfit_control_region *dcr; struct acpi_nfit_control_region *dcr;
struct acpi_nfit_system_address *spa; struct acpi_nfit_system_address *spa;
struct nvdimm_bus_descriptor *nd_desc;
struct acpi_nfit_desc *acpi_desc; struct acpi_nfit_desc *acpi_desc;
offset = 0; offset = 0;
...@@ -1226,8 +1222,6 @@ static void nfit_test1_setup(struct nfit_test *t) ...@@ -1226,8 +1222,6 @@ static void nfit_test1_setup(struct nfit_test *t)
set_bit(ND_CMD_ARS_CAP, &acpi_desc->bus_dsm_force_en); set_bit(ND_CMD_ARS_CAP, &acpi_desc->bus_dsm_force_en);
set_bit(ND_CMD_ARS_START, &acpi_desc->bus_dsm_force_en); set_bit(ND_CMD_ARS_START, &acpi_desc->bus_dsm_force_en);
set_bit(ND_CMD_ARS_STATUS, &acpi_desc->bus_dsm_force_en); set_bit(ND_CMD_ARS_STATUS, &acpi_desc->bus_dsm_force_en);
nd_desc = &acpi_desc->nd_desc;
nd_desc->ndctl = nfit_test_ctl;
} }
static int nfit_test_blk_do_io(struct nd_blk_region *ndbr, resource_size_t dpa, static int nfit_test_blk_do_io(struct nd_blk_region *ndbr, resource_size_t dpa,
...@@ -1310,26 +1304,16 @@ static int nfit_test_probe(struct platform_device *pdev) ...@@ -1310,26 +1304,16 @@ static int nfit_test_probe(struct platform_device *pdev)
nfit_test->setup(nfit_test); nfit_test->setup(nfit_test);
acpi_desc = &nfit_test->acpi_desc; acpi_desc = &nfit_test->acpi_desc;
acpi_desc->dev = &pdev->dev; acpi_nfit_desc_init(acpi_desc, &pdev->dev);
acpi_desc->nfit = nfit_test->nfit_buf; acpi_desc->nfit = nfit_test->nfit_buf;
acpi_desc->blk_do_io = nfit_test_blk_do_io; acpi_desc->blk_do_io = nfit_test_blk_do_io;
nd_desc = &acpi_desc->nd_desc; nd_desc = &acpi_desc->nd_desc;
nd_desc->attr_groups = acpi_nfit_attribute_groups; nd_desc->provider_name = NULL;
nd_desc->ndctl = nfit_test_ctl;
acpi_desc->nvdimm_bus = nvdimm_bus_register(&pdev->dev, nd_desc); acpi_desc->nvdimm_bus = nvdimm_bus_register(&pdev->dev, nd_desc);
if (!acpi_desc->nvdimm_bus) if (!acpi_desc->nvdimm_bus)
return -ENXIO; return -ENXIO;
INIT_LIST_HEAD(&acpi_desc->spa_maps);
INIT_LIST_HEAD(&acpi_desc->spas);
INIT_LIST_HEAD(&acpi_desc->dcrs);
INIT_LIST_HEAD(&acpi_desc->bdws);
INIT_LIST_HEAD(&acpi_desc->idts);
INIT_LIST_HEAD(&acpi_desc->flushes);
INIT_LIST_HEAD(&acpi_desc->memdevs);
INIT_LIST_HEAD(&acpi_desc->dimms);
mutex_init(&acpi_desc->spa_map_mutex);
mutex_init(&acpi_desc->init_mutex);
rc = acpi_nfit_init(acpi_desc, nfit_test->nfit_size); rc = acpi_nfit_init(acpi_desc, nfit_test->nfit_size);
if (rc) { if (rc) {
nvdimm_bus_unregister(acpi_desc->nvdimm_bus); nvdimm_bus_unregister(acpi_desc->nvdimm_bus);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment