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: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
7f133de1fb
commit
e2d1926bad
@ -32,10 +32,16 @@
|
|||||||
|
|
||||||
#define cls_dev_to_mmc_host(d) container_of(d, struct mmc_host, class_dev)
|
#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)
|
static void mmc_host_classdev_release(struct device *dev)
|
||||||
{
|
{
|
||||||
struct mmc_host *host = cls_dev_to_mmc_host(dev);
|
struct mmc_host *host = cls_dev_to_mmc_host(dev);
|
||||||
mutex_destroy(&host->slot.lock);
|
mutex_destroy(&host->slot.lock);
|
||||||
|
spin_lock(&mmc_host_lock);
|
||||||
|
idr_remove(&mmc_host_idr, host->index);
|
||||||
|
spin_unlock(&mmc_host_lock);
|
||||||
kfree(host);
|
kfree(host);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,9 +60,6 @@ void mmc_unregister_host_class(void)
|
|||||||
class_unregister(&mmc_host_class);
|
class_unregister(&mmc_host_class);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DEFINE_IDR(mmc_host_idr);
|
|
||||||
static DEFINE_SPINLOCK(mmc_host_lock);
|
|
||||||
|
|
||||||
#ifdef CONFIG_MMC_CLKGATE
|
#ifdef CONFIG_MMC_CLKGATE
|
||||||
static ssize_t clkgate_delay_show(struct device *dev,
|
static ssize_t clkgate_delay_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
@ -585,10 +588,6 @@ EXPORT_SYMBOL(mmc_remove_host);
|
|||||||
*/
|
*/
|
||||||
void mmc_free_host(struct mmc_host *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);
|
put_device(&host->class_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user