diff options
author | Olaf Hering <olaf@aepfle.de> | 2011-06-10 10:47:22 +0200 |
---|---|---|
committer | Olaf Hering <olaf@aepfle.de> | 2011-06-10 10:47:22 +0200 |
commit | fd1b11466ee8a3ddc78dee1696e6934b48e01939 (patch) | |
tree | 225a285c5acacab81f2b70e411b311f0bd7a3ecb /tools/xenpaging/xenpaging.c | |
parent | e897a5e81842d73b712036b437d31f981c871177 (diff) | |
download | xen-fd1b11466ee8a3ddc78dee1696e6934b48e01939.tar.gz xen-fd1b11466ee8a3ddc78dee1696e6934b48e01939.tar.bz2 xen-fd1b11466ee8a3ddc78dee1696e6934b48e01939.zip |
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@aepfle.de>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
Diffstat (limited to 'tools/xenpaging/xenpaging.c')
-rw-r--r-- | tools/xenpaging/xenpaging.c | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/tools/xenpaging/xenpaging.c b/tools/xenpaging/xenpaging.c index ad128bd6cb..370e993e15 100644 --- a/tools/xenpaging/xenpaging.c +++ b/tools/xenpaging/xenpaging.c @@ -128,7 +128,7 @@ static void *init_page(void) 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 @@ static xenpaging_t *xenpaging_init(domid_t domain_id) } 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 @@ static int evict_victim(xenpaging_t *paging, 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 @@ int main(int argc, char *argv[]) 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 @@ int main(int argc, char *argv[]) } 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 @@ int main(int argc, char *argv[]) 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 @@ int main(int argc, char *argv[]) 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 @@ int main(int argc, char *argv[]) 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; |