linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH] 2.5.40 - DMA-mapping && misc
@ 2002-10-04 17:59 Matthew Wilcox
  0 siblings, 0 replies; 3+ messages in thread
From: Matthew Wilcox @ 2002-10-04 17:59 UTC (permalink / raw)
  To: Carlos E Gorges; +Cc: linux-kernel


- virt_to_bus(((struct scatterlist *)cmd->buffer)[i].address) :
+ virt_to_bus(
+ page_address(((struct scatterlist *)cmd->buffer)[i].page) +
+ ((struct scatterlist *)cmd->buffer)[i].offset ) :
             virt_to_bus(cmd->request_buffer);

have you actually read Documentation/DMA-mapping.txt?  It says quite plainly:

Drivers converted fully to this interface should not use virt_to_bus any
longer, nor should they use bus_to_virt. 
[...]
It is planned to completely remove virt_to_bus() and bus_to_virt() as
they are entirely deprecated.

So, your patch is quite insufficient.

-- 
Revolutions do not require corporate support.

^ permalink raw reply	[flat|nested] 3+ messages in thread
* [PATCH] 2.5.40 - DMA-mapping && misc
@ 2002-10-04  6:19 Carlos E Gorges
  0 siblings, 0 replies; 3+ messages in thread
From: Carlos E Gorges @ 2002-10-04  6:19 UTC (permalink / raw)
  To: linux-kernel


diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/53c7,8xx.c linux-2.5/drivers/scsi/53c7,8xx.c
--- linux-2.5.40/drivers/scsi/53c7,8xx.c	Tue Oct  1 04:06:15 2002
+++ linux-2.5/drivers/scsi/53c7,8xx.c	Fri Oct  4 02:53:48 2002
@@ -62,8 +62,6 @@
  *  the fourth byte from 50 to 25.
  */
 
-#error Please convert me to Documentation/DMA-mapping.txt
-
 #include <linux/config.h>
 
 #ifdef CONFIG_SCSI_NCR53C7xx_sync
