Index: linux-2.4.19-pre1/mm/memory.c =================================================================== --- linux-2.4.19-pre1.orig/mm/memory.c 2004-01-14 01:11:29.000000000 +0300 +++ linux-2.4.19-pre1/mm/memory.c 2004-01-14 01:54:44.000000000 +0300 @@ -1470,3 +1470,25 @@ len, write, 0, NULL, NULL); return ret == len ? 0 : -1; } + +struct page * vmalloc_to_page(void * vmalloc_addr) +{ + unsigned long addr = (unsigned long) vmalloc_addr; + struct page *page = NULL; + pmd_t *pmd; + pte_t *ptep, pte; + pgd_t *pgd; + + pgd = pgd_offset_k(addr); + if (!pgd_none(*pgd)) { + pmd = pmd_offset(pgd, addr); + if (!pmd_none(*pmd)) { + ptep = pte_offset(pmd, addr); + pte = *ptep; + if (pte_present(pte)) { + page = pte_page(pte); + } + } + } + return page; +} Index: linux-2.4.19-pre1/kernel/ksyms.c =================================================================== --- linux-2.4.19-pre1.orig/kernel/ksyms.c 2004-01-14 01:22:28.000000000 +0300 +++ linux-2.4.19-pre1/kernel/ksyms.c 2004-01-14 01:51:55.000000000 +0300 @@ -112,6 +112,8 @@ EXPORT_SYMBOL(kfree); EXPORT_SYMBOL(vfree); EXPORT_SYMBOL(__vmalloc); +extern struct page * vmalloc_to_page(void *addr); +EXPORT_SYMBOL(vmalloc_to_page); EXPORT_SYMBOL(mem_map); EXPORT_SYMBOL(remap_page_range); EXPORT_SYMBOL(max_mapnr);