mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 15:50:59 +07:00
[MMC] Use an IDR for host name indicies
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
1ad434d7cf
commit
dce7737718
@ -12,6 +12,7 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
|
#include <linux/idr.h>
|
||||||
|
|
||||||
#include <linux/mmc/card.h>
|
#include <linux/mmc/card.h>
|
||||||
#include <linux/mmc/host.h>
|
#include <linux/mmc/host.h>
|
||||||
@ -236,6 +237,9 @@ static struct class mmc_host_class = {
|
|||||||
.release = mmc_host_classdev_release,
|
.release = mmc_host_classdev_release,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static DEFINE_IDR(mmc_host_idr);
|
||||||
|
static DEFINE_SPINLOCK(mmc_host_lock);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Internal function. Allocate a new MMC host.
|
* Internal function. Allocate a new MMC host.
|
||||||
*/
|
*/
|
||||||
@ -261,10 +265,19 @@ struct mmc_host *mmc_alloc_host_sysfs(int extra, struct device *dev)
|
|||||||
*/
|
*/
|
||||||
int mmc_add_host_sysfs(struct mmc_host *host)
|
int mmc_add_host_sysfs(struct mmc_host *host)
|
||||||
{
|
{
|
||||||
static unsigned int host_num;
|
int err;
|
||||||
|
|
||||||
|
if (!idr_pre_get(&mmc_host_idr, GFP_KERNEL))
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
spin_lock(&mmc_host_lock);
|
||||||
|
err = idr_get_new(&mmc_host_idr, host, &host->index);
|
||||||
|
spin_unlock(&mmc_host_lock);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
snprintf(host->class_dev.class_id, BUS_ID_SIZE,
|
snprintf(host->class_dev.class_id, BUS_ID_SIZE,
|
||||||
"mmc%d", host_num++);
|
"mmc%d", host->index);
|
||||||
|
|
||||||
return class_device_add(&host->class_dev);
|
return class_device_add(&host->class_dev);
|
||||||
}
|
}
|
||||||
@ -275,6 +288,10 @@ int mmc_add_host_sysfs(struct mmc_host *host)
|
|||||||
void mmc_remove_host_sysfs(struct mmc_host *host)
|
void mmc_remove_host_sysfs(struct mmc_host *host)
|
||||||
{
|
{
|
||||||
class_device_del(&host->class_dev);
|
class_device_del(&host->class_dev);
|
||||||
|
|
||||||
|
spin_lock(&mmc_host_lock);
|
||||||
|
idr_remove(&mmc_host_idr, host->index);
|
||||||
|
spin_unlock(&mmc_host_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -64,6 +64,7 @@ struct device;
|
|||||||
struct mmc_host {
|
struct mmc_host {
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
struct class_device class_dev;
|
struct class_device class_dev;
|
||||||
|
int index;
|
||||||
struct mmc_host_ops *ops;
|
struct mmc_host_ops *ops;
|
||||||
unsigned int f_min;
|
unsigned int f_min;
|
||||||
unsigned int f_max;
|
unsigned int f_max;
|
||||||
|
Loading…
Reference in New Issue
Block a user