]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
scsi: esas2r: use dma_set_mask_and_coherent
authorChristoph Hellwig <hch@lst.de>
Thu, 18 Oct 2018 13:10:16 +0000 (15:10 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 15 Nov 2018 19:27:08 +0000 (14:27 -0500)
The driver currently uses pci_set_dma_mask despite otherwise using the
generic DMA API.  Also move the dma_get_required_mask check before actually
setting the dma mask so that we don't end up with inconsistent settings in
corner cases.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/esas2r/esas2r_init.c

index bbe77db8938d6c5217793447658b98ae3317a91a..46b2c83ba21f9ccf267f4fd128819cc0ea622826 100644 (file)
@@ -266,6 +266,7 @@ int esas2r_init_adapter(struct Scsi_Host *host, struct pci_dev *pcid,
        int i;
        void *next_uncached;
        struct esas2r_request *first_request, *last_request;
+       bool dma64 = false;
 
        if (index >= MAX_ADAPTERS) {
                esas2r_log(ESAS2R_LOG_CRIT,
@@ -286,42 +287,20 @@ int esas2r_init_adapter(struct Scsi_Host *host, struct pci_dev *pcid,
        a->pcid = pcid;
        a->host = host;
 
-       if (sizeof(dma_addr_t) > 4) {
-               const uint64_t required_mask = dma_get_required_mask
-                                                      (&pcid->dev);
-               if (required_mask > DMA_BIT_MASK(32)
-                   && !pci_set_dma_mask(pcid, DMA_BIT_MASK(64))
-                   && !pci_set_consistent_dma_mask(pcid,
-                                                   DMA_BIT_MASK(64))) {
-                       esas2r_log_dev(ESAS2R_LOG_INFO,
-                                      &(a->pcid->dev),
-                                      "64-bit PCI addressing enabled\n");
-               } else if (!pci_set_dma_mask(pcid, DMA_BIT_MASK(32))
-                          && !pci_set_consistent_dma_mask(pcid,
-                                                          DMA_BIT_MASK(32))) {
-                       esas2r_log_dev(ESAS2R_LOG_INFO,
-                                      &(a->pcid->dev),
-                                      "32-bit PCI addressing enabled\n");
-               } else {
-                       esas2r_log(ESAS2R_LOG_CRIT,
-                                  "failed to set DMA mask");
-                       esas2r_kill_adapter(index);
-                       return 0;
-               }
-       } else {
-               if (!pci_set_dma_mask(pcid, DMA_BIT_MASK(32))
-                   && !pci_set_consistent_dma_mask(pcid,
-                                                   DMA_BIT_MASK(32))) {
-                       esas2r_log_dev(ESAS2R_LOG_INFO,
-                                      &(a->pcid->dev),
-                                      "32-bit PCI addressing enabled\n");
-               } else {
-                       esas2r_log(ESAS2R_LOG_CRIT,
-                                  "failed to set DMA mask");
-                       esas2r_kill_adapter(index);
-                       return 0;
-               }
+       if (sizeof(dma_addr_t) > 4 &&
+           dma_get_required_mask(&pcid->dev) > DMA_BIT_MASK(32) &&
+           !dma_set_mask_and_coherent(&pcid->dev, DMA_BIT_MASK(64)))
+               dma64 = true;
+
+       if (!dma64 && dma_set_mask_and_coherent(&pcid->dev, DMA_BIT_MASK(32))) {
+               esas2r_log(ESAS2R_LOG_CRIT, "failed to set DMA mask");
+               esas2r_kill_adapter(index);
+               return 0;
        }
+
+       esas2r_log_dev(ESAS2R_LOG_INFO, &pcid->dev,
+                      "%s-bit PCI addressing enabled\n", dma64 ? "64" : "32");
+
        esas2r_adapters[index] = a;
        sprintf(a->name, ESAS2R_DRVR_NAME "_%02d", index);
        esas2r_debug("new adapter %p, name %s", a, a->name);