|
@@ -40,7 +40,7 @@
|
|
|
#include "scsi_logging.h"
|
|
|
|
|
|
|
|
|
-static int scsi_host_next_hn; /* host_no for next new host */
|
|
|
+static atomic_t scsi_host_next_hn; /* host_no for next new host */
|
|
|
|
|
|
|
|
|
static void scsi_host_cls_release(struct device *dev)
|
|
@@ -333,7 +333,11 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
|
|
|
|
|
|
mutex_init(&shost->scan_mutex);
|
|
|
|
|
|
- shost->host_no = scsi_host_next_hn++; /* XXX(hch): still racy */
|
|
|
+ /*
|
|
|
+ * subtract one because we increment first then return, but we need to
|
|
|
+ * know what the next host number was before increment
|
|
|
+ */
|
|
|
+ shost->host_no = atomic_inc_return(&scsi_host_next_hn) - 1;
|
|
|
shost->dma_channel = 0xff;
|
|
|
|
|
|
/* These three are default values which can be overridden */
|