libxc: add xc_domain_add_to_physmap_batch to wrap XENMEM_add_to_physmap_batch
PATCH v2 1/1 libxc: add xc_domain_add_to_physmap_batch to wrap XENMEM_add_to_physmap_batch
This is a preparation for the proposal "allow setting up shared memory areas between VMs from xl config file". See:
V2: https://lists.xen.org/archives/html/xen-devel/2017-06/msg02256.html
V1: https://lists.xen.org/archives/html/xen-devel/2017-05/msg01288.html
The plan is to use XENMEM_add_to_physmap_batch in xl to map foregin pages from one DomU to another so that the page could be shared. But currently there is no wrapper for XENMEM_add_to_physmap_batch in libxc, so we just add a wrapper for it.
---
Changed Since v1:
* explain why such a sudden wrapper
* change the parameters' types
--- tools/libxc/include/xenctrl.h | 9 +++++++++ tools/libxc/xc_domain.c | 44 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+)
tools/libxc/include/xenctrl.h +9 -0
@@ -1372,6 +1372,15 @@ int xc_domain_add_to_physmap(xc_interface *xch,unsigned long idx, xen_pfn_t gpfn); +int xc_domain_add_to_physmap_batch (xc_interface *xch, +domid_t domid, +domid_t foreign_domid, +unsigned int space, +unsigned int size, +xen_ulong_t *idxs, +xen_pfn_t *gfpns, +int *errs); + int xc_domain_populate_physmap(xc_interface *xch, uint32_t domid, unsigned long nr_extents,
tools/libxc/xc_domain.c +44 -0
50 lines not on this page · raw message
Signature · 7 lines
2.13.1 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xen.org/xen-devel
Quoted 21 lines · Zhongze Liu
This is a preparation for the proposal "allow setting up shared memory areas between VMs from xl config file". See:
V2: https://lists.xen.org/archives/html/xen-devel/2017-06/msg02256.html
V1: https://lists.xen.org/archives/html/xen-devel/2017-05/msg01288.htmlThe plan is to use
XENMEM_add_to_physmap_batchin xl to map foregin pages from one DomU to another so that the page could be shared. But currently there is no wrapper forXENMEM_add_to_physmap_batchin libxc, so we just add a wrapper for it.Signed-off-by Zhongze Liu <[email protected]>---
tools/libxc/xc_domain.c +9
-0+int xc_domain_add_to_physmap_batch (xc_interface *xch, +domid_t domid, +domid_t foreign_domid, +unsigned int space, +unsigned int size, +xen_ulong_t *idxs, +xen_pfn_t *gpfns, +int *errs) +{
tools/libxc/xc_domain.c int xc_domain_add_to_physmap(xc_interface *xch, · line 1053
Quoted 10 lines
tools/libxc/xc_domain.c +10
-0+int rc; +DECLARE_HYPERCALL_BOUNCE (idxs, size *sizeof (*idxs),XC_HYPERCALL_BUFFER_BOUNCE_IN ); +DECLARE_HYPERCALL_BOUNCE (gpfns, size *sizeof (*gpfns),XC_HYPERCALL_BUFFER_BOUNCE_IN ); +DECLARE_HYPERCALL_BOUNCE (errs, size *sizeof (*errs),XC_HYPERCALL_BUFFER_BOUNCE_OUT ); + +struct xen_add_to_physmap_batch xatp_batch = { + .domid = domid, + .space = space, + .size = size, + .u = {.foreign_domid = foreign_domid}
Coding style issue.
Just a note, the struct is different for pre-4.7 and post-4.7 Xen. You don't need to implement a version of this function for pre-4.7 Xen.
tools/libxc/xc_domain.c int xc_domain_add_to_physmap(xc_interface *xch, · line 1061
Quoted 8 lines
tools/libxc/xc_domain.c +8
-0+ }; + +if (xc_hypercall_bounce_pre (xch, idxs) || +xc_hypercall_bounce_pre (xch, gpfns) || +xc_hypercall_bounce_pre (xch, errs) ) + { +PERROR ("Could not bounce memory for XENMEM_add_to_physmap_batch" ); + goto out;
rc will be uninitialised in this exit path.
Quoted 23 lines
tools/libxc/xc_domain.c +17
-0+ } + +set_xen_guest_handle (xatp_batch.idxs, idxs); +set_xen_guest_handle (xatp_batch.gpfns, gpfns); +set_xen_guest_handle (xatp_batch.errs, errs); + + rc =do_memory_op (xch, XENMEM_add_to_physmap_batch, + &xatp_batch,sizeof (xatp_batch)); + +out: +xc_hypercall_bounce_post (xch, idxs); +xc_hypercall_bounce_post (xch, gpfns); +xc_hypercall_bounce_post (xch, errs); + +return rc; +} +int xc_domain_claim_pages (xc_interface *xch,uint32_t domid,unsigned long nr_pages)Signature · 1 line
2.13.1
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel
Hi Wei,
2017-06-21 23:44 GMT+08:00 Wei Liu <[email protected]>:
Quoted 26 lines · Zhongze Liu
Quoted 25 lines
This is a preparation for the proposal "allow setting up shared memory areas between VMs from xl config file". See:
V2: https://lists.xen.org/archives/html/xen-devel/2017-06/msg02256.html
V1: https://lists.xen.org/archives/html/xen-devel/2017-05/msg01288.htmlThe plan is to use
XENMEM_add_to_physmap_batchin xl to map foregin pages from one DomU to another so that the page could be shared. But currently there is no wrapper forXENMEM_add_to_physmap_batchin libxc, so we just add a wrapper for it.Signed-off-by Zhongze Liu <[email protected]>---
tools/libxc/xc_domain.c +13
-0+int xc_domain_add_to_physmap_batch (xc_interface *xch, +domid_t domid, +domid_t foreign_domid, +unsigned int space, +unsigned int size, +xen_ulong_t *idxs, +xen_pfn_t *gpfns, + . int *errs) +{ +int rc; +DECLARE_HYPERCALL_BOUNCE (idxs, size *sizeof (*idxs),XC_HYPERCALL_BUFFER_BOUNCE_IN ); +DECLARE_HYPERCALL_BOUNCE (gpfns, size *sizeof (*gpfns),XC_HYPERCALL_BUFFER_BOUNCE_IN ); +DECLARE_HYPERCALL_BOUNCE (errs, size *sizeof (*errs),XC_HYPERCALL_BUFFER_BOUNCE_OUT );
Quoted 8 lines
tools/libxc/xc_domain.c int xc_domain_add_to_physmap(xc_interface *xch, · line 1053
Quoted 6 lines
tools/libxc/xc_domain.c +6
-0+ +struct xen_add_to_physmap_batch xatp_batch = { + .domid = domid, + .space = space, + .size = size, + .u = {.foreign_domid = foreign_domid}Coding style issue.
Do you mean that I should add a space between '{' and '.' near ".u = {.foreign" in this line?
Quoted 30 lines
Just a note, the struct is different for pre-4.7 and post-4.7 Xen. You don't need to implement a version of this function for pre-4.7 Xen.
tools/libxc/xc_domain.c int xc_domain_add_to_physmap(xc_interface *xch, · line 1061
Quoted 8 lines
tools/libxc/xc_domain.c +8
-0+ }; + +if (xc_hypercall_bounce_pre (xch, idxs) || +xc_hypercall_bounce_pre (xch, gpfns) || +xc_hypercall_bounce_pre (xch, errs) ) + { +PERROR ("Could not bounce memory for XENMEM_add_to_physmap_batch" ); + goto out;rc will be uninitialised in this exit path.
Quoted 15 lines
tools/libxc/xc_domain.c +15
-0+ } + +set_xen_guest_handle (xatp_batch.idxs, idxs); +set_xen_guest_handle (xatp_batch.gpfns, gpfns); +set_xen_guest_handle (xatp_batch.errs, errs); + + rc =do_memory_op (xch, XENMEM_add_to_physmap_batch, + &xatp_batch,sizeof (xatp_batch)); + +out: +xc_hypercall_bounce_post (xch, idxs); +xc_hypercall_bounce_post (xch, gpfns); +xc_hypercall_bounce_post (xch, errs); + +return rc;
Quoted 8 lines
Quoted 8 lines
tools/libxc/xc_domain.c +2
-1+} +int xc_domain_claim_pages (xc_interface *xch,uint32_t domid,unsigned long nr_pages) --2.13.1
Cheers,
Zhongze Liu
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel