aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/dax/dax-private.h3
-rw-r--r--drivers/dax/device.c24
2 files changed, 3 insertions, 24 deletions
diff --git a/drivers/dax/dax-private.h b/drivers/dax/dax-private.h
index b6fc4f04636d..d1b36a42132f 100644
--- a/drivers/dax/dax-private.h
+++ b/drivers/dax/dax-private.h
@@ -28,7 +28,6 @@
28 */ 28 */
29struct dax_region { 29struct dax_region {
30 int id; 30 int id;
31 struct ida ida;
32 void *base; 31 void *base;
33 struct kref kref; 32 struct kref kref;
34 struct device *dev; 33 struct device *dev;
@@ -42,7 +41,6 @@ struct dax_region {
42 * @region - parent region 41 * @region - parent region
43 * @dax_dev - core dax functionality 42 * @dax_dev - core dax functionality
44 * @dev - device core 43 * @dev - device core
45 * @id - child id in the region
46 * @num_resources - number of physical address extents in this device 44 * @num_resources - number of physical address extents in this device
47 * @res - array of physical address ranges 45 * @res - array of physical address ranges
48 */ 46 */
@@ -50,7 +48,6 @@ struct dev_dax {
50 struct dax_region *region; 48 struct dax_region *region;
51 struct dax_device *dax_dev; 49 struct dax_device *dax_dev;
52 struct device dev; 50 struct device dev;
53 int id;
54 int num_resources; 51 int num_resources;
55 struct resource res[0]; 52 struct resource res[0];
56}; 53};
diff --git a/drivers/dax/device.c b/drivers/dax/device.c
index 948806e57cee..a5a670c1cd58 100644
--- a/drivers/dax/device.c
+++ b/drivers/dax/device.c
@@ -128,7 +128,6 @@ struct dax_region *alloc_dax_region(struct device *parent, int region_id,
128 dax_region->pfn_flags = pfn_flags; 128 dax_region->pfn_flags = pfn_flags;
129 kref_init(&dax_region->kref); 129 kref_init(&dax_region->kref);
130 dax_region->id = region_id; 130 dax_region->id = region_id;
131 ida_init(&dax_region->ida);
132 dax_region->align = align; 131 dax_region->align = align;
133 dax_region->dev = parent; 132 dax_region->dev = parent;
134 dax_region->base = addr; 133 dax_region->base = addr;
@@ -582,8 +581,6 @@ static void dev_dax_release(struct device *dev)
582 struct dax_region *dax_region = dev_dax->region; 581 struct dax_region *dax_region = dev_dax->region;
583 struct dax_device *dax_dev = dev_dax->dax_dev; 582 struct dax_device *dax_dev = dev_dax->dax_dev;
584 583
585 if (dev_dax->id >= 0)
586 ida_simple_remove(&dax_region->ida, dev_dax->id);
587 dax_region_put(dax_region); 584 dax_region_put(dax_region);
588 put_dax(dax_dev); 585 put_dax(dax_dev);
589 kfree(dev_dax); 586 kfree(dev_dax);
@@ -642,19 +639,7 @@ struct dev_dax *devm_create_dev_dax(struct dax_region *dax_region,
642 } 639 }
643 640
644 if (i < count) 641 if (i < count)
645 goto err_id; 642 goto err;
646
647 if (id < 0) {
648 id = ida_simple_get(&dax_region->ida, 0, 0, GFP_KERNEL);
649 dev_dax->id = id;
650 if (id < 0) {
651 rc = id;
652 goto err_id;
653 }
654 } else {
655 /* region provider owns @id lifetime */
656 dev_dax->id = -1;
657 }
658 643
659 /* 644 /*
660 * No 'host' or dax_operations since there is no access to this 645 * No 'host' or dax_operations since there is no access to this
@@ -663,7 +648,7 @@ struct dev_dax *devm_create_dev_dax(struct dax_region *dax_region,
663 dax_dev = alloc_dax(dev_dax, NULL, NULL); 648 dax_dev = alloc_dax(dev_dax, NULL, NULL);
664 if (!dax_dev) { 649 if (!dax_dev) {
665 rc = -ENOMEM; 650 rc = -ENOMEM;
666 goto err_dax; 651 goto err;
667 } 652 }
668 653
669 /* from here on we're committed to teardown via dax_dev_release() */ 654 /* from here on we're committed to teardown via dax_dev_release() */
@@ -700,10 +685,7 @@ struct dev_dax *devm_create_dev_dax(struct dax_region *dax_region,
700 685
701 return dev_dax; 686 return dev_dax;
702 687
703 err_dax: 688 err:
704 if (dev_dax->id >= 0)
705 ida_simple_remove(&dax_region->ida, dev_dax->id);
706 err_id:
707 kfree(dev_dax); 689 kfree(dev_dax);
708 690
709 return ERR_PTR(rc); 691 return ERR_PTR(rc);