module_param(msi_en, bool, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(msi_en, "Enable MSI");
-static DEFINE_IDR(rtsx_pci_idr);
-static DEFINE_SPINLOCK(rtsx_pci_lock);
+static DEFINE_IDA(rtsx_ids);
static struct mfd_cell rtsx_pcr_cells[] = {
[RTSX_SD_CARD] = {
}
handle->pcr = pcr;
- idr_preload(GFP_KERNEL);
- spin_lock(&rtsx_pci_lock);
- ret = idr_alloc(&rtsx_pci_idr, pcr, 0, 0, GFP_NOWAIT);
- if (ret >= 0)
- pcr->id = ret;
- spin_unlock(&rtsx_pci_lock);
- idr_preload_end();
+ ret = ida_alloc(&rtsx_ids, GFP_KERNEL);
if (ret < 0)
goto free_handle;
+ pcr->id = ret;
pcr->pci = pcidev;
dev_set_drvdata(&pcidev->dev, handle);
pci_release_regions(pcidev);
pci_disable_device(pcidev);
- spin_lock(&rtsx_pci_lock);
- idr_remove(&rtsx_pci_idr, pcr->id);
- spin_unlock(&rtsx_pci_lock);
+ ida_free(&rtsx_ids, pcr->id);
kfree(pcr->slots);
kfree(pcr);