On Wed, 9 Dec 2015, Ian Campbell wrote: > 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.campb...@citrix.com>
Acked-by: Stefano Stabellini <stefano.stabell...@eu.citrix.com> > 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) ) I realize that this check is the same as x86, but where is the 1024 limitation coming from? If it is part of the interface it would be nice to add it to the comment in xen/include/public/domctl.h. The implementation below looks correct. > + { > + 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@lists.xen.org http://lists.xen.org/xen-devel