@@ -3788,7 +3786,9 @@
     for (i = 0; cmd->use_sg ? (i < cmd->use_sg) : !i; cmd_datain += 4, 
 	cmd_dataout += 4, ++i) {
 	u32 buf = cmd->use_sg ? 
-	    virt_to_bus(((struct scatterlist *)cmd->buffer)[i].address) :
+	    virt_to_bus(
+		page_address(((struct scatterlist *)cmd->buffer)[i].page) +
+		((struct scatterlist *)cmd->buffer)[i].offset ) :
 	    virt_to_bus(cmd->request_buffer);
 	u32 count = cmd->use_sg ?
 	    ((struct scatterlist *)cmd->buffer)[i].length :
@@ -5735,7 +5735,7 @@
 	(struct NCR53c7x0_cmd *) cmd->host_scribble;
     int offset = 0, buffers;
     struct scatterlist *segment;
-    char *ptr;
+    char *ptr, *seg_addr;
     int found = 0;
 
 /*
@@ -5753,18 +5753,20 @@
 	    ptr = bus_to_virt(le32_to_cpu(insn[3]));
 
 	    if ((buffers = cmd->use_sg)) {
-    	    	for (offset = 0, 
-		     	segment = (struct scatterlist *) cmd->buffer;
-    	    	     buffers && !((found = ((ptr >= segment->address) && 
-    	    	    	    (ptr < (segment->address + segment->length)))));
+		segment = (struct scatterlist *) cmd->buffer;
+		seg_addr = page_address(segment->page) + segment->offset;
+		
+    	    	for (offset = 0;
+    	    	     buffers && !((found = ((ptr >= seg_addr) && 
+    	    	    	    (ptr < (seg_addr + segment->length)))));
     	    	     --buffers, offset += segment->length, ++segment)
 #if 0
 		    printk("scsi%d: comparing 0x%p to 0x%p\n", 
-			cmd->host->host_no, saved, segment->address);
+			cmd->host->host_no, saved, seg_addr);
 #else
 		    ;
 #endif
-    	    	    offset += ptr - segment->address;
+    	    	    offset += ptr - seg_addr;
     	    } else {
 		found = 1;
     	    	offset = ptr - (char *) (cmd->request_buffer);
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/NCR53c406a.c linux-2.5/drivers/scsi/NCR53c406a.c
--- linux-2.5.40/drivers/scsi/NCR53c406a.c	Tue Oct  1 04:06:59 2002
+++ linux-2.5/drivers/scsi/NCR53c406a.c	Fri Oct  4 02:53:48 2002
@@ -896,7 +896,7 @@
                 sgcount = current_SC->use_sg;
                 sglist = current_SC->request_buffer;
                 while( sgcount-- ) {
-                    NCR53c406a_pio_write(sglist->address, sglist->length);
+                    NCR53c406a_pio_write(sglist->address, page_address(sglist->page) + sglist->offset);
                     sglist++;
                 }
             }
@@ -925,7 +925,7 @@
                 sgcount = current_SC->use_sg;
                 sglist = current_SC->request_buffer;
                 while( sgcount-- ) {
-                    NCR53c406a_pio_read(sglist->address, sglist->length);
+                    NCR53c406a_pio_read(sglist->address, page_address(sglist->page) + sglist->offset);
                     sglist++;
                 }
             }
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/dpt_i2o.c linux-2.5/drivers/scsi/dpt_i2o.c
--- linux-2.5.40/drivers/scsi/dpt_i2o.c	Tue Oct  1 04:06:27 2002
+++ linux-2.5/drivers/scsi/dpt_i2o.c	Fri Oct  4 02:53:48 2002
@@ -28,8 +28,6 @@
 
 #define ADDR32 (0)
 
-#error Please convert me to Documentation/DMA-mapping.txt
-
 #include <linux/version.h>
 #include <linux/module.h>
 
@@ -2138,7 +2136,7 @@
 		for(i = 0 ; i < cmd->use_sg; i++) {
 			*mptr++ = direction|0x10000000|sg->length;
 			len+=sg->length;
-			*mptr++ = virt_to_bus(sg->address);
+			*mptr++ = virt_to_bus(page_address(sg->page) + sg->offset);
 			sg++;
 		}
 		/* Make this an end of list */
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/eata_dma.c linux-2.5/drivers/scsi/eata_dma.c
--- linux-2.5.40/drivers/scsi/eata_dma.c	Tue Oct  1 04:06:13 2002
+++ linux-2.5/drivers/scsi/eata_dma.c	Fri Oct  4 02:53:48 2002
@@ -63,8 +63,6 @@
 
 /* Look in eata_dma.h for configuration and revision information */
 
-#error Please convert me to Documentation/DMA-mapping.txt
-
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
@@ -574,7 +572,7 @@
 	ccb->cp_datalen = htonl(cmd->use_sg * sizeof(struct eata_sg_list));
 	sl=(struct scatterlist *)cmd->request_buffer;
 	for(i = 0; i < cmd->use_sg; i++, sl++){
-	    ccb->sg_list[i].data = htonl(virt_to_bus(sl->address));
+	    ccb->sg_list[i].data = htonl(virt_to_bus(page_address(sl->page) + sl->offset));
 	    ccb->sg_list[i].len = htonl((u32) sl->length);
 	}
     } else {
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/eata_pio.c linux-2.5/drivers/scsi/eata_pio.c
--- linux-2.5.40/drivers/scsi/eata_pio.c	Tue Oct  1 04:07:10 2002
+++ linux-2.5/drivers/scsi/eata_pio.c	Fri Oct  4 02:53:48 2002
@@ -99,7 +99,7 @@
 	else
 	{
 	    SCp->buffer++;
-	    SCp->ptr=SCp->buffer->address;
+	    SCp->ptr=page_address(SCp->buffer->page) + SCp->buffer->offset;
 	    SCp->this_residual=SCp->buffer->length;
 	}
     }
@@ -372,7 +372,7 @@
     } else {
 	cmd->SCp.buffer = cmd->request_buffer;
 	cmd->SCp.buffers_residual = cmd->use_sg;
-	cmd->SCp.ptr = cmd->SCp.buffer->address;
+	cmd->SCp.ptr = page_address(cmd->SCp.buffer->page) + cmd->SCp.buffer->offset;
 	cmd->SCp.this_residual = cmd->SCp.buffer->length;
     }
     cmd->SCp.Status = (cmd->SCp.this_residual != 0);  /* TRUE as long as bytes 
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/fdomain.c linux-2.5/drivers/scsi/fdomain.c
--- linux-2.5.40/drivers/scsi/fdomain.c	Tue Oct  1 04:06:19 2002
+++ linux-2.5/drivers/scsi/fdomain.c	Fri Oct  4 02:53:48 2002
@@ -1565,7 +1565,7 @@
 	    if (current_SC->SCp.buffers_residual) {
 	       --current_SC->SCp.buffers_residual;
 	       ++current_SC->SCp.buffer;
-	       current_SC->SCp.ptr = current_SC->SCp.buffer->address;
+	       current_SC->SCp.ptr = page_address(current_SC->SCp.buffer->page) + current_SC->SCp.buffer->offset;
 	       current_SC->SCp.this_residual = current_SC->SCp.buffer->length;
 	    } else
 		  break;
@@ -1598,7 +1598,7 @@
 	     && current_SC->SCp.buffers_residual) {
 	    --current_SC->SCp.buffers_residual;
 	    ++current_SC->SCp.buffer;
-	    current_SC->SCp.ptr = current_SC->SCp.buffer->address;
+	    current_SC->SCp.ptr = page_address(current_SC->SCp.buffer->page) + current_SC->SCp.buffer->offset;
 	    current_SC->SCp.this_residual = current_SC->SCp.buffer->length;
 	 }
       }
@@ -1684,7 +1684,7 @@
    if (current_SC->use_sg) {
       current_SC->SCp.buffer =
 	    (struct scatterlist *)current_SC->request_buffer;
-      current_SC->SCp.ptr              = current_SC->SCp.buffer->address;
+      current_SC->SCp.ptr              = page_address(current_SC->SCp.buffer->page) + current_SC->SCp.buffer->offset;
       current_SC->SCp.this_residual    = current_SC->SCp.buffer->length;
       current_SC->SCp.buffers_residual = current_SC->use_sg - 1;
    } else {
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/in2000.c linux-2.5/drivers/scsi/in2000.c
--- linux-2.5.40/drivers/scsi/in2000.c	Tue Oct  1 04:07:33 2002
+++ linux-2.5/drivers/scsi/in2000.c	Fri Oct  4 02:53:48 2002
@@ -355,7 +355,7 @@
    if (cmd->use_sg) {
       cmd->SCp.buffer = (struct scatterlist *)cmd->buffer;
       cmd->SCp.buffers_residual = cmd->use_sg - 1;
-      cmd->SCp.ptr = (char *)cmd->SCp.buffer->address;
+      cmd->SCp.ptr = page_address(cmd->SCp.buffer->page) + cmd->SCp.buffer->offset;
       cmd->SCp.this_residual = cmd->SCp.buffer->length;
       }
    else {
@@ -762,8 +762,8 @@
       ++cmd->SCp.buffer;
       --cmd->SCp.buffers_residual;
       cmd->SCp.this_residual = cmd->SCp.buffer->length;
-      cmd->SCp.ptr = cmd->SCp.buffer->address;
-      }
+      cmd->SCp.ptr =  page_address(cmd->SCp.buffer->page) + cmd->SCp.buffer->offset;
+   }
 
 /* Set up hardware registers */
 
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/ini9100u.c linux-2.5/drivers/scsi/ini9100u.c
--- linux-2.5.40/drivers/scsi/ini9100u.c	Tue Oct  1 04:06:26 2002
+++ linux-2.5/drivers/scsi/ini9100u.c	Fri Oct  4 02:53:48 2002
@@ -108,8 +108,6 @@
 
 #define CVT_LINUX_VERSION(V,P,S)        (V * 65536 + P * 256 + S)
 
-#error Please convert me to Documentation/DMA-mapping.txt
-
 #ifndef LINUX_VERSION_CODE
 #include <linux/version.h>
 #endif
