summaryrefslogtreecommitdiff
path: root/mm/memory.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2002-02-19 18:10:45 +0100
committerIngo Molnar <mingo@elte.hu>2002-02-19 18:10:45 +0100
commit094686d30d5f58780a1efda2ade5cb0d18e25f82 (patch)
tree566377cdfb4fc49fee8dc0a2f3c066b70cac37dc /mm/memory.c
parentf3ebe6543ce9406433bb31cfdd8efbe79924a915 (diff)
- the new vmalloc_to_page() interface should be used to determine the physical page a given vmalloc() area virtual address is mapped to.
Diffstat (limited to 'mm/memory.c')
-rw-r--r--mm/memory.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/mm/memory.c b/mm/memory.c
index 4a2c29ee7744..479fc845a351 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1440,3 +1440,27 @@ int make_pages_present(unsigned long addr, unsigned long end)
len, write, 0, NULL, NULL);
return ret == len ? 0 : -1;
}
+
+/*
+ * Map a vmalloc()-space virtual address to the physical page.
+ */
+struct page * vmalloc_to_page(pgd_t *pgd, unsigned long addr)
+{
+ struct page *page = NULL;
+ pmd_t *pmd;
+ pte_t *ptep, pte;
+
+ if (!pgd_none(*pgd)) {
+ pmd = pmd_offset(pgd, addr);
+ if (!pmd_none(*pmd)) {
+ preempt_disable();
+ ptep = pte_offset_map(pmd, addr);
+ pte = *ptep;
+ if (pte_present(pte))
+ page = pte_page(pte);
+ pte_unmap(ptep);
+ preempt_enable();
+ }
+ }
+ return page;
+}