diff options
Diffstat (limited to 'drivers/scsi/aic94xx')
-rw-r--r-- | drivers/scsi/aic94xx/Kconfig | 1 | ||||
-rw-r--r-- | drivers/scsi/aic94xx/aic94xx_init.c | 41 |
2 files changed, 34 insertions, 8 deletions
diff --git a/drivers/scsi/aic94xx/Kconfig b/drivers/scsi/aic94xx/Kconfig index 0ed391d8ee84..c83fe751d0bb 100644 --- a/drivers/scsi/aic94xx/Kconfig +++ b/drivers/scsi/aic94xx/Kconfig | |||
@@ -28,6 +28,7 @@ config SCSI_AIC94XX | |||
28 | tristate "Adaptec AIC94xx SAS/SATA support" | 28 | tristate "Adaptec AIC94xx SAS/SATA support" |
29 | depends on PCI | 29 | depends on PCI |
30 | select SCSI_SAS_LIBSAS | 30 | select SCSI_SAS_LIBSAS |
31 | select FW_LOADER | ||
31 | help | 32 | help |
32 | This driver supports Adaptec's SAS/SATA 3Gb/s 64 bit PCI-X | 33 | This driver supports Adaptec's SAS/SATA 3Gb/s 64 bit PCI-X |
33 | AIC94xx chip based host adapters. | 34 | AIC94xx chip based host adapters. |
diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic94xx_init.c index 734adc9d5206..99743ca29ca1 100644 --- a/drivers/scsi/aic94xx/aic94xx_init.c +++ b/drivers/scsi/aic94xx/aic94xx_init.c | |||
@@ -309,11 +309,29 @@ static ssize_t asd_show_dev_pcba_sn(struct device *dev, | |||
309 | } | 309 | } |
310 | static DEVICE_ATTR(pcba_sn, S_IRUGO, asd_show_dev_pcba_sn, NULL); | 310 | static DEVICE_ATTR(pcba_sn, S_IRUGO, asd_show_dev_pcba_sn, NULL); |
311 | 311 | ||
312 | static void asd_create_dev_attrs(struct asd_ha_struct *asd_ha) | 312 | static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha) |
313 | { | 313 | { |
314 | device_create_file(&asd_ha->pcidev->dev, &dev_attr_revision); | 314 | int err; |
315 | device_create_file(&asd_ha->pcidev->dev, &dev_attr_bios_build); | 315 | |
316 | device_create_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn); | 316 | err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_revision); |
317 | if (err) | ||
318 | return err; | ||
319 | |||
320 | err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_bios_build); | ||
321 | if (err) | ||
322 | goto err_rev; | ||
323 | |||
324 | err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn); | ||
325 | if (err) | ||
326 | goto err_biosb; | ||
327 | |||
328 | return 0; | ||
329 | |||
330 | err_biosb: | ||
331 | device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build); | ||
332 | err_rev: | ||
333 | device_remove_file(&asd_ha->pcidev->dev, &dev_attr_revision); | ||
334 | return err; | ||
317 | } | 335 | } |
318 | 336 | ||
319 | static void asd_remove_dev_attrs(struct asd_ha_struct *asd_ha) | 337 | static void asd_remove_dev_attrs(struct asd_ha_struct *asd_ha) |
@@ -645,7 +663,9 @@ static int __devinit asd_pci_probe(struct pci_dev *dev, | |||
645 | } | 663 | } |
646 | ASD_DPRINTK("escbs posted\n"); | 664 | ASD_DPRINTK("escbs posted\n"); |
647 | 665 | ||
648 | asd_create_dev_attrs(asd_ha); | 666 | err = asd_create_dev_attrs(asd_ha); |
667 | if (err) | ||
668 | goto Err_dev_attrs; | ||
649 | 669 | ||
650 | err = asd_register_sas_ha(asd_ha); | 670 | err = asd_register_sas_ha(asd_ha); |
651 | if (err) | 671 | if (err) |
@@ -668,6 +688,7 @@ Err_en_phys: | |||
668 | asd_unregister_sas_ha(asd_ha); | 688 | asd_unregister_sas_ha(asd_ha); |
669 | Err_reg_sas: | 689 | Err_reg_sas: |
670 | asd_remove_dev_attrs(asd_ha); | 690 | asd_remove_dev_attrs(asd_ha); |
691 | Err_dev_attrs: | ||
671 | Err_escbs: | 692 | Err_escbs: |
672 | asd_disable_ints(asd_ha); | 693 | asd_disable_ints(asd_ha); |
673 | free_irq(dev->irq, asd_ha); | 694 | free_irq(dev->irq, asd_ha); |
@@ -754,9 +775,9 @@ static ssize_t asd_version_show(struct device_driver *driver, char *buf) | |||
754 | } | 775 | } |
755 | static DRIVER_ATTR(version, S_IRUGO, asd_version_show, NULL); | 776 | static DRIVER_ATTR(version, S_IRUGO, asd_version_show, NULL); |
756 | 777 | ||
757 | static void asd_create_driver_attrs(struct device_driver *driver) | 778 | static int asd_create_driver_attrs(struct device_driver *driver) |
758 | { | 779 | { |
759 | driver_create_file(driver, &driver_attr_version); | 780 | return driver_create_file(driver, &driver_attr_version); |
760 | } | 781 | } |
761 | 782 | ||
762 | static void asd_remove_driver_attrs(struct device_driver *driver) | 783 | static void asd_remove_driver_attrs(struct device_driver *driver) |
@@ -834,10 +855,14 @@ static int __init aic94xx_init(void) | |||
834 | if (err) | 855 | if (err) |
835 | goto out_release_transport; | 856 | goto out_release_transport; |
836 | 857 | ||
837 | asd_create_driver_attrs(&aic94xx_pci_driver.driver); | 858 | err = asd_create_driver_attrs(&aic94xx_pci_driver.driver); |
859 | if (err) | ||
860 | goto out_unregister_pcidrv; | ||
838 | 861 | ||
839 | return err; | 862 | return err; |
840 | 863 | ||
864 | out_unregister_pcidrv: | ||
865 | pci_unregister_driver(&aic94xx_pci_driver); | ||
841 | out_release_transport: | 866 | out_release_transport: |
842 | sas_release_transport(aic94xx_transport_template); | 867 | sas_release_transport(aic94xx_transport_template); |
843 | out_destroy_caches: | 868 | out_destroy_caches: |