@@ -491,7 +489,7 @@
 	if (SCpnt->use_sg) {
 		pSrbSG = (struct scatterlist *) SCpnt->request_buffer;
 		if (SCpnt->use_sg == 1) {	/* If only one entry in the list *//*      treat it as regular I/O */
-			pSCB->SCB_BufPtr = (U32) VIRT_TO_BUS(pSrbSG->address);
+			pSCB->SCB_BufPtr = (U32) VIRT_TO_BUS(page_address(pSrbSG->page)+pSrbSG->offset);
 			TotalLen = pSrbSG->length;
 			pSCB->SCB_SGLen = 0;
 		} else {	/* Assign SG physical address   */
@@ -500,7 +498,7 @@
 			for (i = 0, TotalLen = 0, pSG = &pSCB->SCB_SGList[0];	/* 1.01g */
 			     i < SCpnt->use_sg;
 			     i++, pSG++, pSrbSG++) {
-				pSG->SG_Ptr = (U32) VIRT_TO_BUS(pSrbSG->address);
+				pSG->SG_Ptr = (U32) VIRT_TO_BUS(page_address(pSrbSG->page)+pSrbSG->offset);
 				TotalLen += pSG->SG_Len = pSrbSG->length;
 			}
 			pSCB->SCB_SGLen = i;
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/pci2000.c linux-2.5/drivers/scsi/pci2000.c
--- linux-2.5.40/drivers/scsi/pci2000.c	Tue Oct  1 04:07:11 2002
+++ linux-2.5/drivers/scsi/pci2000.c	Fri Oct  4 02:53:48 2002
@@ -505,8 +505,9 @@
 			
 			if ( SCpnt->use_sg )
 				{
-				SCpnt->SCp.have_data_in = pci_map_single (padapter->pdev, ((struct scatterlist *)SCpnt->request_buffer)->address, 
-										  SCpnt->request_bufflen, scsi_to_pci_dma_dir (SCpnt->sc_data_direction));
+				SCpnt->SCp.have_data_in = pci_map_single (padapter->pdev, 
+								page_address(((struct scatterlist *)SCpnt->request_buffer)->page) + ((struct scatterlist *)SCpnt->request_buffer)->offset,
+								SCpnt->request_bufflen, scsi_to_pci_dma_dir (SCpnt->sc_data_direction));
 				}
 			else
 				{
@@ -528,8 +529,9 @@
 		case SCSIOP_READ_CAPACITY:			  	// read capacity CDB
 			if ( SCpnt->use_sg )
 				{
-				SCpnt->SCp.have_data_in = pci_map_single (padapter->pdev, ((struct scatterlist *)(SCpnt->request_buffer))->address,
-										  8, PCI_DMA_FROMDEVICE);
+				SCpnt->SCp.have_data_in = pci_map_single (padapter->pdev, 
+								page_address(((struct scatterlist *)SCpnt->request_buffer)->page) + ((struct scatterlist *)SCpnt->request_buffer)->offset,
+								8, PCI_DMA_FROMDEVICE);
 				}
 			else
 				SCpnt->SCp.have_data_in = pci_map_single (padapter->pdev, SCpnt->request_buffer, 8, PCI_DMA_FROMDEVICE);
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/pci2220i.c linux-2.5/drivers/scsi/pci2220i.c
--- linux-2.5.40/drivers/scsi/pci2220i.c	Tue Oct  1 04:06:13 2002
+++ linux-2.5/drivers/scsi/pci2220i.c	Fri Oct  4 02:53:48 2002
@@ -34,8 +34,6 @@
  *
  ****************************************************************************/
 
-#error Convert me to understand page+offset based scatterlists
-
 //#define DEBUG 1
 
 #include <linux/module.h>
@@ -464,7 +462,9 @@
 			{
 			if ( padapter->nextSg < padapter->SCpnt->use_sg )
 				{
-				padapter->currentSgBuffer = ((struct scatterlist *)padapter->SCpnt->request_buffer)[padapter->nextSg].address;
+				padapter->currentSgBuffer = 
+						page_address(((struct scatterlist *)padapter->SCpnt->request_buffer)[padapter->nextSg].page) +
+						 ((struct scatterlist *)padapter->SCpnt->request_buffer)[padapter->nextSg].offset;
 				padapter->currentSgCount = ((struct scatterlist *)padapter->SCpnt->request_buffer)[padapter->nextSg].length;
 				padapter->nextSg++;
 				}
@@ -2050,7 +2050,9 @@
 
 	if ( SCpnt->use_sg )
 		{
-		padapter->currentSgBuffer = ((struct scatterlist *)SCpnt->request_buffer)[0].address;
+		padapter->currentSgBuffer = 
+			page_address(((struct scatterlist *)SCpnt->request_buffer)[0].page) +
+			((struct scatterlist *)SCpnt->request_buffer)[0].offset;
 		padapter->currentSgCount = ((struct scatterlist *)SCpnt->request_buffer)[0].length;
 		}
 	else
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/scsiiom.c linux-2.5/drivers/scsi/scsiiom.c
--- linux-2.5.40/drivers/scsi/scsiiom.c	Tue Oct  1 04:06:16 2002
+++ linux-2.5/drivers/scsi/scsiiom.c	Fri Oct  4 02:53:48 2002
@@ -6,8 +6,6 @@
  ***********************************************************************/
 /* $Id: scsiiom.c,v 2.55.2.17 2000/12/20 00:39:37 garloff Exp $ */
 
-#error Please convert me to Documentation/DMA-mapping.txt
-
 static void __inline__
 dc390_freetag (PDCB pDCB, PSRB pSRB)
 {
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/seagate.c linux-2.5/drivers/scsi/seagate.c
--- linux-2.5.40/drivers/scsi/seagate.c	Tue Oct  1 04:06:58 2002
+++ linux-2.5/drivers/scsi/seagate.c	Fri Oct  4 02:53:48 2002
@@ -1069,7 +1069,7 @@
 
 			buffer = (struct scatterlist *) SCint->buffer;
 			len = buffer->length;
-			data = (unsigned char *) buffer->address;
+			data = (unsigned char *) (page_address(buffer->page) + buffer->offset);
 		} else {
 			DPRINTK (DEBUG_SG,
 				 "scsi%d : scatter gather not requested.\n",
@@ -1336,7 +1336,7 @@
 					++buffer;
 					len = buffer->length;
 					data =
-					    (unsigned char *) buffer->address;
+					    (unsigned char *) (page_address(buffer->page) + buffer->offset);
 					DPRINTK (DEBUG_SG,
 						 "scsi%d : next scatter-gather buffer len = %d address = %08x\n",
 						 hostno, len, data);
@@ -1520,7 +1520,7 @@
 					++buffer;
 					len = buffer->length;
 					data =
-					    (unsigned char *) buffer->address;
+					    (unsigned char *) (page_address(buffer->page) + buffer->offset);
 					DPRINTK (DEBUG_SG,
 						 "scsi%d : next scatter-gather buffer len = %d address = %08x\n",
 						 hostno, len, data);
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/sym53c416.c linux-2.5/drivers/scsi/sym53c416.c
--- linux-2.5.40/drivers/scsi/sym53c416.c	Tue Oct  1 04:06:18 2002
+++ linux-2.5/drivers/scsi/sym53c416.c	Fri Oct  4 02:53:48 2002
@@ -449,7 +449,7 @@
 					sglist = current_command->request_buffer;
 					while(sgcount--)
 					{
-						tot_trans += sym53c416_write(base, sglist->address, sglist->length);
+						tot_trans += sym53c416_write(base, page_address(sglist->page) + sglist->offset,	sglist->length);
 						sglist++;
 					}
 				}
@@ -475,7 +475,7 @@
 					sglist = current_command->request_buffer;
 					while(sgcount--)
 					{
-						tot_trans += sym53c416_read(base, sglist->address, sglist->length);
+						tot_trans += sym53c416_read(base, page_address(sglist->page) + sglist->offset, sglist->length);
 						sglist++;
 					}
 				}
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/wd7000.c linux-2.5/drivers/scsi/wd7000.c
--- linux-2.5.40/drivers/scsi/wd7000.c	Tue Oct  1 04:07:45 2002
+++ linux-2.5/drivers/scsi/wd7000.c	Fri Oct  4 02:53:48 2002
@@ -621,14 +621,13 @@
 	(void)get_options(str, ARRAY_SIZE(ints), ints);
 
 	if (wd7000_card_num >= NUM_CONFIGS) {
-		printk(KERN_ERR __FUNCTION__
-			": Too many \"wd7000=\" configurations in "
+		printk(KERN_ERR ": Too many \"wd7000=\" configurations in "
 			"command line!\n");
 		return 0;
 	}
 
 	if ((ints[0] < 3) || (ints[0] > 5)) {
-		printk(KERN_ERR __FUNCTION__ ": Error in command line!  "
+		printk(KERN_ERR ": Error in command line!  "
 			"Usage: wd7000=<IRQ>,<DMA>,IO>[,<BUS_ON>"
 			"[,<BUS_OFF>]]\n");
 	} else {
@@ -1743,7 +1742,7 @@
 	    ip[2] = info[2];
 
 	    if (info[0] == 255)
-		printk(KERN_INFO __FUNCTION__ ": current partition table is "
+		printk(KERN_INFO ": current partition table is "
 			"using extended translation.\n");
 	}
     }
--

http://www.techlinux.com.br/~carlos/tmp/2.5.40-DMA-mapping_misc.diff

-- 
	 _________________________
	 Carlos E Gorges          
	 (carlos@techlinux.com.br)
	 Tech informática LTDA
	 Brazil                   
	 _________________________



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-10-04 19:49 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <mailman.1033712580.28994.linux-kernel2news@redhat.com>
2002-10-04 19:54 ` [PATCH] 2.5.40 - DMA-mapping && misc Pete Zaitcev
2002-10-04 17:59 Matthew Wilcox
  -- strict thread matches above, loose matches on Subject: below --
2002-10-04  6:19 Carlos E Gorges

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).