On Mon, Dec 08, 2014 at 03:25:12PM +0800, Chen, Tiejun wrote: > On 2014/12/3 3:50, Konrad Rzeszutek Wilk wrote: > >On Mon, Dec 01, 2014 at 05:24:23PM +0800, Tiejun Chen wrote: > >>We will introduce that hypercall xc_reserved_device_memory_map > >>approach to libxc. > >> > >>Signed-off-by: Tiejun Chen <tiejun.c...@intel.com> > >>--- > >> tools/libxc/include/xenctrl.h | 5 +++++ > >> tools/libxc/xc_domain.c | 30 ++++++++++++++++++++++++++++++ > >> 2 files changed, 35 insertions(+) > >> > >>diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h > >>index 84012fe..a3aeac3 100644 > >>--- a/tools/libxc/include/xenctrl.h > >>+++ b/tools/libxc/include/xenctrl.h > >>@@ -1294,6 +1294,11 @@ int xc_domain_set_memory_map(xc_interface *xch, > >> int xc_get_machine_memory_map(xc_interface *xch, > >> struct e820entry entries[], > >> uint32_t max_entries); > >>+ > >>+int xc_reserved_device_memory_map(xc_interface *xch, > >>+ uint32_t dom, > >>+ struct xen_reserved_device_memory > >>entries[], > >>+ uint32_t *max_entries); > >> #endif > >> int xc_domain_set_time_offset(xc_interface *xch, > >> uint32_t domid, > >>diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c > >>index 7fd43e9..09fd988 100644 > >>--- a/tools/libxc/xc_domain.c > >>+++ b/tools/libxc/xc_domain.c > >>@@ -679,6 +679,36 @@ int xc_domain_set_memory_map(xc_interface *xch, > >> > >> return rc; > >> } > >>+ > >>+int xc_reserved_device_memory_map(xc_interface *xch, > >>+ uint32_t domid, > >>+ struct xen_reserved_device_memory > >>entries[], > >>+ uint32_t *max_entries) > >>+{ > >>+ int rc; > >>+ struct xen_reserved_device_memory_map xrdmmap = { > >>+ .domid = domid, > >>+ .nr_entries = *max_entries > >>+ }; > >>+ DECLARE_HYPERCALL_BOUNCE(entries, > >>+ sizeof(struct xen_reserved_device_memory) * > >>+ *max_entries, XC_HYPERCALL_BUFFER_BOUNCE_OUT); > >>+ > >>+ if ( xc_hypercall_bounce_pre(xch, entries) ) > >>+ return -1; > >>+ > >>+ set_xen_guest_handle(xrdmmap.buffer, entries); > >>+ > >>+ rc = do_memory_op(xch, XENMEM_reserved_device_memory_map, > >>+ &xrdmmap, sizeof(xrdmmap)); > >>+ > >>+ xc_hypercall_bounce_post(xch, entries); > >>+ > >>+ *max_entries = xrdmmap.nr_entries; > >>+ > > > >I would bake the -EAGAIN support in here to loop here. > > > >See how the xc_domain_destroy does it. > > Do you mean this change? > > @@ -699,8 +699,10 @@ int xc_reserved_device_memory_map(xc_interface *xch, > > set_xen_guest_handle(xrdmmap.buffer, entries); > > - rc = do_memory_op(xch, XENMEM_reserved_device_memory_map, > - &xrdmmap, sizeof(xrdmmap)); > + do { > + rc = do_memory_op(xch, XENMEM_reserved_device_memory_map, > + &xrdmmap, sizeof(xrdmmap)); > + } while ( rc && (errno == EAGAIN) );
Yes. > > xc_hypercall_bounce_post(xch, entries); > > Thanks > Tiejun > > >>+ return rc ? rc : xrdmmap.nr_entries; > >>+} > >>+ > >> int xc_get_machine_memory_map(xc_interface *xch, > >> struct e820entry entries[], > >> uint32_t max_entries) > >>-- > >>1.9.1 > >> > > _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel