scsi: mpi3mr: Use ida to manage mrioc ID
To ensure that the same ID is not obtained during concurrent execution of the probe, an ida is used to manage the mrioc's ID. Signed-off-by: Guixin Liu <kanie@linux.alibaba.com> Link: https://lore.kernel.org/r/20231229040331.52518-1-kanie@linux.alibaba.com Reviewed-by: Lee Duncan <lduncan@suse.com> Reviewed-by: Martin Wilck <mwilck@suse.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
165470fb26
commit
29b75184f7
@ -8,11 +8,12 @@
|
||||
*/
|
||||
|
||||
#include "mpi3mr.h"
|
||||
#include <linux/idr.h>
|
||||
|
||||
/* global driver scop variables */
|
||||
LIST_HEAD(mrioc_list);
|
||||
DEFINE_SPINLOCK(mrioc_list_lock);
|
||||
static int mrioc_ids;
|
||||
static DEFINE_IDA(mrioc_ida);
|
||||
static int warn_non_secure_ctlr;
|
||||
atomic64_t event_counter;
|
||||
|
||||
@ -5072,7 +5073,10 @@ mpi3mr_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
}
|
||||
|
||||
mrioc = shost_priv(shost);
|
||||
mrioc->id = mrioc_ids++;
|
||||
retval = ida_alloc_range(&mrioc_ida, 1, U8_MAX, GFP_KERNEL);
|
||||
if (retval < 0)
|
||||
goto id_alloc_failed;
|
||||
mrioc->id = (u8)retval;
|
||||
sprintf(mrioc->driver_name, "%s", MPI3MR_DRIVER_NAME);
|
||||
sprintf(mrioc->name, "%s%d", mrioc->driver_name, mrioc->id);
|
||||
INIT_LIST_HEAD(&mrioc->list);
|
||||
@ -5222,9 +5226,11 @@ init_ioc_failed:
|
||||
resource_alloc_failed:
|
||||
destroy_workqueue(mrioc->fwevt_worker_thread);
|
||||
fwevtthread_failed:
|
||||
ida_free(&mrioc_ida, mrioc->id);
|
||||
spin_lock(&mrioc_list_lock);
|
||||
list_del(&mrioc->list);
|
||||
spin_unlock(&mrioc_list_lock);
|
||||
id_alloc_failed:
|
||||
scsi_host_put(shost);
|
||||
shost_failed:
|
||||
return retval;
|
||||
@ -5310,6 +5316,7 @@ static void mpi3mr_remove(struct pci_dev *pdev)
|
||||
mrioc->sas_hba.num_phys = 0;
|
||||
}
|
||||
|
||||
ida_free(&mrioc_ida, mrioc->id);
|
||||
spin_lock(&mrioc_list_lock);
|
||||
list_del(&mrioc->list);
|
||||
spin_unlock(&mrioc_list_lock);
|
||||
@ -5525,6 +5532,7 @@ static void __exit mpi3mr_exit(void)
|
||||
&driver_attr_event_counter);
|
||||
pci_unregister_driver(&mpi3mr_pci_driver);
|
||||
sas_release_transport(mpi3mr_transport_template);
|
||||
ida_destroy(&mrioc_ida);
|
||||
}
|
||||
|
||||
module_init(mpi3mr_init);
|
||||
|
Loading…
x
Reference in New Issue
Block a user