Index: linux-2.6.18-rc4/mm/slabifier.c =================================================================== --- linux-2.6.18-rc4.orig/mm/slabifier.c 2006-08-16 14:25:18.449419152 -0700 +++ linux-2.6.18-rc4/mm/slabifier.c 2006-08-16 15:13:18.687428561 -0700 @@ -638,7 +638,12 @@ static struct page *get_object_page(cons { struct page * page; - page = virt_to_page(x); + if ((unsigned long)x >= VMALLOC_START && + (unsigned long)x < VMALLOC_END) + page = vmalloc_to_page(x); + else + page = virt_to_page(x); + if (unlikely(PageCompound(page))) page = (struct page *)page_private(page); Index: linux-2.6.18-rc4/mm/memory.c =================================================================== --- linux-2.6.18-rc4.orig/mm/memory.c 2006-08-06 11:20:11.000000000 -0700 +++ linux-2.6.18-rc4/mm/memory.c 2006-08-16 15:14:01.595912665 -0700 @@ -2432,7 +2432,7 @@ 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) +struct page * vmalloc_to_page(const void * vmalloc_addr) { unsigned long addr = (unsigned long) vmalloc_addr; struct page *page = NULL; Index: linux-2.6.18-rc4/include/linux/mm.h =================================================================== --- linux-2.6.18-rc4.orig/include/linux/mm.h 2006-08-06 11:20:11.000000000 -0700 +++ linux-2.6.18-rc4/include/linux/mm.h 2006-08-16 15:14:25.875663886 -0700 @@ -1013,7 +1013,7 @@ static inline unsigned long vma_pages(st } struct vm_area_struct *find_extend_vma(struct mm_struct *, unsigned long addr); -struct page *vmalloc_to_page(void *addr); +struct page *vmalloc_to_page(const void *addr); unsigned long vmalloc_to_pfn(void *addr); int remap_pfn_range(struct vm_area_struct *, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t);