Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e2d1926b authored by Ulf Hansson's avatar Ulf Hansson
Browse files

mmc: core: Free all resources for the class device at ->dev_release()



To be consistent when freeing data, let's move the idr_remove() call
from mmc_free_host() into the ->dev_release() callback for the class
device.

Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 7f133de1
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -32,10 +32,16 @@

#define cls_dev_to_mmc_host(d)	container_of(d, struct mmc_host, class_dev)

static DEFINE_IDR(mmc_host_idr);
static DEFINE_SPINLOCK(mmc_host_lock);

static void mmc_host_classdev_release(struct device *dev)
{
	struct mmc_host *host = cls_dev_to_mmc_host(dev);
	mutex_destroy(&host->slot.lock);
	spin_lock(&mmc_host_lock);
	idr_remove(&mmc_host_idr, host->index);
	spin_unlock(&mmc_host_lock);
	kfree(host);
}

@@ -54,9 +60,6 @@ void mmc_unregister_host_class(void)
	class_unregister(&mmc_host_class);
}

static DEFINE_IDR(mmc_host_idr);
static DEFINE_SPINLOCK(mmc_host_lock);

#ifdef CONFIG_MMC_CLKGATE
static ssize_t clkgate_delay_show(struct device *dev,
		struct device_attribute *attr, char *buf)
@@ -585,10 +588,6 @@ EXPORT_SYMBOL(mmc_remove_host);
 */
void mmc_free_host(struct mmc_host *host)
{
	spin_lock(&mmc_host_lock);
	idr_remove(&mmc_host_idr, host->index);
	spin_unlock(&mmc_host_lock);

	put_device(&host->class_dev);
}