[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.