summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-10-18 09:05:36 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2018-11-06 21:31:29 -0500
commita9b9e3adc9a98ce59a8544d31da597807a473bd1 (patch)
treeb2a240579dc8ddf20a65896e1bdd8802b2bdac3f
parent203654b42ff12782322558db5479057089248a28 (diff)
scsi: pmcraid: don't allocate a dma coherent buffer for sense data
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>
-rw-r--r--drivers/scsi/pmcraid.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
index 3ba606420247..401e543f1723 100644
--- a/drivers/scsi/pmcraid.c
+++ b/drivers/scsi/pmcraid.c
@@ -846,16 +846,9 @@ static void pmcraid_erp_done(struct pmcraid_cmd *cmd)
846 cmd->ioa_cb->ioarcb.cdb[0], ioasc); 846 cmd->ioa_cb->ioarcb.cdb[0], ioasc);
847 } 847 }
848 848
849 /* if we had allocated sense buffers for request sense, copy the sense 849 if (cmd->sense_buffer) {
850 * release the buffers 850 dma_unmap_single(&pinstance->pdev->dev, cmd->sense_buffer_dma,
851 */ 851 SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
852 if (cmd->sense_buffer != NULL) {
853 memcpy(scsi_cmd->sense_buffer,
854 cmd->sense_buffer,
855 SCSI_SENSE_BUFFERSIZE);
856 pci_free_consistent(pinstance->pdev,
857 SCSI_SENSE_BUFFERSIZE,
858 cmd->sense_buffer, cmd->sense_buffer_dma);
859 cmd->sense_buffer = NULL; 852 cmd->sense_buffer = NULL;
860 cmd->sense_buffer_dma = 0; 853 cmd->sense_buffer_dma = 0;
861 } 854 }
@@ -2444,13 +2437,12 @@ static void pmcraid_request_sense(struct pmcraid_cmd *cmd)
2444{ 2437{
2445 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; 2438 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb;
2446 struct pmcraid_ioadl_desc *ioadl = ioarcb->add_data.u.ioadl; 2439 struct pmcraid_ioadl_desc *ioadl = ioarcb->add_data.u.ioadl;
2440 struct device *dev = &cmd->drv_inst->pdev->dev;
2447 2441
2448 /* allocate DMAable memory for sense buffers */ 2442 cmd->sense_buffer = cmd->scsi_cmd->sense_buffer;
2449 cmd->sense_buffer = pci_alloc_consistent(cmd->drv_inst->pdev, 2443 cmd->sense_buffer_dma = dma_map_single(dev, cmd->sense_buffer,
2450 SCSI_SENSE_BUFFERSIZE, 2444 SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
2451 &cmd->sense_buffer_dma); 2445 if (dma_mapping_error(dev, cmd->sense_buffer_dma)) {
2452
2453 if (cmd->sense_buffer == NULL) {
2454 pmcraid_err 2446 pmcraid_err
2455 ("couldn't allocate sense buffer for request sense\n"); 2447 ("couldn't allocate sense buffer for request sense\n");
2456 pmcraid_erp_done(cmd); 2448 pmcraid_erp_done(cmd);