Loading drivers/dax/dax.c +10 −6 Original line number Diff line number Diff line Loading @@ -558,8 +558,8 @@ static void unregister_dax_dev(void *dev) device_unregister(dev); } int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, int count) struct dax_dev *devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, int count) { struct device *parent = dax_region->dev; struct dax_dev *dax_dev; Loading @@ -570,7 +570,7 @@ int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, dax_dev = kzalloc(sizeof(*dax_dev) + sizeof(*res) * count, GFP_KERNEL); if (!dax_dev) return -ENOMEM; return ERR_PTR(-ENOMEM); for (i = 0; i < count; i++) { if (!IS_ALIGNED(res[i].start, dax_region->align) Loading Loading @@ -632,10 +632,14 @@ int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, rc = device_add(dev); if (rc) { put_device(dev); return rc; return ERR_PTR(rc); } return devm_add_action_or_reset(dax_region->dev, unregister_dax_dev, dev); rc = devm_add_action_or_reset(dax_region->dev, unregister_dax_dev, dev); if (rc) return ERR_PTR(rc); return dax_dev; err_cdev: iput(dax_dev->inode); Loading @@ -646,7 +650,7 @@ int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, err_id: kfree(dax_dev); return rc; return ERR_PTR(rc); } EXPORT_SYMBOL_GPL(devm_create_dax_dev); Loading drivers/dax/dax.h +3 −2 Original line number Diff line number Diff line Loading @@ -13,12 +13,13 @@ #ifndef __DAX_H__ #define __DAX_H__ struct device; struct dax_dev; struct resource; struct dax_region; void dax_region_put(struct dax_region *dax_region); struct dax_region *alloc_dax_region(struct device *parent, int region_id, struct resource *res, unsigned int align, void *addr, unsigned long flags); int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, int count); struct dax_dev *devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, int count); #endif /* __DAX_H__ */ drivers/dax/pmem.c +3 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ static int dax_pmem_probe(struct device *dev) int rc; void *addr; struct resource res; struct dax_dev *dax_dev; struct nd_pfn_sb *pfn_sb; struct dax_pmem *dax_pmem; struct nd_region *nd_region; Loading Loading @@ -123,12 +124,12 @@ static int dax_pmem_probe(struct device *dev) return -ENOMEM; /* TODO: support for subdividing a dax region... */ rc = devm_create_dax_dev(dax_region, &res, 1); dax_dev = devm_create_dax_dev(dax_region, &res, 1); /* child dax_dev instances now own the lifetime of the dax_region */ dax_region_put(dax_region); return rc; return PTR_ERR_OR_ZERO(dax_dev); } static struct nd_device_driver dax_pmem_driver = { Loading Loading
drivers/dax/dax.c +10 −6 Original line number Diff line number Diff line Loading @@ -558,8 +558,8 @@ static void unregister_dax_dev(void *dev) device_unregister(dev); } int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, int count) struct dax_dev *devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, int count) { struct device *parent = dax_region->dev; struct dax_dev *dax_dev; Loading @@ -570,7 +570,7 @@ int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, dax_dev = kzalloc(sizeof(*dax_dev) + sizeof(*res) * count, GFP_KERNEL); if (!dax_dev) return -ENOMEM; return ERR_PTR(-ENOMEM); for (i = 0; i < count; i++) { if (!IS_ALIGNED(res[i].start, dax_region->align) Loading Loading @@ -632,10 +632,14 @@ int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, rc = device_add(dev); if (rc) { put_device(dev); return rc; return ERR_PTR(rc); } return devm_add_action_or_reset(dax_region->dev, unregister_dax_dev, dev); rc = devm_add_action_or_reset(dax_region->dev, unregister_dax_dev, dev); if (rc) return ERR_PTR(rc); return dax_dev; err_cdev: iput(dax_dev->inode); Loading @@ -646,7 +650,7 @@ int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, err_id: kfree(dax_dev); return rc; return ERR_PTR(rc); } EXPORT_SYMBOL_GPL(devm_create_dax_dev); Loading
drivers/dax/dax.h +3 −2 Original line number Diff line number Diff line Loading @@ -13,12 +13,13 @@ #ifndef __DAX_H__ #define __DAX_H__ struct device; struct dax_dev; struct resource; struct dax_region; void dax_region_put(struct dax_region *dax_region); struct dax_region *alloc_dax_region(struct device *parent, int region_id, struct resource *res, unsigned int align, void *addr, unsigned long flags); int devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, int count); struct dax_dev *devm_create_dax_dev(struct dax_region *dax_region, struct resource *res, int count); #endif /* __DAX_H__ */
drivers/dax/pmem.c +3 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ static int dax_pmem_probe(struct device *dev) int rc; void *addr; struct resource res; struct dax_dev *dax_dev; struct nd_pfn_sb *pfn_sb; struct dax_pmem *dax_pmem; struct nd_region *nd_region; Loading Loading @@ -123,12 +124,12 @@ static int dax_pmem_probe(struct device *dev) return -ENOMEM; /* TODO: support for subdividing a dax region... */ rc = devm_create_dax_dev(dax_region, &res, 1); dax_dev = devm_create_dax_dev(dax_region, &res, 1); /* child dax_dev instances now own the lifetime of the dax_region */ dax_region_put(dax_region); return rc; return PTR_ERR_OR_ZERO(dax_dev); } static struct nd_device_driver dax_pmem_driver = { Loading