|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3] tools/tests/mem-sharing/memshrtool share-all test
v3: Use max gpfn instead of tot_pages for sharing.
Signed-off-by: Tamas Lengyel <tamas.lengyel@xxxxxxxxxxxx>
---
tools/tests/mem-sharing/memshrtool.c | 53 ++++++++++++++++++++++++++++++++++
1 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/tools/tests/mem-sharing/memshrtool.c
b/tools/tests/mem-sharing/memshrtool.c
index db44294..49834e3 100644
--- a/tools/tests/mem-sharing/memshrtool.c
+++ b/tools/tests/mem-sharing/memshrtool.c
@@ -10,6 +10,7 @@
#include <errno.h>
#include <string.h>
#include <sys/mman.h>
+#include <inttypes.h>
#include "xenctrl.h"
@@ -24,6 +25,8 @@ static int usage(const char* prog)
printf(" share <domid> <gfn> <handle> <source> <source-gfn>
<source-handle>\n");
printf(" - Share two pages.\n");
printf(" unshare <domid> <gfn> - Unshare a page by grabbing a writable
map.\n");
+ printf(" share-all <domid> <source>\n");
+ printf(" - Share all pages.\n");
printf(" add-to-physmap <domid> <gfn> <source> <source-gfn>
<source-handle>\n");
printf(" - Populate a page in a domain with a
shared page.\n");
printf(" debug-gfn <domid> <gfn> - Debug a particular domain and gfn.\n");
@@ -131,6 +134,56 @@ int main(int argc, const char** argv)
munmap(map, 4096);
R((int)!map);
}
+ else if( !strcasecmp(cmd, "share-all") )
+ {
+ domid_t domid;
+ domid_t source_domid;
+ uint64_t handle;
+ uint64_t source_handle;
+ uint64_t total_shared=0;
+ int ret;
+ uint64_t share_page;
+ int max_gfn, source_max_gfn;
+
+ if( argc != 4 )
+ return usage(argv[0]);
+
+ domid = strtol(argv[2], NULL, 0);
+ source_domid = strtol(argv[3], NULL, 0);
+
+ max_gfn=xc_domain_maximum_gpfn(xch, domid);
+ source_max_gfn=xc_domain_maximum_gpfn(xch, source_domid);
+
+ printf("Max GFN: 0x%"PRIx32". Max source GFN: 0x%"PRIx32"\n", max_gfn,
source_max_gfn);
+
+ if(max_gfn != source_max_gfn) {
+ fprintf(stderr, "MAX GFN in source and destination domain doesn't
match "
+ "(source: 0x%"PRIx32", destination 0x%"PRIx32")\n",
max_gfn, source_max_gfn);
+ return 1;
+ }
+
+ for(share_page=0;share_page<=max_gfn;++share_page) {
+
+ ret=xc_memshr_nominate_gfn(xch, domid, share_page, &handle);
+ if(ret<0) {
+ continue;
+ }
+
+ ret=xc_memshr_nominate_gfn(xch, source_domid, share_page,
&source_handle);
+ if(ret<0) {
+ continue;
+ }
+
+ ret=xc_memshr_share_gfns(xch, source_domid, share_page,
source_handle, domid, share_page, handle);
+
+ if(ret>=0) {
+ total_shared++;
+ }
+ }
+
+ printf("Shared pages: %"PRIu64"\n", total_shared);
+
+ }
else if( !strcasecmp(cmd, "add-to-physmap") )
{
domid_t domid;
--
1.7.2.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |