diff options
author | Michael Reed <mdr@sgi.com> | 2009-09-18 13:02:05 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-12-10 09:54:09 -0500 |
commit | 8e68597d087977d3e4fd3e735d290ab45fd0b5ea (patch) | |
tree | 49d483cfb2f34bef13867af9a18fce3c5749c647 | |
parent | 3067e02f8f3ae2f3f02ba76400d03b8bcb4942b0 (diff) |
[SCSI] lpfc: fix hang on SGI ia64 platform
In testing 2.6.31 on one of our ia64 platforms I've encountered a hang
due to the driver using hardware ATEs which are a limited resource.
This is because the driver does not set the dma consistent mask to
64 bits.
Signed-off-by: Michael Reed <mdr@sgi.com>
Acked-by: James Smart <James.Smart@Emulex.Com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index 226920d15ea..d4da6bdd0e7 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -4506,9 +4506,13 @@ lpfc_sli_pci_mem_setup(struct lpfc_hba *phba) | |||
4506 | pdev = phba->pcidev; | 4506 | pdev = phba->pcidev; |
4507 | 4507 | ||
4508 | /* Set the device DMA mask size */ | 4508 | /* Set the device DMA mask size */ |
4509 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) | 4509 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0 |
4510 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) | 4510 | || pci_set_consistent_dma_mask(pdev,DMA_BIT_MASK(64)) != 0) { |
4511 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0 | ||
4512 | || pci_set_consistent_dma_mask(pdev,DMA_BIT_MASK(32)) != 0) { | ||
4511 | return error; | 4513 | return error; |
4514 | } | ||
4515 | } | ||
4512 | 4516 | ||
4513 | /* Get the bus address of Bar0 and Bar2 and the number of bytes | 4517 | /* Get the bus address of Bar0 and Bar2 and the number of bytes |
4514 | * required by each mapping. | 4518 | * required by each mapping. |
@@ -6021,9 +6025,13 @@ lpfc_sli4_pci_mem_setup(struct lpfc_hba *phba) | |||
6021 | pdev = phba->pcidev; | 6025 | pdev = phba->pcidev; |
6022 | 6026 | ||
6023 | /* Set the device DMA mask size */ | 6027 | /* Set the device DMA mask size */ |
6024 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) | 6028 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0 |
6025 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) | 6029 | || pci_set_consistent_dma_mask(pdev,DMA_BIT_MASK(64)) != 0) { |
6030 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0 | ||
6031 | || pci_set_consistent_dma_mask(pdev,DMA_BIT_MASK(32)) != 0) { | ||
6026 | return error; | 6032 | return error; |
6033 | } | ||
6034 | } | ||
6027 | 6035 | ||
6028 | /* Get the bus address of SLI4 device Bar0, Bar1, and Bar2 and the | 6036 | /* Get the bus address of SLI4 device Bar0, Bar1, and Bar2 and the |
6029 | * number of bytes required by each mapping. They are actually | 6037 | * number of bytes required by each mapping. They are actually |