]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
scsi: pmcraid: don't allocate a dma coherent buffer for sense data
authorChristoph Hellwig <hch@lst.de>
Thu, 18 Oct 2018 13:05:36 +0000 (15:05 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 7 Nov 2018 02:31:29 +0000 (21:31 -0500)
We can just dma map the sense buffer passed with the scsi command,
and that gets us out of the nasty business of doing dma coherent
allocations from irq context.

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

index 3ba60642024776b97610832e56274590c40bec2f..401e543f1723ef82f21546d18679285a674385f5 100644 (file)
@@ -846,16 +846,9 @@ static void pmcraid_erp_done(struct pmcraid_cmd *cmd)
                            cmd->ioa_cb->ioarcb.cdb[0], ioasc);
        }
 
-       /* if we had allocated sense buffers for request sense, copy the sense
-        * release the buffers
-        */
-       if (cmd->sense_buffer != NULL) {
-               memcpy(scsi_cmd->sense_buffer,
-                      cmd->sense_buffer,
-                      SCSI_SENSE_BUFFERSIZE);
-               pci_free_consistent(pinstance->pdev,
-                                   SCSI_SENSE_BUFFERSIZE,
-                                   cmd->sense_buffer, cmd->sense_buffer_dma);
+       if (cmd->sense_buffer) {
+               dma_unmap_single(&pinstance->pdev->dev, cmd->sense_buffer_dma,
+                                SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
                cmd->sense_buffer = NULL;
                cmd->sense_buffer_dma = 0;
        }
@@ -2444,13 +2437,12 @@ static void pmcraid_request_sense(struct pmcraid_cmd *cmd)
 {
        struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb;
        struct pmcraid_ioadl_desc *ioadl = ioarcb->add_data.u.ioadl;
+       struct device *dev = &cmd->drv_inst->pdev->dev;
 
-       /* allocate DMAable memory for sense buffers */
-       cmd->sense_buffer = pci_alloc_consistent(cmd->drv_inst->pdev,
-                                                SCSI_SENSE_BUFFERSIZE,
-                                                &cmd->sense_buffer_dma);
-
-       if (cmd->sense_buffer == NULL) {
+       cmd->sense_buffer = cmd->scsi_cmd->sense_buffer;
+       cmd->sense_buffer_dma = dma_map_single(dev, cmd->sense_buffer,
+                       SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
+       if (dma_mapping_error(dev, cmd->sense_buffer_dma)) {
                pmcraid_err
                        ("couldn't allocate sense buffer for request sense\n");
                pmcraid_erp_done(cmd);