Skip to content

Commit 33d6667

Browse files
hreineckemartinkpetersen
authored andcommitted
scsi: 3w-9xxx: fix calls to dma_set_mask_and_coherent()
The change to use dma_set_mask_and_coherent() incorrectly made a second call with the 32 bit DMA mask value when the call with the 64 bit DMA mask value succeeded. Fixes: b000bce ("scsi: 3w-9xxx: fully convert to the generic DMA API") Cc: <stable@vger.kernel.org> Signed-off-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Ewan D. Milne <emilne@redhat.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent 56de835 commit 33d6667

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

drivers/scsi/3w-9xxx.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2009,7 +2009,7 @@ static int twa_probe(struct pci_dev *pdev, const struct pci_device_id *dev_id)
20092009
struct Scsi_Host *host = NULL;
20102010
TW_Device_Extension *tw_dev;
20112011
unsigned long mem_addr, mem_len;
2012-
int retval = -ENODEV;
2012+
int retval;
20132013

20142014
retval = pci_enable_device(pdev);
20152015
if (retval) {
@@ -2020,8 +2020,10 @@ static int twa_probe(struct pci_dev *pdev, const struct pci_device_id *dev_id)
20202020
pci_set_master(pdev);
20212021
pci_try_set_mwi(pdev);
20222022

2023-
if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)) ||
2024-
dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32))) {
2023+
retval = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
2024+
if (retval)
2025+
retval = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
2026+
if (retval) {
20252027
TW_PRINTK(host, TW_DRIVER, 0x23, "Failed to set dma mask");
20262028
retval = -ENODEV;
20272029
goto out_disable_device;
@@ -2240,8 +2242,10 @@ static int twa_resume(struct pci_dev *pdev)
22402242
pci_set_master(pdev);
22412243
pci_try_set_mwi(pdev);
22422244

2243-
if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)) ||
2244-
dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32))) {
2245+
retval = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
2246+
if (retval)
2247+
retval = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
2248+
if (retval) {
22452249
TW_PRINTK(host, TW_DRIVER, 0x40, "Failed to set dma mask during resume");
22462250
retval = -ENODEV;
22472251
goto out_disable_device;

0 commit comments

Comments
 (0)