[PATCH 10/12] qla2xxx: Correct fw-loader module-use referencing.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Subject: Correct fw-loader module-use referencing.

Original implementation would allow a firmware-loader module
to be removed during I/O.

Signed-off-by: Andrew Vasquez <andrew.vasquez@xxxxxxxxxx>

---

 drivers/scsi/qla2xxx/ql2100.c  |    5 ++
 drivers/scsi/qla2xxx/ql2200.c  |    5 ++
 drivers/scsi/qla2xxx/ql2300.c  |    6 +++
 drivers/scsi/qla2xxx/ql2322.c  |    5 ++
 drivers/scsi/qla2xxx/ql2400.c  |    8 +++-
 drivers/scsi/qla2xxx/ql6312.c  |    6 +++
 drivers/scsi/qla2xxx/qla_def.h |    2 -
 drivers/scsi/qla2xxx/qla_os.c  |   85 ++++++++++++++--------------------------
 8 files changed, 63 insertions(+), 59 deletions(-)

applies-to: 5b9c41f9a7562c87e6dbaa6a602b0842d9694896
efa63354c35d8eccf0a7a30a0a9902dd9c461843
diff --git a/drivers/scsi/qla2xxx/ql2100.c b/drivers/scsi/qla2xxx/ql2100.c
index f5db223..8050140 100644
--- a/drivers/scsi/qla2xxx/ql2100.c
+++ b/drivers/scsi/qla2xxx/ql2100.c
@@ -30,11 +30,16 @@ static struct qla_fw_info qla_fw_tbl[] =
 	{ FW_INFO_ADDR_NOMORE, },
 };
 
+static struct scsi_host_template qla_driver_template = {
+	.module = THIS_MODULE,
+};
+
 static struct qla_board_info qla_board_tbl = {
 	.drv_name	= qla_driver_name,
 
 	.isp_name	= "ISP2100",
 	.fw_info	= qla_fw_tbl,
+	.sht		= &qla_driver_template,
 };
 
 static struct pci_device_id qla2100_pci_tbl[] = {
diff --git a/drivers/scsi/qla2xxx/ql2200.c b/drivers/scsi/qla2xxx/ql2200.c
index 0eef72d..e8f2af2 100644
--- a/drivers/scsi/qla2xxx/ql2200.c
+++ b/drivers/scsi/qla2xxx/ql2200.c
@@ -30,11 +30,16 @@ static struct qla_fw_info qla_fw_tbl[] =
 	{ FW_INFO_ADDR_NOMORE, },
 };
 
+static struct scsi_host_template qla_driver_template = {
+	.module = THIS_MODULE,
+};
+
 static struct qla_board_info qla_board_tbl = {
 	.drv_name	= qla_driver_name,
 
 	.isp_name	= "ISP2200",
 	.fw_info	= qla_fw_tbl,
+	.sht		= &qla_driver_template,
 };
 
 static struct pci_device_id qla2200_pci_tbl[] = {
diff --git a/drivers/scsi/qla2xxx/ql2300.c b/drivers/scsi/qla2xxx/ql2300.c
index fd2f4b7..22e13f8 100644
--- a/drivers/scsi/qla2xxx/ql2300.c
+++ b/drivers/scsi/qla2xxx/ql2300.c
@@ -29,16 +29,22 @@ static struct qla_fw_info qla_fw_tbl[] =
 	{ FW_INFO_ADDR_NOMORE, },
 };
 
+static struct scsi_host_template qla_driver_template = {
+	.module = THIS_MODULE,
+};
+
 static struct qla_board_info qla_board_tbl[] = {
 	{
 		.drv_name	= qla_driver_name,
 		.isp_name	= "ISP2300",
 		.fw_info	= qla_fw_tbl,
+		.sht		= &qla_driver_template,
 	},
 	{
 		.drv_name	= qla_driver_name,
 		.isp_name	= "ISP2312",
 		.fw_info	= qla_fw_tbl,
+		.sht		= &qla_driver_template,
 	},
 };
 
