diff options
Diffstat (limited to 'drivers/scsi/aacraid')
-rw-r--r-- | drivers/scsi/aacraid/linit.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 350ea7feb61d..5c487ff096c7 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
@@ -863,6 +863,14 @@ static struct scsi_host_template aac_driver_template = { | |||
863 | .emulated = 1, | 863 | .emulated = 1, |
864 | }; | 864 | }; |
865 | 865 | ||
866 | static void __aac_shutdown(struct aac_dev * aac) | ||
867 | { | ||
868 | kthread_stop(aac->thread); | ||
869 | aac_send_shutdown(aac); | ||
870 | aac_adapter_disable_int(aac); | ||
871 | free_irq(aac->pdev->irq, aac); | ||
872 | } | ||
873 | |||
866 | static int __devinit aac_probe_one(struct pci_dev *pdev, | 874 | static int __devinit aac_probe_one(struct pci_dev *pdev, |
867 | const struct pci_device_id *id) | 875 | const struct pci_device_id *id) |
868 | { | 876 | { |
@@ -1015,10 +1023,7 @@ static int __devinit aac_probe_one(struct pci_dev *pdev, | |||
1015 | return 0; | 1023 | return 0; |
1016 | 1024 | ||
1017 | out_deinit: | 1025 | out_deinit: |
1018 | kthread_stop(aac->thread); | 1026 | __aac_shutdown(aac); |
1019 | aac_send_shutdown(aac); | ||
1020 | aac_adapter_disable_int(aac); | ||
1021 | free_irq(pdev->irq, aac); | ||
1022 | out_unmap: | 1027 | out_unmap: |
1023 | aac_fib_map_free(aac); | 1028 | aac_fib_map_free(aac); |
1024 | pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr, aac->comm_phys); | 1029 | pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr, aac->comm_phys); |
@@ -1038,7 +1043,8 @@ static void aac_shutdown(struct pci_dev *dev) | |||
1038 | { | 1043 | { |
1039 | struct Scsi_Host *shost = pci_get_drvdata(dev); | 1044 | struct Scsi_Host *shost = pci_get_drvdata(dev); |
1040 | struct aac_dev *aac = (struct aac_dev *)shost->hostdata; | 1045 | struct aac_dev *aac = (struct aac_dev *)shost->hostdata; |
1041 | aac_send_shutdown(aac); | 1046 | scsi_block_requests(shost); |
1047 | __aac_shutdown(aac); | ||
1042 | } | 1048 | } |
1043 | 1049 | ||
1044 | static void __devexit aac_remove_one(struct pci_dev *pdev) | 1050 | static void __devexit aac_remove_one(struct pci_dev *pdev) |
@@ -1048,16 +1054,12 @@ static void __devexit aac_remove_one(struct pci_dev *pdev) | |||
1048 | 1054 | ||
1049 | scsi_remove_host(shost); | 1055 | scsi_remove_host(shost); |
1050 | 1056 | ||
1051 | kthread_stop(aac->thread); | 1057 | __aac_shutdown(aac); |
1052 | |||
1053 | aac_send_shutdown(aac); | ||
1054 | aac_adapter_disable_int(aac); | ||
1055 | aac_fib_map_free(aac); | 1058 | aac_fib_map_free(aac); |
1056 | pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr, | 1059 | pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr, |
1057 | aac->comm_phys); | 1060 | aac->comm_phys); |
1058 | kfree(aac->queues); | 1061 | kfree(aac->queues); |
1059 | 1062 | ||
1060 | free_irq(pdev->irq, aac); | ||
1061 | aac_adapter_ioremap(aac, 0); | 1063 | aac_adapter_ioremap(aac, 0); |
1062 | 1064 | ||
1063 | kfree(aac->fibs); | 1065 | kfree(aac->fibs); |