[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] xenpaging: move num_pages into xenpaging struct



# HG changeset patch
# User Olaf Hering <olaf@xxxxxxxxx>
# Date 1307695642 -7200
# Node ID 4aaa90c1db4250964f7982fa7c59bf9518988e91
# Parent  d957acb8bee6d5d998a4432b40a342fa8d6a7885
xenpaging: move num_pages into xenpaging struct

Move num_pages into struct xenpaging.
num_pages will be used by the policy in a subsequent patch.

Also remove a memset, the victims array is allocated with calloc.

Signed-off-by: Olaf Hering <olaf@xxxxxxxxx>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
---


diff -r d957acb8bee6 -r 4aaa90c1db42 tools/xenpaging/xenpaging.c
--- a/tools/xenpaging/xenpaging.c       Fri Jun 10 10:47:20 2011 +0200
+++ b/tools/xenpaging/xenpaging.c       Fri Jun 10 10:47:22 2011 +0200
@@ -128,7 +128,7 @@
     return NULL;
 }
 
-static xenpaging_t *xenpaging_init(domid_t domain_id)
+static xenpaging_t *xenpaging_init(domid_t domain_id, int num_pages)
 {
     xenpaging_t *paging;
     xc_interface *xch;
@@ -256,6 +256,13 @@
     }
     DPRINTF("max_pages = %"PRIx64"\n", paging->domain_info->max_pages);
 
+    if ( num_pages < 0 || num_pages > paging->domain_info->max_pages )
+    {
+        num_pages = paging->domain_info->max_pages;
+        DPRINTF("setting num_pages to %d\n", num_pages);
+    }
+    paging->num_pages = num_pages;
+
     /* Initialise policy */
     rc = policy_init(paging);
     if ( rc != 0 )
@@ -552,7 +559,6 @@
 int main(int argc, char *argv[])
 {
     struct sigaction act;
-    int num_pages;
     xenpaging_t *paging;
     xenpaging_victim_t *victims;
     mem_event_request_t req;
@@ -572,10 +578,8 @@
         return -1;
     }
 
-    num_pages = atoi(argv[2]);
-
     /* Initialise domain paging */
-    paging = xenpaging_init(atoi(argv[1]));
+    paging = xenpaging_init(atoi(argv[1]), atoi(argv[2]));
     if ( paging == NULL )
     {
         fprintf(stderr, "Error initialising paging");
@@ -583,7 +587,7 @@
     }
     xch = paging->xc_handle;
 
-    DPRINTF("starting %s %u %d\n", argv[0], paging->mem_event.domain_id, 
num_pages);
+    DPRINTF("starting %s %u %d\n", argv[0], paging->mem_event.domain_id, 
paging->num_pages);
 
     /* Open file */
     sprintf(filename, "page_cache_%u", paging->mem_event.domain_id);
@@ -594,12 +598,7 @@
         return 2;
     }
 
-    if ( num_pages < 0 || num_pages > paging->domain_info->max_pages )
-    {
-        num_pages = paging->domain_info->max_pages;
-        DPRINTF("setting num_pages to %d\n", num_pages);
-    }
-    victims = calloc(num_pages, sizeof(xenpaging_victim_t));
+    victims = calloc(paging->num_pages, sizeof(xenpaging_victim_t));
 
     /* ensure that if we get a signal, we'll do cleanup, then exit */
     act.sa_handler = close_handler;
@@ -611,8 +610,7 @@
     sigaction(SIGALRM, &act, NULL);
 
     /* Evict pages */
-    memset(victims, 0, sizeof(xenpaging_victim_t) * num_pages);
-    for ( i = 0; i < num_pages; i++ )
+    for ( i = 0; i < paging->num_pages; i++ )
     {
         rc = evict_victim(paging, &victims[i], fd, i);
         if ( rc == -ENOSPC )
@@ -648,13 +646,13 @@
             if ( test_and_clear_bit(req.gfn, paging->bitmap) )
             {
                 /* Find where in the paging file to read from */
-                for ( i = 0; i < num_pages; i++ )
+                for ( i = 0; i < paging->num_pages; i++ )
                 {
                     if ( victims[i].gfn == req.gfn )
                         break;
                 }
     
-                if ( i >= num_pages )
+                if ( i >= paging->num_pages )
                 {
                     DPRINTF("Couldn't find page %"PRIx64"\n", req.gfn);
                     goto out;
diff -r d957acb8bee6 -r 4aaa90c1db42 tools/xenpaging/xenpaging.h
--- a/tools/xenpaging/xenpaging.h       Fri Jun 10 10:47:20 2011 +0200
+++ b/tools/xenpaging/xenpaging.h       Fri Jun 10 10:47:22 2011 +0200
@@ -42,6 +42,7 @@
     unsigned long *bitmap;
 
     mem_event_t mem_event;
+    int num_pages;
     int policy_mru_size;
 } xenpaging_t;
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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