diff --git a/drivers/scsi/qla2xxx/ql2322.c b/drivers/scsi/qla2xxx/ql2322.c
index b7affb9..f335470 100644
--- a/drivers/scsi/qla2xxx/ql2322.c
+++ b/drivers/scsi/qla2xxx/ql2322.c
@@ -46,10 +46,15 @@ static struct qla_fw_info qla_fw_tbl[] =
 	{ FW_INFO_ADDR_NOMORE, },
 };
 
+static struct scsi_host_template qla_driver_template = {
+	.module = THIS_MODULE,
+};
+
 static struct qla_board_info qla_board_tbl = {
 	.drv_name	= qla_driver_name,
 	.isp_name	= "ISP2322",
 	.fw_info	= qla_fw_tbl,
+	.sht		= &qla_driver_template,
 };
 
 static struct pci_device_id qla2322_pci_tbl[] = {
diff --git a/drivers/scsi/qla2xxx/ql2400.c b/drivers/scsi/qla2xxx/ql2400.c
index 76a48ed..a7ace67 100644
--- a/drivers/scsi/qla2xxx/ql2400.c
+++ b/drivers/scsi/qla2xxx/ql2400.c
@@ -36,20 +36,24 @@ static struct qla_fw_info qla_fw_tbl[] =
 	{ FW_INFO_ADDR_NOMORE, },
 };
 
+static struct scsi_host_template qla_driver_template = {
+	.module = THIS_MODULE,
+};
+
 static struct qla_board_info qla_board_tbl[] = {
 	{
 		.drv_name	= qla_driver_name,
 		.isp_name	= "ISP2422",
 		.fw_info	= qla_fw_tbl,
 		.fw_fname	= "ql2400_fw.bin",
-		.alternate_sht	= 1,
+		.sht		= &qla_driver_template,
 	},
 	{
 		.drv_name	= qla_driver_name,
 		.isp_name	= "ISP2432",
 		.fw_info	= qla_fw_tbl,
 		.fw_fname	= "ql2400_fw.bin",
-		.alternate_sht	= 1,
+		.sht		= &qla_driver_template,
 	},
 };
 
diff --git a/drivers/scsi/qla2xxx/ql6312.c b/drivers/scsi/qla2xxx/ql6312.c
index de55397..274b337 100644
--- a/drivers/scsi/qla2xxx/ql6312.c
+++ b/drivers/scsi/qla2xxx/ql6312.c
@@ -28,16 +28,22 @@ static struct qla_fw_info qla_fw_tbl[] =
 	{ FW_INFO_ADDR_NOMORE, },
 };
 
