[SCSI] aacraid: fix shutdown handler to also disable interrupts.

Moves quiesce, thread and interrupt shutdown into aacraid drivers'
.shutdown handler. This fix to the aac_shutdown handler will remove the
superfluous reset of the adapter during a (clean) kexec.

This fix may mitigate the active investigation 'kexec and aacraid
broken' but it is unlikely to affect the root cause (issue likely
present in both kexec and kdump). This patch reduces the chance the
problem will occur with a kexec. The fix for root cause is currently
expected to be the minimum value check to the aacraid.startup_timeout
driver variable after an adapter reset within aacraid_commit_reset.patch
submitted on 05/22/2007 and awaiting testing by Yinghai to confirm.

Signed-off-by: Mark Salyzyn <aacraid@adaptec.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>

authored by Salyzyn, Mark and committed by James Bottomley 94774a3a 88f5774b

+12 -10
+12 -10
drivers/scsi/aacraid/linit.c
··· 863 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 874 static int __devinit aac_probe_one(struct pci_dev *pdev, 867 875 const struct pci_device_id *id) 868 876 { ··· 1023 1015 return 0; 1024 1016 1025 1017 out_deinit: 1026 - kthread_stop(aac->thread); 1027 - aac_send_shutdown(aac); 1028 - aac_adapter_disable_int(aac); 1029 - free_irq(pdev->irq, aac); 1018 + __aac_shutdown(aac); 1030 1019 out_unmap: 1031 1020 aac_fib_map_free(aac); 1032 1021 pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr, aac->comm_phys); ··· 1043 1038 { 1044 1039 struct Scsi_Host *shost = pci_get_drvdata(dev); 1045 1040 struct aac_dev *aac = (struct aac_dev *)shost->hostdata; 1046 - aac_send_shutdown(aac); 1041 + scsi_block_requests(shost); 1042 + __aac_shutdown(aac); 1047 1043 } 1048 1044 1049 1045 static void __devexit aac_remove_one(struct pci_dev *pdev) ··· 1054 1048 1055 1049 scsi_remove_host(shost); 1056 1050 1057 - kthread_stop(aac->thread); 1058 - 1059 - aac_send_shutdown(aac); 1060 - aac_adapter_disable_int(aac); 1051 + __aac_shutdown(aac); 1061 1052 aac_fib_map_free(aac); 1062 1053 pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr, 1063 1054 aac->comm_phys); 1064 1055 kfree(aac->queues); 1065 1056 1066 - free_irq(pdev->irq, aac); 1067 1057 aac_adapter_ioremap(aac, 0); 1068 1058 1069 1059 kfree(aac->fibs);