diff -prauN pgcl-2.6.0-test11-4/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl pgcl-2.6.0-test11-5/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl --- pgcl-2.6.0-test11-4/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl 2003-11-26 12:43:30.000000000 -0800 +++ pgcl-2.6.0-test11-5/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl 2003-11-29 00:43:47.000000000 -0800 @@ -4938,7 +4938,7 @@ struct _snd_pcm_runtime { unsigned long offset) { void *pageptr = substream->runtime->dma_area + offset; - return vmalloc_to_page(pageptr); + return pfn_to_page(vmalloc_to_pfn(pageptr)); } ]]> diff -prauN pgcl-2.6.0-test11-4/arch/ia64/kernel/perfmon.c pgcl-2.6.0-test11-5/arch/ia64/kernel/perfmon.c --- pgcl-2.6.0-test11-4/arch/ia64/kernel/perfmon.c 2003-11-26 12:45:37.000000000 -0800 +++ pgcl-2.6.0-test11-5/arch/ia64/kernel/perfmon.c 2003-11-29 00:42:23.000000000 -0800 @@ -567,12 +567,12 @@ pfm_clear_task_notify(void) static inline void pfm_reserve_page(unsigned long a) { - SetPageReserved(vmalloc_to_page((void *)a)); + SetPageReserved(pfn_to_page(vmalloc_to_pfn((void *)a))); } static inline void pfm_unreserve_page(unsigned long a) { - ClearPageReserved(vmalloc_to_page((void*)a)); + ClearPageReserved(pfn_to_page(vmalloc_to_pfn((void*)a))); } static inline int diff -prauN pgcl-2.6.0-test11-4/drivers/char/drm/drm_bufs.h pgcl-2.6.0-test11-5/drivers/char/drm/drm_bufs.h --- pgcl-2.6.0-test11-4/drivers/char/drm/drm_bufs.h 2003-11-26 12:43:25.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/char/drm/drm_bufs.h 2003-11-28 23:52:33.000000000 -0800 @@ -120,7 +120,7 @@ int DRM(addmap)( struct inode *inode, st } DRM_DEBUG( "offset = 0x%08lx, size = 0x%08lx, type = %d\n", map->offset, map->size, map->type ); - if ( (map->offset & (~PAGE_MASK)) || (map->size & (~PAGE_MASK)) ) { + if ((map->offset & ~MMUPAGE_MASK) || (map->size & ~MMUPAGE_MASK)) { DRM(free)( map, sizeof(*map), DRM_MEM_MAPS ); return -EINVAL; } @@ -392,7 +392,7 @@ int DRM(addbufs_agp)( struct inode *inod size = 1 << order; alignment = (request.flags & _DRM_PAGE_ALIGN) - ? PAGE_ALIGN(size) : size; + ? MMUPAGE_ALIGN(size) : size; page_order = order - PAGE_SHIFT > 0 ? order - PAGE_SHIFT : 0; total = PAGE_SIZE << page_order; @@ -572,7 +572,7 @@ int DRM(addbufs_pci)( struct inode *inod if ( dev->queue_count ) return -EBUSY; /* Not while in use */ alignment = (request.flags & _DRM_PAGE_ALIGN) - ? PAGE_ALIGN(size) : size; + ? MMUPAGE_ALIGN(size) : size; page_order = order - PAGE_SHIFT > 0 ? order - PAGE_SHIFT : 0; total = PAGE_SIZE << page_order; @@ -800,7 +800,7 @@ int DRM(addbufs_sg)( struct inode *inode size = 1 << order; alignment = (request.flags & _DRM_PAGE_ALIGN) - ? PAGE_ALIGN(size) : size; + ? MMUPAGE_ALIGN(size) : size; page_order = order - PAGE_SHIFT > 0 ? order - PAGE_SHIFT : 0; total = PAGE_SIZE << page_order; diff -prauN pgcl-2.6.0-test11-4/drivers/char/drm/drm_scatter.h pgcl-2.6.0-test11-5/drivers/char/drm/drm_scatter.h --- pgcl-2.6.0-test11-4/drivers/char/drm/drm_scatter.h 2003-11-26 12:44:30.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/char/drm/drm_scatter.h 2003-11-29 00:33:19.000000000 -0800 @@ -137,7 +137,7 @@ int DRM(sg_alloc)( struct inode *inode, DRM_DEBUG( "sg alloc virtual = %p\n", entry->virtual ); for ( i = entry->handle, j = 0 ; j < pages ; i += PAGE_SIZE, j++ ) { - entry->pagelist[j] = vmalloc_to_page((void *)i); + entry->pagelist[j] = pfn_to_page(vmalloc_to_pfn((void *)i)); if (!entry->pagelist[j]) goto failed; SetPageReserved(entry->pagelist[j]); diff -prauN pgcl-2.6.0-test11-4/drivers/char/drm/drm_vm.h pgcl-2.6.0-test11-5/drivers/char/drm/drm_vm.h --- pgcl-2.6.0-test11-4/drivers/char/drm/drm_vm.h 2003-11-28 19:48:16.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/char/drm/drm_vm.h 2003-11-29 00:33:47.000000000 -0800 @@ -166,7 +166,7 @@ struct page *DRM(vm_shm_nopage)(struct v offset = address - vma->vm_start; i = (unsigned long)map->handle + offset; - page = vmalloc_to_page((void *)i); + page = pfn_to_page(vmalloc_to_pfn((void *)i)); if (!page) return NOPAGE_OOM; get_page(page); diff -prauN pgcl-2.6.0-test11-4/drivers/ieee1394/dma.c pgcl-2.6.0-test11-5/drivers/ieee1394/dma.c --- pgcl-2.6.0-test11-4/drivers/ieee1394/dma.c 2003-11-26 12:44:12.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/ieee1394/dma.c 2003-11-29 00:41:54.000000000 -0800 @@ -99,7 +99,7 @@ int dma_region_alloc(struct dma_region * for (i = 0; i < dma->n_pages; i++) { unsigned long va = (unsigned long) dma->kvirt + i * PAGE_SIZE; - dma->sglist[i].page = vmalloc_to_page((void *)va); + dma->sglist[i].page = pfn_to_page(vmalloc_to_pfn((void *)va)); dma->sglist[i].length = PAGE_SIZE; } @@ -204,7 +204,7 @@ dma_region_pagefault(struct vm_area_stru offset = address - area->vm_start; kernel_virt_addr = (unsigned long) dma->kvirt + offset; - ret = vmalloc_to_page((void*) kernel_virt_addr); + ret = pfn_to_page(vmalloc_to_pfn((void*) kernel_virt_addr)); get_page(ret); out: return ret; diff -prauN pgcl-2.6.0-test11-4/drivers/media/common/saa7146_core.c pgcl-2.6.0-test11-5/drivers/media/common/saa7146_core.c --- pgcl-2.6.0-test11-4/drivers/media/common/saa7146_core.c 2003-11-26 12:44:56.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/media/common/saa7146_core.c 2003-11-29 00:32:57.000000000 -0800 @@ -60,7 +60,7 @@ static struct scatterlist* vmalloc_to_sg return NULL; memset(sglist,0,sizeof(struct scatterlist)*nr_pages); for (i = 0; i < nr_pages; i++, virt += PAGE_SIZE) { - pg = vmalloc_to_page(virt); + pg = pfn_to_page(vmalloc_to_pfn(virt)); if (NULL == pg) goto err; if (PageHighMem(pg)) diff -prauN pgcl-2.6.0-test11-4/drivers/media/video/cpia.c pgcl-2.6.0-test11-5/drivers/media/video/cpia.c --- pgcl-2.6.0-test11-4/drivers/media/video/cpia.c 2003-11-26 12:44:53.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/media/video/cpia.c 2003-11-29 00:32:33.000000000 -0800 @@ -213,7 +213,7 @@ static inline unsigned long kvirt_to_pa( { unsigned long kva, ret; - kva = (unsigned long) page_address(vmalloc_to_page((void *)adr)); + kva = (unsigned long)page_address(pfn_to_page(vmalloc_to_pfn((void *)adr))); kva |= adr & (PAGE_SIZE-1); /* restore the offset */ ret = __pa(kva); return ret; @@ -232,7 +232,7 @@ static void *rvmalloc(unsigned long size memset(mem, 0, size); /* Clear the ram out, no junk to the user */ adr = (unsigned long) mem; while (size > 0) { - SetPageReserved(vmalloc_to_page((void *)adr)); + SetPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } @@ -249,7 +249,7 @@ static void rvfree(void *mem, unsigned l adr = (unsigned long) mem; while ((long) size > 0) { - ClearPageReserved(vmalloc_to_page((void *)adr)); + ClearPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } diff -prauN pgcl-2.6.0-test11-4/drivers/media/video/meye.c pgcl-2.6.0-test11-5/drivers/media/video/meye.c --- pgcl-2.6.0-test11-4/drivers/media/video/meye.c 2003-11-26 12:44:25.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/media/video/meye.c 2003-11-29 00:31:01.000000000 -0800 @@ -122,7 +122,7 @@ static inline int meye_emptyq(struct mey 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 = (unsigned long)page_address(pfn_to_page(vmalloc_to_pfn((void *)adr))); kva |= adr & (PAGE_SIZE-1); /* restore the offset */ ret = __pa(kva); return ret; @@ -138,7 +138,7 @@ static void *rvmalloc(unsigned long size memset(mem, 0, size); /* Clear the ram out, no junk to the user */ adr = (unsigned long)mem; while (size > 0) { - SetPageReserved(vmalloc_to_page((void *)adr)); + SetPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } @@ -152,7 +152,7 @@ static void rvfree(void * mem, unsigned if (mem) { adr = (unsigned long) mem; while ((long) size > 0) { - ClearPageReserved(vmalloc_to_page((void *)adr)); + ClearPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } diff -prauN pgcl-2.6.0-test11-4/drivers/media/video/video-buf.c pgcl-2.6.0-test11-5/drivers/media/video/video-buf.c --- pgcl-2.6.0-test11-4/drivers/media/video/video-buf.c 2003-11-28 21:39:45.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/media/video/video-buf.c 2003-11-29 00:29:59.000000000 -0800 @@ -55,7 +55,7 @@ videobuf_vmalloc_to_sg(unsigned char *vi return NULL; memset(sglist,0,sizeof(struct scatterlist)*nr_pages); for (i = 0; i < nr_pages; i++, virt += PAGE_SIZE) { - pg = vmalloc_to_page(virt); + pg = pfn_to_page(vmalloc_to_pfn(virt)); if (NULL == pg) goto err; if (PageHighMem(pg)) diff -prauN pgcl-2.6.0-test11-4/drivers/usb/media/ov511.c pgcl-2.6.0-test11-5/drivers/usb/media/ov511.c --- pgcl-2.6.0-test11-4/drivers/usb/media/ov511.c 2003-11-26 12:43:31.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/usb/media/ov511.c 2003-11-29 00:37:05.000000000 -0800 @@ -332,7 +332,7 @@ kvirt_to_pa(unsigned long adr) { unsigned long kva, ret; - kva = (unsigned long) page_address(vmalloc_to_page((void *)adr)); + kva = (unsigned long)page_address(pfn_to_page(vmalloc_to_pfn((void *)adr))); kva |= adr & (PAGE_SIZE-1); /* restore the offset */ ret = __pa(kva); return ret; @@ -352,7 +352,7 @@ rvmalloc(unsigned long size) memset(mem, 0, size); /* Clear the ram out, no junk to the user */ adr = (unsigned long) mem; while (size > 0) { - SetPageReserved(vmalloc_to_page((void *)adr)); + SetPageReserved(pfn_to_page(vmalloc_to_pfn(((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } @@ -370,7 +370,7 @@ rvfree(void *mem, unsigned long size) adr = (unsigned long) mem; while ((long) size > 0) { - ClearPageReserved(vmalloc_to_page((void *)adr)); + ClearPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } diff -prauN pgcl-2.6.0-test11-4/drivers/usb/media/pwc-if.c pgcl-2.6.0-test11-5/drivers/usb/media/pwc-if.c --- pgcl-2.6.0-test11-4/drivers/usb/media/pwc-if.c 2003-11-26 12:45:07.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/usb/media/pwc-if.c 2003-11-29 00:40:43.000000000 -0800 @@ -195,7 +195,7 @@ static inline unsigned long kvirt_to_pa( { unsigned long kva, ret; - kva = (unsigned long) page_address(vmalloc_to_page((void *)adr)); + kva = (unsigned long)page_address(pfn_to_page(vmalloc_to_pfn((void *)adr))); kva |= adr & (PAGE_SIZE-1); /* restore the offset */ ret = __pa(kva); return ret; @@ -214,7 +214,7 @@ static void * rvmalloc(unsigned long siz adr=(unsigned long) mem; while (size > 0) { - SetPageReserved(vmalloc_to_page((void *)adr)); + SetPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr+=PAGE_SIZE; size-=PAGE_SIZE; } @@ -231,7 +231,7 @@ static void rvfree(void * mem, unsigned adr=(unsigned long) mem; while ((long) size > 0) { - ClearPageReserved(vmalloc_to_page((void *)adr)); + ClearPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr+=PAGE_SIZE; size-=PAGE_SIZE; } diff -prauN pgcl-2.6.0-test11-4/drivers/usb/media/se401.c pgcl-2.6.0-test11-5/drivers/usb/media/se401.c --- pgcl-2.6.0-test11-4/drivers/usb/media/se401.c 2003-11-26 12:43:30.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/usb/media/se401.c 2003-11-29 00:34:30.000000000 -0800 @@ -73,7 +73,7 @@ static inline unsigned long kvirt_to_pa( { unsigned long kva, ret; - kva = (unsigned long) page_address(vmalloc_to_page((void *)adr)); + kva = (unsigned long)page_address(pfn_to_page(vmalloc_to_pfn((void *)adr))); kva |= adr & (PAGE_SIZE-1); /* restore the offset */ ret = __pa(kva); return ret; @@ -92,7 +92,7 @@ static void *rvmalloc(unsigned long size memset(mem, 0, size); /* Clear the ram out, no junk to the user */ adr = (unsigned long) mem; while (size > 0) { - SetPageReserved(vmalloc_to_page((void *)adr)); + SetPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } @@ -109,7 +109,7 @@ static void rvfree(void *mem, unsigned l adr = (unsigned long) mem; while ((long) size > 0) { - ClearPageReserved(vmalloc_to_page((void *)adr)); + ClearPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } diff -prauN pgcl-2.6.0-test11-4/drivers/usb/media/stv680.c pgcl-2.6.0-test11-5/drivers/usb/media/stv680.c --- pgcl-2.6.0-test11-4/drivers/usb/media/stv680.c 2003-11-26 12:44:45.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/usb/media/stv680.c 2003-11-29 00:39:09.000000000 -0800 @@ -126,7 +126,7 @@ static inline unsigned long kvirt_to_pa { unsigned long kva, ret; - kva = (unsigned long) page_address(vmalloc_to_page((void *)adr)); + kva = (unsigned long)page_address(pfn_to_page(vmalloc_to_pfn((void *)adr))); kva |= adr & (PAGE_SIZE-1); /* restore the offset */ ret = __pa(kva); return ret; @@ -145,7 +145,7 @@ static void *rvmalloc (unsigned long siz memset (mem, 0, size); /* Clear the ram out, no junk to the user */ adr = (unsigned long) mem; while (size > 0) { - SetPageReserved(vmalloc_to_page((void *)adr)); + SetPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } @@ -161,7 +161,7 @@ static void rvfree (void *mem, unsigned adr = (unsigned long) mem; while ((long) size > 0) { - ClearPageReserved(vmalloc_to_page((void *)adr)); + ClearPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } diff -prauN pgcl-2.6.0-test11-4/drivers/usb/media/vicam.c pgcl-2.6.0-test11-5/drivers/usb/media/vicam.c --- pgcl-2.6.0-test11-4/drivers/usb/media/vicam.c 2003-11-26 12:43:32.000000000 -0800 +++ pgcl-2.6.0-test11-5/drivers/usb/media/vicam.c 2003-11-29 00:38:33.000000000 -0800 @@ -355,7 +355,7 @@ static unsigned long kvirt_to_pa(unsigne { unsigned long kva, ret; - kva = (unsigned long) page_address(vmalloc_to_page((void *)adr)); + kva = (unsigned long)page_address(vmalloc_to_pfn((void *)adr))); kva |= adr & (PAGE_SIZE-1); /* restore the offset */ ret = __pa(kva); return ret; @@ -381,7 +381,7 @@ static void *rvmalloc(unsigned long size memset(mem, 0, size); /* Clear the ram out, no junk to the user */ adr = (unsigned long) mem; while (size > 0) { - SetPageReserved(vmalloc_to_page((void *)adr)); + SetPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } @@ -398,7 +398,7 @@ static void rvfree(void *mem, unsigned l adr = (unsigned long) mem; while ((long) size > 0) { - ClearPageReserved(vmalloc_to_page((void *)adr)); + ClearPageReserved(pfn_to_page(vmalloc_to_pfn((void *)adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } diff -prauN pgcl-2.6.0-test11-4/fs/xfs/pagebuf/page_buf.c pgcl-2.6.0-test11-5/fs/xfs/pagebuf/page_buf.c --- pgcl-2.6.0-test11-4/fs/xfs/pagebuf/page_buf.c 2003-11-26 12:42:54.000000000 -0800 +++ pgcl-2.6.0-test11-5/fs/xfs/pagebuf/page_buf.c 2003-11-29 00:43:26.000000000 -0800 @@ -850,7 +850,7 @@ mem_to_page( ((unsigned long)addr >= VMALLOC_END)) { return virt_to_page(addr); } else { - return vmalloc_to_page(addr); + return pfn_to_page(vmalloc_to_pfn(addr)); } } diff -prauN pgcl-2.6.0-test11-4/include/asm-i386/pgtable-2level.h pgcl-2.6.0-test11-5/include/asm-i386/pgtable-2level.h --- pgcl-2.6.0-test11-4/include/asm-i386/pgtable-2level.h 2003-11-27 21:55:19.000000000 -0800 +++ pgcl-2.6.0-test11-5/include/asm-i386/pgtable-2level.h 2003-11-29 00:22:03.000000000 -0800 @@ -57,7 +57,7 @@ static inline int pgd_present(pgd_t pgd) */ #define set_pte(pteptr, pteval) \ do { \ - pte_t __set_pte_val__ = pteval; \ + pte_t __set_pte_val__ = (pteval); \ bad_pte_check(__set_pte_val__); \ *(pteptr) = __set_pte_val__; \ } while (0) @@ -133,8 +133,7 @@ static inline pmd_t * pmd_offset(pgd_t * #define __pte_to_pgoff(pte) \ ({ \ - pte_t ___pte_to_pgoff_pte___ = pte; \ - BUG_ON(!(___pte_to_pgoff_pte___.pte_low & ~_PAGE_FILE)); \ + pte_t ___pte_to_pgoff_pte___ = (pte); \ ((___pte_to_pgoff_pte___.pte_low >> 1) & 0x1f) \ | ((___pte_to_pgoff_pte___.pte_low >> 8) << 5); \ }) @@ -142,10 +141,9 @@ static inline pmd_t * pmd_offset(pgd_t * #define __pgoff_to_pte(off) \ ({ \ unsigned long __pgoff_to_pte_pteval__; \ - unsigned long __pgoff_to_pte_off__ = off; \ + unsigned long __pgoff_to_pte_off__ = (off); \ __pgoff_to_pte_pteval__ = ((__pgoff_to_pte_off__ & 0x1f) << 1) \ | ((__pgoff_to_pte_off__ >> 5) << 8); \ - BUG_ON(!__pgoff_to_pte_pteval__); \ (pte_t) { __pgoff_to_pte_pteval__ | _PAGE_FILE }; \ }) diff -prauN pgcl-2.6.0-test11-4/include/linux/mm.h pgcl-2.6.0-test11-5/include/linux/mm.h --- pgcl-2.6.0-test11-4/include/linux/mm.h 2003-11-27 22:15:53.000000000 -0800 +++ pgcl-2.6.0-test11-5/include/linux/mm.h 2003-11-29 00:42:40.000000000 -0800 @@ -697,7 +697,7 @@ static inline unsigned long vma_suboffse & (MMUPAGE_MASK - PAGE_MASK); } -extern struct page * vmalloc_to_page(void *addr); +unsigned long vmalloc_to_pfn(void *); unsigned long follow_page(struct mm_struct *mm, unsigned long address, int write); extern int remap_page_range(struct vm_area_struct *vma, unsigned long from, diff -prauN pgcl-2.6.0-test11-4/include/media/saa7146.h pgcl-2.6.0-test11-5/include/media/saa7146.h --- pgcl-2.6.0-test11-4/include/media/saa7146.h 2003-11-26 12:42:51.000000000 -0800 +++ pgcl-2.6.0-test11-5/include/media/saa7146.h 2003-11-29 00:42:58.000000000 -0800 @@ -13,7 +13,7 @@ #include /* for accessing devices */ #include #include /* for vmalloc() */ -#include /* for vmalloc_to_page() */ +#include /* for vmalloc_to_pfn() */ /* ugly, but necessary to build the dvb stuff under 2.4. */ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) diff -prauN pgcl-2.6.0-test11-4/mm/memory.c pgcl-2.6.0-test11-5/mm/memory.c --- pgcl-2.6.0-test11-4/mm/memory.c 2003-11-28 20:52:50.000000000 -0800 +++ pgcl-2.6.0-test11-5/mm/memory.c 2003-11-29 00:49:53.000000000 -0800 @@ -1767,10 +1767,9 @@ int make_pages_present(unsigned long add /* * Map a vmalloc()-space virtual address to the physical page. */ -struct page * vmalloc_to_page(void * vmalloc_addr) +unsigned long vmalloc_to_pfn(void *vmalloc_addr) { - unsigned long addr = (unsigned long) vmalloc_addr; - struct page *page = NULL; + unsigned long pfn = 0, addr = (unsigned long)vmalloc_addr; pgd_t *pgd = pgd_offset_k(addr); pmd_t *pmd; pte_t *ptep, pte; @@ -1782,12 +1781,11 @@ struct page * vmalloc_to_page(void * vma ptep = pte_offset_map(pmd, addr); pte = *ptep; if (pte_present(pte)) - page = pte_page(pte); + pfn = pte_pfn(pte); pte_unmap(ptep); preempt_enable(); } } - return page; + return pfn; } - -EXPORT_SYMBOL(vmalloc_to_page); +EXPORT_SYMBOL(vmalloc_to_pfn); diff -prauN pgcl-2.6.0-test11-4/mm/nommu.c pgcl-2.6.0-test11-5/mm/nommu.c --- pgcl-2.6.0-test11-4/mm/nommu.c 2003-11-26 12:45:28.000000000 -0800 +++ pgcl-2.6.0-test11-5/mm/nommu.c 2003-11-29 00:45:43.000000000 -0800 @@ -132,9 +132,9 @@ void *__vmalloc(unsigned long size, int return kmalloc(size, gfp_mask & ~__GFP_HIGHMEM); } -struct page * vmalloc_to_page(void *addr) +unsigned long vmalloc_to_pfn(void *addr) { - return virt_to_page(addr); + return __pa((unsigned long)addr)/MMUPAGE_SIZE; } long vread(char *buf, char *addr, unsigned long count) diff -prauN pgcl-2.6.0-test11-4/mm/rmap.c pgcl-2.6.0-test11-5/mm/rmap.c --- pgcl-2.6.0-test11-4/mm/rmap.c 2003-11-27 21:55:21.000000000 -0800 +++ pgcl-2.6.0-test11-5/mm/rmap.c 2003-11-29 00:20:35.000000000 -0800 @@ -499,6 +499,7 @@ static int try_to_unmap_one(struct page struct mm_struct * mm = ptep_to_mm(ptep); struct vm_area_struct * vma; pte_t pte; + unsigned long f_pgoff, suboff; int ret; if (!mm) @@ -531,28 +532,27 @@ static int try_to_unmap_one(struct page flush_cache_page(vma, address); pte = ptep_get_and_clear(ptep); flush_tlb_page(vma, address); + suboff = pte_pfn(pte) % PAGE_CACHE_MMUCOUNT; + f_pgoff = PAGE_CACHE_MMUCOUNT*page->index + suboff; if (PageSwapCache(page)) { /* * Store the swap location in the pte. * See handle_pte_fault() ... */ - swp_entry_t entry = { .val = page->index*PAGE_CACHE_MMUCOUNT - + (pte_pfn(pte)%PAGE_CACHE_MMUCOUNT) }; + swp_entry_t entry = { .val = f_pgoff }; swap_duplicate(entry); set_pte(ptep, swp_entry_to_pte(entry)); BUG_ON(pte_file(*ptep)); } else { unsigned long pgidx; + /* * If a nonlinear mapping then store the file page offset * in the pte. */ pgidx = (address - vma->vm_start)/MMUPAGE_SIZE + vma->vm_pgoff; - if (page->index != pgidx/PAGE_CACHE_MMUCOUNT) { - unsigned long f_pgoff; - f_pgoff = PAGE_CACHE_MMUCOUNT*page->index - + (pte_pfn(pte) % PAGE_CACHE_MMUCOUNT); + if (pgidx != f_pgoff) { set_pte(ptep, pgoff_to_pte(f_pgoff)); BUG_ON(!pte_file(*ptep)); } diff -prauN pgcl-2.6.0-test11-4/sound/drivers/vx/vx_pcm.c pgcl-2.6.0-test11-5/sound/drivers/vx/vx_pcm.c --- pgcl-2.6.0-test11-4/sound/drivers/vx/vx_pcm.c 2003-11-26 12:42:57.000000000 -0800 +++ pgcl-2.6.0-test11-5/sound/drivers/vx/vx_pcm.c 2003-11-29 00:44:02.000000000 -0800 @@ -65,7 +65,7 @@ static struct page *snd_pcm_get_vmalloc_page(snd_pcm_substream_t *subs, unsigned long offset) { void *pageptr = subs->runtime->dma_area + offset; - return vmalloc_to_page(pageptr); + return pfn_to_page(vmalloc_to_pfn(pageptr)); } /*