+static struct scsi_host_template qla_driver_template = {
+	.module = THIS_MODULE,
+};
+
 static struct qla_board_info qla_board_tbl[] = {
 	{
 		.drv_name	= qla_driver_name,
 		.isp_name	= "ISP6312",
 		.fw_info	= qla_fw_tbl,
+		.sht		= &qla_driver_template,
 	},
 	{
 		.drv_name	= qla_driver_name,
 		.isp_name	= "ISP6322",
 		.fw_info	= qla_fw_tbl,
+		.sht		= &qla_driver_template,
 	},
 };
 
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 1dcb69e..1763081 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -2119,7 +2119,7 @@ struct qla_board_info {
 	char isp_name[8];
 	struct qla_fw_info *fw_info;
 	char *fw_fname;
-	int alternate_sht;
+	struct scsi_host_template *sht;
 };
 
 struct fw_blob {
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 2daba58..d73485e 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -94,60 +94,6 @@ static int qla2x00_device_reset(scsi_qla
 static int qla2x00_change_queue_depth(struct scsi_device *, int);
 static int qla2x00_change_queue_type(struct scsi_device *, int);
 
-static struct scsi_host_template qla2x00_driver_template = {
-	.module			= THIS_MODULE,
-	.name			= "qla2xxx",
-	.queuecommand		= qla2x00_queuecommand,
-
-	.eh_abort_handler	= qla2xxx_eh_abort,
-	.eh_device_reset_handler = qla2xxx_eh_device_reset,
-	.eh_bus_reset_handler	= qla2xxx_eh_bus_reset,
-	.eh_host_reset_handler	= qla2xxx_eh_host_reset,
-
-	.slave_configure	= qla2xxx_slave_configure,
-
-	.slave_alloc		= qla2xxx_slave_alloc,
-	.slave_destroy		= qla2xxx_slave_destroy,
-	.change_queue_depth	= qla2x00_change_queue_depth,
-	.change_queue_type	= qla2x00_change_queue_type,
-	.this_id		= -1,
-	.cmd_per_lun		= 3,
-	.use_clustering		= ENABLE_CLUSTERING,
-	.sg_tablesize		= SG_ALL,
-
-	/*
-	 * The RISC allows for each command to transfer (2^32-1) bytes of data,
-	 * which equates to 0x800000 sectors.
-	 */
-	.max_sectors		= 0xFFFF,
-	.shost_attrs		= qla2x00_host_attrs,
-};
-
-static struct scsi_host_template qla24xx_driver_template = {
-	.module			= THIS_MODULE,
-	.name			= "qla2xxx",
-	.queuecommand		= qla24xx_queuecommand,
-
-	.eh_abort_handler	= qla2xxx_eh_abort,
-	.eh_device_reset_handler = qla2xxx_eh_device_reset,
-	.eh_bus_reset_handler	= qla2xxx_eh_bus_reset,
-	.eh_host_reset_handler	= qla2xxx_eh_host_reset,
-
-	.slave_configure	= qla2xxx_slave_configure,
-
-	.slave_alloc		= qla2xxx_slave_alloc,
-	.slave_destroy		= qla2xxx_slave_destroy,
-	.change_queue_depth	= qla2x00_change_queue_depth,
-	.change_queue_type	= qla2x00_change_queue_type,
-	.this_id		= -1,
-	.cmd_per_lun		= 3,
-	.use_clustering		= ENABLE_CLUSTERING,
-	.sg_tablesize		= SG_ALL,
-
-	.max_sectors		= 0xFFFF,
-	.shost_attrs		= qla2x00_host_attrs,
-};
-
 static struct scsi_transport_template *qla2xxx_transport_template = NULL;
 
 /* TODO Convert to inlines
@@ -1197,6 +1143,34 @@ qla24xx_disable_intrs(scsi_qla_host_t *h
 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
 }
 
+static struct scsi_host_template *
+qla2x00_prep_sht(struct pci_dev *pdev, struct scsi_host_template *sht)
+{
+	sht->name		= "qla2xxx";
+	sht->queuecommand	= qla2x00_queuecommand;
+	sht->eh_abort_handler	= qla2xxx_eh_abort;
+	sht->eh_device_reset_handler = qla2xxx_eh_device_reset;
+	sht->eh_bus_reset_handler = qla2xxx_eh_bus_reset;
+	sht->eh_host_reset_handler = qla2xxx_eh_host_reset;
+	sht->slave_configure	= qla2xxx_slave_configure;
+	sht->slave_alloc	= qla2xxx_slave_alloc;
+	sht->slave_destroy	= qla2xxx_slave_destroy;
+	sht->change_queue_depth	= qla2x00_change_queue_depth;
+	sht->change_queue_type	= qla2x00_change_queue_type;
+	sht->this_id		= -1;
+	sht->cmd_per_lun	= 3;
+	sht->use_clustering	= ENABLE_CLUSTERING;
+	sht->sg_tablesize	= SG_ALL;
+	sht->max_sectors	= 0xffff;
+	sht->shost_attrs	= qla2x00_host_attrs;
+
+	if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 ||
+	    pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432)
+		sht->queuecommand	= qla24xx_queuecommand;
+
+	return sht;
+}
+
 /*
  * PCI driver interface
  */
@@ -1215,8 +1189,7 @@ int qla2x00_probe_one(struct pci_dev *pd
 	if (pci_enable_device(pdev))
 		goto probe_out;
 
-	host = scsi_host_alloc(brd_info->alternate_sht ?
-	    &qla24xx_driver_template: &qla2x00_driver_template,
+	host = scsi_host_alloc(qla2x00_prep_sht(pdev, brd_info->sht),
 	    sizeof(scsi_qla_host_t));
 	if (host == NULL) {
 		printk(KERN_WARNING
---
0.99.8.GIT

-- 
Andrew Vasquez
-
: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux