|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC XEN v1 04/14] xen: arm: Implement XEN_DOMCTL_getpageframeinfo3.
This is used by the save/restore code.
On ARM we only have RAM (0) or not-RAM (XTAB) types.
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
xen/arch/arm/domctl.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/xen/arch/arm/domctl.c b/xen/arch/arm/domctl.c
index d42b2bf..d3459ee 100644
--- a/xen/arch/arm/domctl.c
+++ b/xen/arch/arm/domctl.c
@@ -133,6 +133,55 @@ long arch_do_domctl(struct xen_domctl *domctl, struct
domain *d,
rc = 0;
break;
}
+
+ case XEN_DOMCTL_getpageframeinfo3:
+ {
+ unsigned int i;
+ unsigned int num = domctl->u.getpageframeinfo3.num;
+ XEN_GUEST_HANDLE_64(xen_pfn_t) array =
domctl->u.getpageframeinfo3.array;
+
+ if ( unlikely(num > 1024) ||
+ unlikely(num != domctl->u.getpageframeinfo3.num) )
+ {
+ rc = -E2BIG;
+ break;
+ }
+
+ for ( i = 0; i < num; ++i )
+ {
+ xen_pfn_t gfn = 0, type = 0;
+ struct page_info *page;
+ p2m_type_t t;
+
+ if ( copy_from_guest_offset(&gfn, array, i, 1) )
+ {
+ rc = -EFAULT;
+ break;
+ }
+
+ page = get_page_from_gfn(d, gfn, &t, P2M_ALLOC);
+
+ if ( unlikely(!page) ||
+ unlikely(is_xen_heap_page(page)) )
+ type = XEN_DOMCTL_PFINFO_XTAB;
+ else
+ type = 0; /* Just regular RAM */
+
+ if ( page )
+ put_page(page);
+
+ if ( copy_to_guest_offset(array, i, &type, 1) )
+ {
+ rc = -EFAULT;
+ break;
+ }
+ }
+
+ rc = 0;
+
+ break;
+ }
+
default:
rc = subarch_do_domctl(domctl, d, u_domctl);
--
2.6.1
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |