Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 27922b4260f65d317aabda37e42bbbff > files > 311

kernel-2.6.18-238.el5.src.rpm

From: Tomas Henzl <thenzl@redhat.com>
Date: Sun, 29 Aug 2010 15:49:48 -0400
Subject: [block] cciss: factor out scsi dma code
Message-id: <1283097002-3341-50-git-send-email-thenzl@redhat.com>
Patchwork-id: 27874
O-Subject: [RHEL6 PATCH 49/63] cciss: factor out scsi dma code
Bugzilla: 568830
RH-Acked-by: Neil Horman <nhorman@redhat.com>

factor out scsi dma code

diff --git a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c
index fca1178..e40341e 100644
--- a/drivers/block/cciss_scsi.c
+++ b/drivers/block/cciss_scsi.c
@@ -65,6 +65,8 @@ static int cciss_scsi_queue_command (struct scsi_cmnd *cmd,
 		void (* done)(struct scsi_cmnd *));
 static int cciss_eh_device_reset_handler(struct scsi_cmnd *);
 static int cciss_eh_abort_handler(struct scsi_cmnd *);
+static void cciss_scatter_gather_unmap(ctlr_info_t *h, CommandList_struct *c,
+	struct scsi_cmnd *cmd);
 
 static struct cciss_scsi_hba_t ccissscsi[MAX_CTLR] = {
 	{ .name = "cciss0", .ndevices = 0 },
@@ -553,7 +555,6 @@ complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
 {
 	struct scsi_cmnd *cmd;
 	ctlr_info_t *ctlr;
-	u64bit addr64;
 	ErrorInfo_struct *ei;
 
 	ei = cp->err_info;
@@ -567,20 +568,7 @@ complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
 	cmd = (struct scsi_cmnd *) cp->scsi_cmd;	
 	ctlr = hba[cp->ctlr];
 
-	/* undo the DMA mappings */
-
-	if (cmd->use_sg) {
-		pci_unmap_sg(ctlr->pdev,
-			cmd->request_buffer, cmd->use_sg,
-				cmd->sc_data_direction); 
-	}
-	else if (cmd->request_bufflen) {
-		addr64.val32.lower = cp->SG[0].Addr.lower;
-                addr64.val32.upper = cp->SG[0].Addr.upper;
-                pci_unmap_single(ctlr->pdev, (dma_addr_t) addr64.val,
-                	cmd->request_bufflen, 
-				cmd->sc_data_direction);
-	}
+	cciss_scatter_gather_unmap(ctlr, cp, cmd);
 
 	cmd->result = (DID_OK << 16); 		/* host byte */
 	cmd->result |= (COMMAND_COMPLETE << 8);	/* msg byte */
@@ -1213,7 +1201,7 @@ cciss_scatter_gather(struct pci_dev *pdev,
 			addr64 = (__u64) pci_map_single(pdev, 
 				cmd->request_buffer, 
 				cmd->request_bufflen, 
-				cmd->sc_data_direction); 
+				cmd->sc_data_direction);
 	
 			cp->SG[0].Addr.lower = 
 			  (__u32) (addr64 & (__u64) 0x00000000FFFFFFFF);
@@ -1245,6 +1233,23 @@ cciss_scatter_gather(struct pci_dev *pdev,
 	return;
 }
 
+static void cciss_scatter_gather_unmap(ctlr_info_t *h, CommandList_struct *c,
+	struct scsi_cmnd *cmd)
+{
+	u64bit addr64;
+
+	if (cmd->use_sg) {
+		pci_unmap_sg(h->pdev, cmd->request_buffer, cmd->use_sg,
+				cmd->sc_data_direction);
+		return;
+	}
+	if (cmd->request_bufflen) {
+		addr64.val32.lower = c->SG[0].Addr.lower;
+		addr64.val32.upper = c->SG[0].Addr.upper;
+                pci_unmap_single(h->pdev, (dma_addr_t) addr64.val,
+			cmd->request_bufflen, cmd->sc_data_direction);
+	}
+}
 
 static int
 cciss_scsi_queue_command (struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))