tree bca4f0b98ae82020f001a1681954624c761c2865
parent c6678e0cfb41b029c3600c54b5bb65954de1230a
author Andrew Vasquez <[EMAIL PROTECTED]> Sat, 27 Aug 2005 09:08:00 -0700
committer James Bottomley <[EMAIL PROTECTED](none)> Mon, 05 Sep 2005 05:53:02 
-0500

[SCSI] qla2xxx: Use dma_get_required_mask() in determining the 'ideal' DMA mask.

In order to efficiently utilise the ISP's IOCB
request-queue, use the dma_get_required_mask() function to
determine the use of command-type 2 or 3 IOCBs when queueing
SCSI commands.  This applies to ISP2[123]xx chips only, as
the ISP24xx uses command-type 7 IOCBs which use 64bit DSDs.

Signed-off-by: Andrew Vasquez <[EMAIL PROTECTED]>
Signed-off-by: James Bottomley <[EMAIL PROTECTED]>

 drivers/scsi/qla2xxx/qla_os.c |   33 ++++++++++-----------------------
 1 files changed, 10 insertions(+), 23 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -1113,36 +1113,23 @@ qla2xxx_slave_destroy(struct scsi_device
 static void
 qla2x00_config_dma_addressing(scsi_qla_host_t *ha)
 {
-       /* Assume 32bit DMA address */
+       /* Assume a 32bit DMA mask. */
        ha->flags.enable_64bit_addressing = 0;
 
-       /*
-        * Given the two variants pci_set_dma_mask(), allow the compiler to
-        * assist in setting the proper dma mask.
-        */
-       if (sizeof(dma_addr_t) > 4) {
-               if (pci_set_dma_mask(ha->pdev, DMA_64BIT_MASK) == 0) {
+       if (!dma_set_mask(&ha->pdev->dev, DMA_64BIT_MASK)) {
+               /* Any upper-dword bits set? */
+               if (MSD(dma_get_required_mask(&ha->pdev->dev)) &&
+                   !pci_set_consistent_dma_mask(ha->pdev, DMA_64BIT_MASK)) {
+                       /* Ok, a 64bit DMA mask is applicable. */
                        ha->flags.enable_64bit_addressing = 1;
                        ha->isp_ops.calc_req_entries = qla2x00_calc_iocbs_64;
                        ha->isp_ops.build_iocbs = qla2x00_build_scsi_iocbs_64;
-
-                       if (pci_set_consistent_dma_mask(ha->pdev,
-                           DMA_64BIT_MASK)) {
-                               qla_printk(KERN_DEBUG, ha,
-                                   "Failed to set 64 bit PCI consistent mask; "
-                                   "using 32 bit.\n");
-                               pci_set_consistent_dma_mask(ha->pdev,
-                                   DMA_32BIT_MASK);
-                       }
-               } else {
-                       qla_printk(KERN_DEBUG, ha,
-                           "Failed to set 64 bit PCI DMA mask, falling back "
-                           "to 32 bit MASK.\n");
-                       pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK);
+                       return;
                }
-       } else {
-               pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK);
        }
+
+       dma_set_mask(&ha->pdev->dev, DMA_32BIT_MASK);
+       pci_set_consistent_dma_mask(ha->pdev, DMA_32BIT_MASK);
 }
 
 static int
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to