diff options
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 55 |
1 files changed, 28 insertions, 27 deletions
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 3c97aa45772d..d960637fd56a 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
| @@ -1150,7 +1150,7 @@ iospace_error_exit: | |||
| 1150 | */ | 1150 | */ |
| 1151 | int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | 1151 | int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) |
| 1152 | { | 1152 | { |
| 1153 | int ret; | 1153 | int ret = -ENODEV; |
| 1154 | device_reg_t __iomem *reg; | 1154 | device_reg_t __iomem *reg; |
| 1155 | struct Scsi_Host *host; | 1155 | struct Scsi_Host *host; |
| 1156 | scsi_qla_host_t *ha; | 1156 | scsi_qla_host_t *ha; |
| @@ -1161,7 +1161,7 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | |||
| 1161 | fc_port_t *fcport; | 1161 | fc_port_t *fcport; |
| 1162 | 1162 | ||
| 1163 | if (pci_enable_device(pdev)) | 1163 | if (pci_enable_device(pdev)) |
| 1164 | return -1; | 1164 | goto probe_out; |
| 1165 | 1165 | ||
| 1166 | host = scsi_host_alloc(&qla2x00_driver_template, | 1166 | host = scsi_host_alloc(&qla2x00_driver_template, |
| 1167 | sizeof(scsi_qla_host_t)); | 1167 | sizeof(scsi_qla_host_t)); |
| @@ -1183,9 +1183,8 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | |||
| 1183 | 1183 | ||
| 1184 | /* Configure PCI I/O space */ | 1184 | /* Configure PCI I/O space */ |
| 1185 | ret = qla2x00_iospace_config(ha); | 1185 | ret = qla2x00_iospace_config(ha); |
| 1186 | if (ret != 0) { | 1186 | if (ret) |
| 1187 | goto probe_alloc_failed; | 1187 | goto probe_failed; |
| 1188 | } | ||
| 1189 | 1188 | ||
| 1190 | /* Sanitize the information from PCI BIOS. */ | 1189 | /* Sanitize the information from PCI BIOS. */ |
| 1191 | host->irq = pdev->irq; | 1190 | host->irq = pdev->irq; |
| @@ -1258,23 +1257,10 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | |||
| 1258 | qla_printk(KERN_WARNING, ha, | 1257 | qla_printk(KERN_WARNING, ha, |
| 1259 | "[ERROR] Failed to allocate memory for adapter\n"); | 1258 | "[ERROR] Failed to allocate memory for adapter\n"); |
| 1260 | 1259 | ||
| 1261 | goto probe_alloc_failed; | 1260 | ret = -ENOMEM; |
| 1261 | goto probe_failed; | ||
| 1262 | } | 1262 | } |
| 1263 | 1263 | ||
| 1264 | pci_set_drvdata(pdev, ha); | ||
| 1265 | host->this_id = 255; | ||
| 1266 | host->cmd_per_lun = 3; | ||
| 1267 | host->unique_id = ha->instance; | ||
| 1268 | host->max_cmd_len = MAX_CMDSZ; | ||
| 1269 | host->max_channel = ha->ports - 1; | ||
| 1270 | host->max_id = ha->max_targets; | ||
| 1271 | host->max_lun = ha->max_luns; | ||
| 1272 | host->transportt = qla2xxx_transport_template; | ||
| 1273 | if (scsi_add_host(host, &pdev->dev)) | ||
| 1274 | goto probe_alloc_failed; | ||
| 1275 | |||
| 1276 | qla2x00_alloc_sysfs_attr(ha); | ||
| 1277 | |||
| 1278 | if (qla2x00_initialize_adapter(ha) && | 1264 | if (qla2x00_initialize_adapter(ha) && |
| 1279 | !(ha->device_flags & DFLG_NO_CABLE)) { | 1265 | !(ha->device_flags & DFLG_NO_CABLE)) { |
| 1280 | 1266 | ||
| @@ -1285,11 +1271,10 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | |||
| 1285 | "Adapter flags %x.\n", | 1271 | "Adapter flags %x.\n", |
| 1286 | ha->host_no, ha->device_flags)); | 1272 | ha->host_no, ha->device_flags)); |
| 1287 | 1273 | ||
| 1274 | ret = -ENODEV; | ||
| 1288 | goto probe_failed; | 1275 | goto probe_failed; |
| 1289 | } | 1276 | } |
| 1290 | 1277 | ||
| 1291 | qla2x00_init_host_attr(ha); | ||
| 1292 | |||
| 1293 | /* | 1278 | /* |
| 1294 | * Startup the kernel thread for this host adapter | 1279 | * Startup the kernel thread for this host adapter |
| 1295 | */ | 1280 | */ |
| @@ -1299,17 +1284,26 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | |||
| 1299 | qla_printk(KERN_WARNING, ha, | 1284 | qla_printk(KERN_WARNING, ha, |
| 1300 | "Unable to start DPC thread!\n"); | 1285 | "Unable to start DPC thread!\n"); |
| 1301 | 1286 | ||
| 1287 | ret = -ENODEV; | ||
| 1302 | goto probe_failed; | 1288 | goto probe_failed; |
| 1303 | } | 1289 | } |
| 1304 | wait_for_completion(&ha->dpc_inited); | 1290 | wait_for_completion(&ha->dpc_inited); |
| 1305 | 1291 | ||
| 1292 | host->this_id = 255; | ||
| 1293 | host->cmd_per_lun = 3; | ||
| 1294 | host->unique_id = ha->instance; | ||
| 1295 | host->max_cmd_len = MAX_CMDSZ; | ||
| 1296 | host->max_channel = ha->ports - 1; | ||
| 1297 | host->max_lun = MAX_LUNS; | ||
| 1298 | host->transportt = qla2xxx_transport_template; | ||
| 1299 | |||
| 1306 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) | 1300 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) |
| 1307 | ret = request_irq(host->irq, qla2100_intr_handler, | 1301 | ret = request_irq(host->irq, qla2100_intr_handler, |
| 1308 | SA_INTERRUPT|SA_SHIRQ, ha->brd_info->drv_name, ha); | 1302 | SA_INTERRUPT|SA_SHIRQ, ha->brd_info->drv_name, ha); |
| 1309 | else | 1303 | else |
| 1310 | ret = request_irq(host->irq, qla2300_intr_handler, | 1304 | ret = request_irq(host->irq, qla2300_intr_handler, |
| 1311 | SA_INTERRUPT|SA_SHIRQ, ha->brd_info->drv_name, ha); | 1305 | SA_INTERRUPT|SA_SHIRQ, ha->brd_info->drv_name, ha); |
| 1312 | if (ret != 0) { | 1306 | if (ret) { |
| 1313 | qla_printk(KERN_WARNING, ha, | 1307 | qla_printk(KERN_WARNING, ha, |
| 1314 | "Failed to reserve interrupt %d already in use.\n", | 1308 | "Failed to reserve interrupt %d already in use.\n", |
| 1315 | host->irq); | 1309 | host->irq); |
| @@ -1363,9 +1357,18 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | |||
| 1363 | msleep(10); | 1357 | msleep(10); |
| 1364 | } | 1358 | } |
| 1365 | 1359 | ||
| 1360 | pci_set_drvdata(pdev, ha); | ||
| 1366 | ha->flags.init_done = 1; | 1361 | ha->flags.init_done = 1; |
| 1367 | num_hosts++; | 1362 | num_hosts++; |
| 1368 | 1363 | ||
| 1364 | ret = scsi_add_host(host, &pdev->dev); | ||
| 1365 | if (ret) | ||
| 1366 | goto probe_failed; | ||
| 1367 | |||
| 1368 | qla2x00_alloc_sysfs_attr(ha); | ||
| 1369 | |||
| 1370 | qla2x00_init_host_attr(ha); | ||
| 1371 | |||
| 1369 | qla_printk(KERN_INFO, ha, "\n" | 1372 | qla_printk(KERN_INFO, ha, "\n" |
| 1370 | " QLogic Fibre Channel HBA Driver: %s\n" | 1373 | " QLogic Fibre Channel HBA Driver: %s\n" |
| 1371 | " QLogic %s - %s\n" | 1374 | " QLogic %s - %s\n" |
| @@ -1384,9 +1387,6 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | |||
| 1384 | probe_failed: | 1387 | probe_failed: |
| 1385 | fc_remove_host(ha->host); | 1388 | fc_remove_host(ha->host); |
| 1386 | 1389 | ||
| 1387 | scsi_remove_host(host); | ||
| 1388 | |||
| 1389 | probe_alloc_failed: | ||
| 1390 | qla2x00_free_device(ha); | 1390 | qla2x00_free_device(ha); |
| 1391 | 1391 | ||
| 1392 | scsi_host_put(host); | 1392 | scsi_host_put(host); |
| @@ -1394,7 +1394,8 @@ probe_alloc_failed: | |||
| 1394 | probe_disable_device: | 1394 | probe_disable_device: |
| 1395 | pci_disable_device(pdev); | 1395 | pci_disable_device(pdev); |
| 1396 | 1396 | ||
| 1397 | return -1; | 1397 | probe_out: |
| 1398 | return ret; | ||
| 1398 | } | 1399 | } |
| 1399 | EXPORT_SYMBOL_GPL(qla2x00_probe_one); | 1400 | EXPORT_SYMBOL_GPL(qla2x00_probe_one); |
| 1400 | 1401 | ||
