|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH 73/84] x86/mm: Move vmap_to_mfn() to mm.c and rename to virt_to_mfn_walk().
From: Hongyan Xia <hongyax@xxxxxxxxxx>
Obviously, vmap_to_mfn is a generic mechanism to walk the page table to
find the mfn, not vmap specific. Also the difference from virt_to_mfn()
is that it actually walks the page table instead of relying on a direct
map.
Signed-off-by: Hongyan Xia <hongyax@xxxxxxxxxx>
---
xen/arch/x86/mm.c | 13 +++++++++++++
xen/common/vmap.c | 15 +--------------
xen/include/asm-x86/mm.h | 2 ++
xen/include/xen/vmap.h | 3 ---
4 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index f30b5b3951..ab760ecc1f 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -5056,6 +5056,19 @@ l1_pgentry_t *virt_to_xen_l1e(unsigned long v)
return pl1e;
}
+unsigned long virt_to_mfn_walk(void *va)
+{
+ l1_pgentry_t *pl1e = virt_to_xen_l1e((unsigned long)(va));
+ unsigned long ret = l1e_get_pfn(*pl1e);
+ unmap_xen_pagetable(pl1e);
+ return ret;
+}
+
+struct page_info *virt_to_page_walk(void *va)
+{
+ return mfn_to_page(_mfn(virt_to_mfn_walk(va)));
+}
+
/* Convert to from superpage-mapping flags for map_pages_to_xen(). */
#define l1f_to_lNf(f) (((f) & _PAGE_PRESENT) ? ((f) | _PAGE_PSE) : (f))
#define lNf_to_l1f(f) (((f) & _PAGE_PRESENT) ? ((f) & ~_PAGE_PSE) : (f))
diff --git a/xen/common/vmap.c b/xen/common/vmap.c
index fcdb8495c8..4323c6811f 100644
--- a/xen/common/vmap.c
+++ b/xen/common/vmap.c
@@ -19,19 +19,6 @@ static unsigned int __read_mostly vm_end[VMAP_REGION_NR];
/* lowest known clear bit in the bitmap */
static unsigned int vm_low[VMAP_REGION_NR];
-mfn_t vmap_to_mfn(void *va)
-{
- l1_pgentry_t *pl1e = virt_to_xen_l1e((unsigned long)(va));
- mfn_t ret = _mfn(l1e_get_pfn(*pl1e));
- unmap_xen_pagetable(pl1e);
- return ret;
-}
-
-struct page_info *vmap_to_page(void *va)
-{
- return mfn_to_page(vmap_to_mfn(va));
-}
-
void __init vm_init_type(enum vmap_region type, void *start, void *end)
{
unsigned int i, nr;
@@ -332,7 +319,7 @@ void vfree(void *va)
for ( i = 0; i < pages; i++ )
{
- struct page_info *page = vmap_to_page(va + i * PAGE_SIZE);
+ struct page_info *page = virt_to_page_walk(va + i * PAGE_SIZE);
ASSERT(page);
page_list_add(page, &pg_list);
diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
index a4b3c9b7af..76ba56bdc3 100644
--- a/xen/include/asm-x86/mm.h
+++ b/xen/include/asm-x86/mm.h
@@ -643,6 +643,8 @@ void free_xen_pagetable(mfn_t mfn);
} while (0)
l1_pgentry_t *virt_to_xen_l1e(unsigned long v);
+unsigned long virt_to_mfn_walk(void *va);
+struct page_info *virt_to_page_walk(void *va);
DECLARE_PER_CPU(mfn_t, root_pgt_mfn);
diff --git a/xen/include/xen/vmap.h b/xen/include/xen/vmap.h
index 3d69727a9d..369560e620 100644
--- a/xen/include/xen/vmap.h
+++ b/xen/include/xen/vmap.h
@@ -23,9 +23,6 @@ void *vmalloc_xen(size_t size);
void *vzalloc(size_t size);
void vfree(void *va);
-mfn_t vmap_to_mfn(void *va);
-struct page_info *vmap_to_page(void *va);
-
void __iomem *ioremap(paddr_t, size_t);
static inline void iounmap(void __iomem *va)
--
2.17.1
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |