
From: William Lee Irwin III <wli@holomorphy.com>

This patch converts all callers of remap_page_range() under arch/ and net/ to
use remap_pfn_range() instead.

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/char/agp/frontend.c             |    8 ++++----
 25-akpm/drivers/char/drm/drm_vm.h               |    4 ++--
 25-akpm/drivers/char/drm/i810_dma.c             |    4 ++--
 25-akpm/drivers/char/drm/i830_dma.c             |    4 ++--
 25-akpm/drivers/char/ftape/lowlevel/ftape-ctl.c |    7 +++++--
 25-akpm/drivers/char/hpet.c                     |    6 +++---
 25-akpm/drivers/char/mem.c                      |    2 +-
 25-akpm/drivers/char/mmtimer.c                  |    8 ++++----
 25-akpm/drivers/ieee1394/video1394.c            |    2 +-
 25-akpm/drivers/media/video/cpia.c              |   18 ++----------------
 25-akpm/drivers/media/video/meye.c              |   17 ++---------------
 25-akpm/drivers/media/video/planb.c             |    6 ++++--
 25-akpm/drivers/media/video/zoran_driver.c      |   22 +++++++++-------------
 25-akpm/drivers/media/video/zr36120.c           |    4 ++--
 25-akpm/drivers/perfctr/virtual.c               |    3 ++-
 25-akpm/drivers/sbus/char/flash.c               |    4 ++--
 25-akpm/drivers/sbus/char/jsflash.c             |    2 +-
 25-akpm/drivers/usb/class/audio.c               |    5 ++++-
 25-akpm/drivers/usb/media/ov511.c               |   20 ++------------------
 25-akpm/drivers/usb/media/se401.c               |   18 ++----------------
 25-akpm/drivers/usb/media/sn9c102_core.c        |   16 ++--------------
 25-akpm/drivers/usb/media/stv680.c              |   18 ++----------------
 25-akpm/drivers/usb/media/usbvideo.c            |   19 ++-----------------
 25-akpm/drivers/usb/media/vicam.c               |   14 ++------------
 25-akpm/drivers/usb/media/w9968cf.c             |   21 +++------------------
 25-akpm/drivers/video/aty/atyfb_base.c          |    4 ++--
 25-akpm/drivers/video/gbefb.c                   |    4 ++--
 25-akpm/drivers/video/igafb.c                   |    4 ++--
 25-akpm/drivers/video/sgivwfb.c                 |    4 ++--
 25-akpm/net/packet/af_packet.c                  |    3 ++-
 30 files changed, 77 insertions(+), 194 deletions(-)

diff -puN drivers/char/agp/frontend.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/char/agp/frontend.c
--- 25/drivers/char/agp/frontend.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.326465080 -0700
+++ 25-akpm/drivers/char/agp/frontend.c	2004-10-05 01:48:32.377457328 -0700
@@ -627,8 +627,8 @@ static int agp_mmap(struct file *file, s
 		DBG("client vm_ops=%p", kerninfo.vm_ops);
 		if (kerninfo.vm_ops) {
 			vma->vm_ops = kerninfo.vm_ops;
-		} else if (remap_page_range(vma, vma->vm_start, 
-					    (kerninfo.aper_base + offset),
+		} else if (remap_pfn_range(vma, vma->vm_start,
+				(kerninfo.aper_base + offset) >> PAGE_SHIFT,
 					    size, vma->vm_page_prot)) {
 			goto out_again;
 		}
@@ -643,8 +643,8 @@ static int agp_mmap(struct file *file, s
 		DBG("controller vm_ops=%p", kerninfo.vm_ops);
 		if (kerninfo.vm_ops) {
 			vma->vm_ops = kerninfo.vm_ops;
-		} else if (remap_page_range(vma, vma->vm_start, 
-					    kerninfo.aper_base,
+		} else if (remap_pfn_range(vma, vma->vm_start,
+					    kerninfo.aper_base >> PAGE_SHIFT,
 					    size, vma->vm_page_prot)) {
 			goto out_again;
 		}
diff -puN drivers/char/drm/drm_vm.h~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/char/drm/drm_vm.h
--- 25/drivers/char/drm/drm_vm.h~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.328464776 -0700
+++ 25-akpm/drivers/char/drm/drm_vm.h	2004-10-05 01:48:32.378457176 -0700
@@ -620,8 +620,8 @@ int DRM(mmap)(struct file *filp, struct 
 					vma->vm_end - vma->vm_start,
 					vma->vm_page_prot, 0))
 #else
-		if (remap_page_range(DRM_RPR_ARG(vma) vma->vm_start,
-				     VM_OFFSET(vma) + offset,
+		if (remap_pfn_range(DRM_RPR_ARG(vma) vma->vm_start,
+				     (VM_OFFSET(vma) + offset) >> PAGE_SHIFT,
 				     vma->vm_end - vma->vm_start,
 				     vma->vm_page_prot))
 #endif
diff -puN drivers/char/drm/i810_dma.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/char/drm/i810_dma.c
--- 25/drivers/char/drm/i810_dma.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.329464624 -0700
+++ 25-akpm/drivers/char/drm/i810_dma.c	2004-10-05 01:48:32.379457024 -0700
@@ -138,8 +138,8 @@ int i810_mmap_buffers(struct file *filp,
    	buf_priv->currently_mapped = I810_BUF_MAPPED;
 	unlock_kernel();
 
-	if (remap_page_range(DRM_RPR_ARG(vma) vma->vm_start,
-			     VM_OFFSET(vma),
+	if (remap_pfn_range(DRM_RPR_ARG(vma) vma->vm_start,
+			     VM_OFFSET(vma) >> PAGE_SHIFT,
 			     vma->vm_end - vma->vm_start,
 			     vma->vm_page_prot)) return -EAGAIN;
 	return 0;
diff -puN drivers/char/drm/i830_dma.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/char/drm/i830_dma.c
--- 25/drivers/char/drm/i830_dma.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.331464320 -0700
+++ 25-akpm/drivers/char/drm/i830_dma.c	2004-10-05 01:48:32.381456720 -0700
@@ -139,8 +139,8 @@ int i830_mmap_buffers(struct file *filp,
    	buf_priv->currently_mapped = I830_BUF_MAPPED;
 	unlock_kernel();
 
-	if (remap_page_range(DRM_RPR_ARG(vma) vma->vm_start,
-			     VM_OFFSET(vma),
+	if (remap_pfn_range(DRM_RPR_ARG(vma) vma->vm_start,
+			     VM_OFFSET(vma) >> PAGE_SHIFT,
 			     vma->vm_end - vma->vm_start,
 			     vma->vm_page_prot)) return -EAGAIN;
 	return 0;
diff -puN drivers/char/ftape/lowlevel/ftape-ctl.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/char/ftape/lowlevel/ftape-ctl.c
--- 25/drivers/char/ftape/lowlevel/ftape-ctl.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.332464168 -0700
+++ 25-akpm/drivers/char/ftape/lowlevel/ftape-ctl.c	2004-10-05 01:48:32.382456568 -0700
@@ -726,9 +726,12 @@ int ftape_mmap(struct vm_area_struct *vm
 		ftape_reset_buffer();
 	}
 	for (i = 0; i < num_buffers; i++) {
-		TRACE_CATCH(remap_page_range(vma, vma->vm_start +
+		unsigned long pfn;
+
+		pfn = virt_to_phys(ft_buffer[i]->address) >> PAGE_SHIFT;
+		TRACE_CATCH(remap_pfn_range(vma, vma->vm_start +
 					     i * FT_BUFF_SIZE,
-					     virt_to_phys(ft_buffer[i]->address),
+					     pfn,
 					     FT_BUFF_SIZE,
 					     vma->vm_page_prot),
 			    _res = -EAGAIN);
diff -puN drivers/char/hpet.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/char/hpet.c
--- 25/drivers/char/hpet.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.334463864 -0700
+++ 25-akpm/drivers/char/hpet.c	2004-10-05 01:48:32.383456416 -0700
@@ -273,9 +273,9 @@ static int hpet_mmap(struct file *file, 
 	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
 	addr = __pa(addr);
 
-	if (remap_page_range
-	    (vma, vma->vm_start, addr, PAGE_SIZE, vma->vm_page_prot)) {
-		printk(KERN_ERR "remap_page_range failed in hpet.c\n");
+	if (remap_pfn_range(vma, vma->vm_start, addr >> PAGE_SHIFT,
+					PAGE_SIZE, vma->vm_page_prot)) {
+		printk(KERN_ERR "remap_pfn_range failed in hpet.c\n");
 		return -EAGAIN;
 	}
 
diff -puN drivers/char/mem.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/char/mem.c
--- 25/drivers/char/mem.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.335463712 -0700
+++ 25-akpm/drivers/char/mem.c	2004-10-05 01:48:32.384456264 -0700
@@ -225,7 +225,7 @@ static int mmap_mem(struct file *file, s
 	 */
 	vma->vm_flags |= VM_RESERVED|VM_IO;
 
-	if (remap_page_range(vma, vma->vm_start, offset,
+	if (remap_pfn_range(vma, vma->vm_start, offset >> PAGE_SHIFT,
 			vma->vm_end-vma->vm_start, vma->vm_page_prot))
 		return -EAGAIN;
 	return 0;
diff -puN drivers/char/mmtimer.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/char/mmtimer.c
--- 25/drivers/char/mmtimer.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.337463408 -0700
+++ 25-akpm/drivers/char/mmtimer.c	2004-10-05 01:48:32.386455960 -0700
@@ -139,7 +139,7 @@ static int mmtimer_ioctl(struct inode *i
  * @file: file structure for the device
  * @vma: VMA to map the registers into
  *
- * Calls remap_page_range() to map the clock's registers into
+ * Calls remap_pfn_range() to map the clock's registers into
  * the calling process' address space.
  */
 static int mmtimer_mmap(struct file *file, struct vm_area_struct *vma)
@@ -162,9 +162,9 @@ static int mmtimer_mmap(struct file *fil
 	mmtimer_addr &= ~(PAGE_SIZE - 1);
 	mmtimer_addr &= 0xfffffffffffffffUL;
 
-	if (remap_page_range(vma, vma->vm_start, mmtimer_addr, PAGE_SIZE,
-			     vma->vm_page_prot)) {
-		printk(KERN_ERR "remap_page_range failed in mmtimer.c\n");
+	if (remap_pfn_range(vma, vma->vm_start, mmtimer_addr >> PAGE_SHIFT,
+					PAGE_SIZE, vma->vm_page_prot)) {
+		printk(KERN_ERR "remap_pfn_range failed in mmtimer.c\n");
 		return -EAGAIN;
 	}
 
diff -puN drivers/ieee1394/video1394.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/ieee1394/video1394.c
--- 25/drivers/ieee1394/video1394.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.338463256 -0700
+++ 25-akpm/drivers/ieee1394/video1394.c	2004-10-05 01:48:32.387455808 -0700
@@ -1157,7 +1157,7 @@ static int video1394_ioctl(struct inode 
  *
  *  FIXME:
  *  - PAGE_READONLY should suffice!?
- *  - remap_page_range is kind of inefficient for page by page remapping.
+ *  - remap_pfn_range is kind of inefficient for page by page remapping.
  *    But e.g. pte_alloc() does not work in modules ... :-(
  */
 
diff -puN drivers/media/video/cpia.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/media/video/cpia.c
--- 25/drivers/media/video/cpia.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.340462952 -0700
+++ 25-akpm/drivers/media/video/cpia.c	2004-10-05 01:48:32.391455200 -0700
@@ -216,20 +216,6 @@ static void set_flicker(struct cam_param
  * Memory management
  *
  **********************************************************************/
-
-/* Here we want the physical address of the memory.
- * This is used when initializing the contents of the area.
- */
-static inline unsigned long kvirt_to_pa(unsigned long adr)
-{
-	unsigned long kva, ret;
-
-	kva = (unsigned long) page_address(vmalloc_to_page((void *)adr));
-	kva |= adr & (PAGE_SIZE-1); /* restore the offset */
-	ret = __pa(kva);
-	return ret;
-}
-
 static void *rvmalloc(unsigned long size)
 {
 	void *mem;
@@ -3795,8 +3781,8 @@ static int cpia_mmap(struct file *file, 
 
 	pos = (unsigned long)(cam->frame_buf);
 	while (size > 0) {
-		page = kvirt_to_pa(pos);
-		if (remap_page_range(vma, start, page, PAGE_SIZE, PAGE_SHARED)) {
+		page = page_to_pfn(vmalloc_to_page((void *)pos));
+		if (remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED)) {
 			up(&cam->busy_lock);
 			return -EAGAIN;
 		}
diff -puN drivers/media/video/meye.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/media/video/meye.c
--- 25/drivers/media/video/meye.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.341462800 -0700
+++ 25-akpm/drivers/media/video/meye.c	2004-10-05 01:48:32.393454896 -0700
@@ -115,19 +115,6 @@ static inline int meye_emptyq(struct mey
 /****************************************************************************/
 /* Memory allocation routines (stolen from bttv-driver.c)                   */
 /****************************************************************************/
-
-/* Here we want the physical address of the memory.
- * This is used when initializing the contents of the area.
- */
-static inline unsigned long kvirt_to_pa(unsigned long adr) {
-        unsigned long kva, ret;
-
-        kva = (unsigned long) page_address(vmalloc_to_page((void *)adr));
-	kva |= adr & (PAGE_SIZE-1); /* restore the offset */
-	ret = __pa(kva);
-        return ret;
-}
-
 static void *rvmalloc(unsigned long size) {
 	void *mem;
 	unsigned long adr;
@@ -1201,8 +1188,8 @@ static int meye_mmap(struct file *file, 
 	pos = (unsigned long)meye.grab_fbuffer;
 
 	while (size > 0) {
-		page = kvirt_to_pa(pos);
-		if (remap_page_range(vma, start, page, PAGE_SIZE, PAGE_SHARED)) {
+		page = page_to_pfn(vmalloc_to_page((void *)pos));
+		if (remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED)) {
 			up(&meye.lock);
 			return -EAGAIN;
 		}
diff -puN drivers/media/video/planb.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/media/video/planb.c
--- 25/drivers/media/video/planb.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.343462496 -0700
+++ 25-akpm/drivers/media/video/planb.c	2004-10-05 01:48:32.395454592 -0700
@@ -1995,8 +1995,10 @@ static int planb_mmap(struct vm_area_str
 			return err;
 	}
 	for (i = 0; i < pb->rawbuf_size; i++) {
-		if (remap_page_range(vma, start, virt_to_phys((void *)pb->rawbuf[i]),
-						PAGE_SIZE, PAGE_SHARED))
+		unsigned long pfn;
+
+		pfn = virt_to_phys((void *)pb->rawbuf[i]) >> PAGE_SHIFT;
+		if (remap_pfn_range(vma, start, pfn, PAGE_SIZE, PAGE_SHARED))
 			return -EAGAIN;
 		start += PAGE_SIZE;
 		if (size <= PAGE_SIZE)
diff -puN drivers/media/video/zoran_driver.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/media/video/zoran_driver.c
--- 25/drivers/media/video/zoran_driver.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.345462192 -0700
+++ 25-akpm/drivers/media/video/zoran_driver.c	2004-10-05 01:48:32.399453984 -0700
@@ -4448,12 +4448,6 @@ static struct vm_operations_struct zoran
 	.close = zoran_vm_close,
 };
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-#define zr_remap_page_range(a,b,c,d,e) remap_page_range(b,c,d,e)
-#else
-#define zr_remap_page_range(a,b,c,d,e) remap_page_range(a,b,c,d,e)
-#endif
-
 static int
 zoran_mmap (struct file           *file,
 	    struct vm_area_struct *vma)
@@ -4553,12 +4547,14 @@ zoran_mmap (struct file           *file,
 				pos =
 				    (unsigned long) fh->jpg_buffers.
 				    buffer[i].frag_tab[2 * j];
-				page = virt_to_phys(bus_to_virt(pos));	/* should just be pos on i386 */
-				if (zr_remap_page_range
-				    (vma, start, page, todo, PAGE_SHARED)) {
+				/* should just be pos on i386 */
+				page = virt_to_phys(bus_to_virt(pos))
+								>> PAGE_SHIFT;
+				if (remap_pfn_range(vma, start, page,
+							todo, PAGE_SHARED)) {
 					dprintk(1,
 						KERN_ERR
-						"%s: zoran_mmap(V4L) - remap_page_range failed\n",
+						"%s: zoran_mmap(V4L) - remap_pfn_range failed\n",
 						ZR_DEVNAME(zr));
 					res = -EAGAIN;
 					goto jpg_mmap_unlock_and_return;
@@ -4639,11 +4635,11 @@ zoran_mmap (struct file           *file,
 			if (todo > fh->v4l_buffers.buffer_size)
 				todo = fh->v4l_buffers.buffer_size;
 			page = fh->v4l_buffers.buffer[i].fbuffer_phys;
-			if (zr_remap_page_range
-			    (vma, start, page, todo, PAGE_SHARED)) {
+			if (remap_pfn_range(vma, start, page >> PAGE_SHIFT,
+							todo, PAGE_SHARED)) {
 				dprintk(1,
 					KERN_ERR
-					"%s: zoran_mmap(V4L)i - remap_page_range failed\n",
+					"%s: zoran_mmap(V4L)i - remap_pfn_range failed\n",
 					ZR_DEVNAME(zr));
 				res = -EAGAIN;
 				goto v4l_mmap_unlock_and_return;
diff -puN drivers/media/video/zr36120.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/media/video/zr36120.c
--- 25/drivers/media/video/zr36120.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.347461888 -0700
+++ 25-akpm/drivers/media/video/zr36120.c	2004-10-05 01:48:32.402453528 -0700
@@ -1474,8 +1474,8 @@ int zoran_mmap(struct vm_area_struct *vm
 	/* start mapping the whole shabang to user memory */
 	pos = (unsigned long)ztv->fbuffer;
 	while (size>0) {
-		unsigned long page = virt_to_phys((void*)pos);
-		if (remap_page_range(vma, start, page, PAGE_SIZE, PAGE_SHARED))
+		unsigned long pfn = virt_to_phys((void*)pos) >> PAGE_SHIFT;
+		if (remap_pfn_range(vma, start, pfn, PAGE_SIZE, PAGE_SHARED))
 			return -EAGAIN;
 		start += PAGE_SIZE;
 		pos += PAGE_SIZE;
diff -puN drivers/perfctr/virtual.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/perfctr/virtual.c
--- 25/drivers/perfctr/virtual.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.348461736 -0700
+++ 25-akpm/drivers/perfctr/virtual.c	2004-10-05 01:48:32.403453376 -0700
@@ -720,7 +720,8 @@ static int vperfctr_mmap(struct file *fi
 	perfctr = filp->private_data;
 	if (!perfctr)
 		return -EPERM;
-	return remap_page_range(vma, vma->vm_start, virt_to_phys(perfctr),
+	return remap_pfn_range(vma, vma->vm_start,
+				virt_to_phys(perfctr) >> PAGE_SHIFT,
 				PAGE_SIZE, vma->vm_page_prot);
 }
 
diff -puN drivers/sbus/char/flash.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/sbus/char/flash.c
--- 25/drivers/sbus/char/flash.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.350461432 -0700
+++ 25-akpm/drivers/sbus/char/flash.c	2004-10-05 01:48:32.403453376 -0700
@@ -66,7 +66,7 @@ flash_mmap(struct file *file, struct vm_
 
 	if ((vma->vm_pgoff << PAGE_SHIFT) > size)
 		return -ENXIO;
-	addr += (vma->vm_pgoff << PAGE_SHIFT);
+	addr = vma->vm_pgoff + (addr >> PAGE_SHIFT);
 
 	if (vma->vm_end - (vma->vm_start + (vma->vm_pgoff << PAGE_SHIFT)) > size)
 		size = vma->vm_end - (vma->vm_start + (vma->vm_pgoff << PAGE_SHIFT));
@@ -75,7 +75,7 @@ flash_mmap(struct file *file, struct vm_
 	pgprot_val(vma->vm_page_prot) |= _PAGE_E;
 	vma->vm_flags |= (VM_SHM | VM_LOCKED);
 
-	if (remap_page_range(vma, vma->vm_start, addr, size, vma->vm_page_prot))
+	if (remap_pfn_range(vma, vma->vm_start, addr, size, vma->vm_page_prot))
 		return -EAGAIN;
 		
 	return 0;
diff -puN drivers/sbus/char/jsflash.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/sbus/char/jsflash.c
--- 25/drivers/sbus/char/jsflash.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.351461280 -0700
+++ 25-akpm/drivers/sbus/char/jsflash.c	2004-10-05 01:48:32.404453224 -0700
@@ -21,7 +21,7 @@
  * as a silly safeguard.
  *
  * XXX The flash.c manipulates page caching characteristics in a certain
- * dubious way; also it assumes that remap_page_range() can remap
+ * dubious way; also it assumes that remap_pfn_range() can remap
  * PCI bus locations, which may be false. ioremap() must be used
  * instead. We should discuss this.
  */
diff -puN drivers/usb/class/audio.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/usb/class/audio.c
--- 25/drivers/usb/class/audio.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.353460976 -0700
+++ 25-akpm/drivers/usb/class/audio.c	2004-10-05 01:48:32.407452768 -0700
@@ -509,7 +509,10 @@ static int dmabuf_mmap(struct vm_area_st
 			return -EINVAL;
 	db->mapped = 1;
 	for(nr = 0; nr < size; nr++) {
-		if (remap_page_range(vma, start, virt_to_phys(db->sgbuf[nr]), PAGE_SIZE, prot))
+		unsigned long pfn;
+
+		pfn = virt_to_phys(db->sgbuf[nr]) >> PAGE_SHIFT;
+		if (remap_pfn_range(vma, start, pfn, PAGE_SIZE, prot))
 			return -EAGAIN;
 		start += PAGE_SIZE;
 	}
diff -puN drivers/usb/media/ov511.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/usb/media/ov511.c
--- 25/drivers/usb/media/ov511.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.355460672 -0700
+++ 25-akpm/drivers/usb/media/ov511.c	2004-10-05 01:48:32.412452008 -0700
@@ -324,21 +324,6 @@ static struct symbolic_list urb_errlist[
 /**********************************************************************
  * Memory management
  **********************************************************************/
-
-/* Here we want the physical address of the memory.
- * This is used when initializing the contents of the area.
- */
-static inline unsigned long
-kvirt_to_pa(unsigned long adr)
-{
-	unsigned long kva, ret;
-
-	kva = (unsigned long) page_address(vmalloc_to_page((void *)adr));
-	kva |= adr & (PAGE_SIZE-1); /* restore the offset */
-	ret = __pa(kva);
-	return ret;
-}
-
 static void *
 rvmalloc(unsigned long size)
 {
@@ -4771,9 +4756,8 @@ ov51x_v4l1_mmap(struct file *file, struc
 
 	pos = (unsigned long)ov->fbuf;
 	while (size > 0) {
-		page = kvirt_to_pa(pos);
-		if (remap_page_range(vma, start, page, PAGE_SIZE,
-				     PAGE_SHARED)) {
+		page = page_to_pfn(vmalloc_to_page((void *)pos));
+		if (remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED)) {
 			up(&ov->lock);
 			return -EAGAIN;
 		}
diff -puN drivers/usb/media/se401.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/usb/media/se401.c
--- 25/drivers/usb/media/se401.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.357460368 -0700
+++ 25-akpm/drivers/usb/media/se401.c	2004-10-05 01:48:32.413451856 -0700
@@ -65,20 +65,6 @@ static struct usb_driver se401_driver;
  * Memory management
  *
  **********************************************************************/
-
-/* Here we want the physical address of the memory.
- * This is used when initializing the contents of the area.
- */
-static inline unsigned long kvirt_to_pa(unsigned long adr)
-{
-	unsigned long kva, ret;
-
-	kva = (unsigned long) page_address(vmalloc_to_page((void *)adr));
-	kva |= adr & (PAGE_SIZE-1); /* restore the offset */
-	ret = __pa(kva);
-	return ret;
-}
-
 static void *rvmalloc(unsigned long size)
 {
 	void *mem;
@@ -1182,8 +1168,8 @@ static int se401_mmap(struct file *file,
 	}
 	pos = (unsigned long)se401->fbuf;
 	while (size > 0) {
-		page = kvirt_to_pa(pos);
-		if (remap_page_range(vma, start, page, PAGE_SIZE, PAGE_SHARED)) {
+		page = page_to_pfn(vmalloc_to_page((void *)pos));
+		if (remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED)) {
 			up(&se401->lock);
 			return -EAGAIN;
 		}
diff -puN drivers/usb/media/sn9c102_core.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/usb/media/sn9c102_core.c
--- 25/drivers/usb/media/sn9c102_core.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.359460064 -0700
+++ 25-akpm/drivers/usb/media/sn9c102_core.c	2004-10-05 01:48:32.415451552 -0700
@@ -101,18 +101,6 @@ static sn9c102_eof_header_t sn9c102_eof_
 };
 
 /*****************************************************************************/
-
-static inline unsigned long kvirt_to_pa(unsigned long adr)
-{
-	unsigned long kva, ret;
-
-	kva = (unsigned long)page_address(vmalloc_to_page((void *)adr));
-	kva |= adr & (PAGE_SIZE-1);
-	ret = __pa(kva);
-	return ret;
-}
-
-
 static void* rvmalloc(size_t size)
 {
 	void* mem;
@@ -1499,8 +1487,8 @@ static int sn9c102_mmap(struct file* fil
 
 	pos = (unsigned long)cam->frame[i].bufmem;
 	while (size > 0) { /* size is page-aligned */
-		page = kvirt_to_pa(pos);
-		if (remap_page_range(vma, start, page, PAGE_SIZE, 
+		page = page_to_pfn(vmalloc_to_page((void *)pos));
+		if (remap_pfn_range(vma, start, page, PAGE_SIZE,
 		                     vma->vm_page_prot)) {
 			up(&cam->fileop_sem);
 			return -EAGAIN;
diff -puN drivers/usb/media/stv680.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/usb/media/stv680.c
--- 25/drivers/usb/media/stv680.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.360459912 -0700
+++ 25-akpm/drivers/usb/media/stv680.c	2004-10-05 01:48:32.417451248 -0700
@@ -118,20 +118,6 @@ module_param(video_nr, int, 0);
  *
  * And the STV0680 driver - Kevin
  ********************************************************************/
-
-/* Here we want the physical address of the memory.
- * This is used when initializing the contents of the area.
- */
-static inline unsigned long kvirt_to_pa (unsigned long adr)
-{
-	unsigned long kva, ret;
-
-	kva = (unsigned long) page_address(vmalloc_to_page((void *)adr));
-	kva |= adr & (PAGE_SIZE-1); /* restore the offset */
-	ret = __pa(kva);
-	return ret;
-}
-
 static void *rvmalloc (unsigned long size)
 {
 	void *mem;
@@ -1291,8 +1277,8 @@ static int stv680_mmap (struct file *fil
 	}
 	pos = (unsigned long) stv680->fbuf;
 	while (size > 0) {
-		page = kvirt_to_pa (pos);
-		if (remap_page_range (vma, start, page, PAGE_SIZE, PAGE_SHARED)) {
+		page = page_to_pfn(vmalloc_to_page((void *)pos));
+		if (remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED)) {
 			up (&stv680->lock);
 			return -EAGAIN;
 		}
diff -puN drivers/usb/media/usbvideo.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/usb/media/usbvideo.c
--- 25/drivers/usb/media/usbvideo.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.362459608 -0700
+++ 25-akpm/drivers/usb/media/usbvideo.c	2004-10-05 01:48:32.419450944 -0700
@@ -60,21 +60,6 @@ static void usbvideo_SoftwareContrastAdj
 /*******************************/
 /* Memory management functions */
 /*******************************/
-
-/*
- * Here we want the physical address of the memory.
- * This is used when initializing the contents of the area.
- */
-unsigned long usbvideo_kvirt_to_pa(unsigned long adr)
-{
-	unsigned long kva, ret;
-
-	kva = (unsigned long) page_address(vmalloc_to_page((void *)adr));
-	kva |= adr & (PAGE_SIZE-1); /* restore the offset */
-	ret = __pa(kva);
-	return ret;
-}
-
 static void *usbvideo_rvmalloc(unsigned long size)
 {
 	void *mem;
@@ -1168,8 +1153,8 @@ static int usbvideo_v4l_mmap(struct file
 
 	pos = (unsigned long) uvd->fbuf;
 	while (size > 0) {
-		page = usbvideo_kvirt_to_pa(pos);
-		if (remap_page_range(vma, start, page, PAGE_SIZE, PAGE_SHARED))
+		page = page_to_pfn(vmalloc_to_page((void *)pos));
+		if (remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED))
 			return -EAGAIN;
 
 		start += PAGE_SIZE;
diff -puN drivers/usb/media/vicam.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/usb/media/vicam.c
--- 25/drivers/usb/media/vicam.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.364459304 -0700
+++ 25-akpm/drivers/usb/media/vicam.c	2004-10-05 01:48:32.422450488 -0700
@@ -351,16 +351,6 @@ static unsigned char setup5[] = {
 	0x46, 0x05, 0x6C, 0x05, 0x00, 0x00
 };
 
-static unsigned long kvirt_to_pa(unsigned long adr)
-{
-	unsigned long kva, ret;
-
-	kva = (unsigned long) page_address(vmalloc_to_page((void *)adr));
-	kva |= adr & (PAGE_SIZE-1); /* restore the offset */
-	ret = __pa(kva);
-	return ret;
-}
-
 /* rvmalloc / rvfree copied from usbvideo.c
  *
  * Not sure why these are not yet non-statics which I can reference through
@@ -1055,8 +1045,8 @@ vicam_mmap(struct file *file, struct vm_
 
 	pos = (unsigned long)cam->framebuf;
 	while (size > 0) {
-		page = kvirt_to_pa(pos);
-		if (remap_page_range(vma, start, page, PAGE_SIZE, PAGE_SHARED))
+		page = page_to_pfn(vmalloc_to_page((void *)pos));
+		if (remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED))
 			return -EAGAIN;
 
 		start += PAGE_SIZE;
diff -puN drivers/usb/media/w9968cf.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/usb/media/w9968cf.c
--- 25/drivers/usb/media/w9968cf.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.365459152 -0700
+++ 25-akpm/drivers/usb/media/w9968cf.c	2004-10-05 01:48:32.425450032 -0700
@@ -457,7 +457,6 @@ static int w9968cf_i2c_control(struct i2
                                unsigned long arg);
 
 /* Memory management */
-static inline unsigned long kvirt_to_pa(unsigned long adr);
 static void* rvmalloc(unsigned long size);
 static void rvfree(void *mem, unsigned long size);
 static void w9968cf_deallocate_memory(struct w9968cf_device*);
@@ -611,20 +610,6 @@ static struct w9968cf_symbolic_list urb_
 /****************************************************************************
  * Memory management functions                                              *
  ****************************************************************************/
-
-/* Here we want the physical address of the memory.
-   This is used when initializing the contents of the area. */
-static inline unsigned long kvirt_to_pa(unsigned long adr)
-{
-	unsigned long kva, ret;
-
-	kva = (unsigned long) page_address(vmalloc_to_page((void *)adr));
-	kva |= adr & (PAGE_SIZE-1); /* restore the offset */
-	ret = __pa(kva);
-	return ret;
-}
-
-
 static void* rvmalloc(unsigned long size)
 {
 	void* mem;
@@ -2919,9 +2904,9 @@ static int w9968cf_mmap(struct file* fil
 		return -EINVAL;
 
 	while (vsize > 0) {
-		page = kvirt_to_pa(pos) + vma->vm_pgoff;
-		if (remap_page_range(vma, start, page, PAGE_SIZE, 
-		                     vma->vm_page_prot))
+		page = page_to_pfn(vmalloc_to_page((void *)pos));
+		if (remap_pfn_range(vma, start, page + vma->vm_pgoff,
+						PAGE_SIZE, vma->vm_page_prot))
 			return -EAGAIN;
 		start += PAGE_SIZE;
 		pos += PAGE_SIZE;
diff -puN drivers/video/aty/atyfb_base.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/video/aty/atyfb_base.c
--- 25/drivers/video/aty/atyfb_base.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.367458848 -0700
+++ 25-akpm/drivers/video/aty/atyfb_base.c	2004-10-05 01:48:32.428449576 -0700
@@ -1174,8 +1174,8 @@ static int atyfb_mmap(struct fb_info *in
 		    ~(par->mmap_map[i].prot_mask);
 		pgprot_val(vma->vm_page_prot) |= par->mmap_map[i].prot_flag;
 
-		if (remap_page_range(vma, vma->vm_start + page, map_offset,
-				     map_size, vma->vm_page_prot))
+		if (remap_pfn_range(vma, vma->vm_start + page,
+			map_offset >> PAGE_SHIFT, map_size, vma->vm_page_prot))
 			return -EAGAIN;
 
 		page += map_size;
diff -puN drivers/video/gbefb.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/video/gbefb.c
--- 25/drivers/video/gbefb.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.369458544 -0700
+++ 25-akpm/drivers/video/gbefb.c	2004-10-05 01:48:32.429449424 -0700
@@ -1018,8 +1018,8 @@ static int gbefb_mmap(struct fb_info *in
 		else
 			phys_size = TILE_SIZE - offset;
 
-		if (remap_page_range
-		    (vma, addr, phys_addr, phys_size, vma->vm_page_prot))
+		if (remap_pfn_range(vma, addr, phys_addr >> PAGE_SHIFT,
+						phys_size, vma->vm_page_prot))
 			return -EAGAIN;
 
 		offset = 0;
diff -puN drivers/video/igafb.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/video/igafb.c
--- 25/drivers/video/igafb.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.370458392 -0700
+++ 25-akpm/drivers/video/igafb.c	2004-10-05 01:48:32.429449424 -0700
@@ -262,8 +262,8 @@ static int igafb_mmap(struct fb_info *in
 		pgprot_val(vma->vm_page_prot) &= ~(par->mmap_map[i].prot_mask);
 		pgprot_val(vma->vm_page_prot) |= par->mmap_map[i].prot_flag;
 
-		if (remap_page_range(vma, vma->vm_start + page, map_offset,
-				     map_size, vma->vm_page_prot))
+		if (remap_pfn_range(vma, vma->vm_start + page,
+			map_offset >> PAGE_SHIFT, map_size, vma->vm_page_prot))
 			return -EAGAIN;
 
 		page += map_size;
diff -puN drivers/video/sgivwfb.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range drivers/video/sgivwfb.c
--- 25/drivers/video/sgivwfb.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.372458088 -0700
+++ 25-akpm/drivers/video/sgivwfb.c	2004-10-05 01:48:32.430449272 -0700
@@ -719,8 +719,8 @@ static int sgivwfb_mmap(struct fb_info *
 	pgprot_val(vma->vm_page_prot) =
 	    pgprot_val(vma->vm_page_prot) | _PAGE_PCD;
 	vma->vm_flags |= VM_IO;
-	if (remap_page_range
-	    (vma, vma->vm_start, offset, size, vma->vm_page_prot))
+	if (remap_pfn_range(vma, vma->vm_start, offset >> PAGE_SHIFT,
+						size, vma->vm_page_prot))
 		return -EAGAIN;
 	vma->vm_file = file;
 	printk(KERN_DEBUG "sgivwfb: mmap framebuffer P(%lx)->V(%lx)\n",
diff -puN net/packet/af_packet.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range net/packet/af_packet.c
--- 25/net/packet/af_packet.c~convert-users-of-remap_page_range-under-drivers-and-net-to-use-remap_pfn_range	2004-10-05 01:48:32.373457936 -0700
+++ 25-akpm/net/packet/af_packet.c	2004-10-05 01:48:32.432448968 -0700
@@ -1729,7 +1729,8 @@ static int packet_mmap(struct file *file
 	start = vma->vm_start;
 	err = -EAGAIN;
 	for (i=0; i<po->pg_vec_len; i++) {
-		if (remap_page_range(vma, start, __pa(po->pg_vec[i]),
+		if (remap_pfn_range(vma, start,
+				     __pa(po->pg_vec[i]) >> PAGE_SHIFT,
 				     po->pg_vec_pages*PAGE_SIZE,
 				     vma->vm_page_prot))
 			goto out;
_
