130 lines
4.4 KiB
Diff
130 lines
4.4 KiB
Diff
|
changeset: 23591:4aaa90c1db42
|
||
|
user: Olaf Hering <olaf@aepfle.de>
|
||
|
date: Fri Jun 10 10:47:22 2011 +0200
|
||
|
files: tools/xenpaging/xenpaging.c tools/xenpaging/xenpaging.h
|
||
|
description:
|
||
|
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>
|
||
|
|
||
|
|
||
|
---
|
||
|
tools/xenpaging/xenpaging.c | 30 ++++++++++++++----------------
|
||
|
tools/xenpaging/xenpaging.h | 1 +
|
||
|
2 files changed, 15 insertions(+), 16 deletions(-)
|
||
|
|
||
|
Index: xen-4.1.2-testing/tools/xenpaging/xenpaging.c
|
||
|
===================================================================
|
||
|
--- xen-4.1.2-testing.orig/tools/xenpaging/xenpaging.c
|
||
|
+++ xen-4.1.2-testing/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
|
||
|
}
|
||
|
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 *pag
|
||
|
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;
|
||
|
Index: xen-4.1.2-testing/tools/xenpaging/xenpaging.h
|
||
|
===================================================================
|
||
|
--- xen-4.1.2-testing.orig/tools/xenpaging/xenpaging.h
|
||
|
+++ xen-4.1.2-testing/tools/xenpaging/xenpaging.h
|
||
|
@@ -42,6 +42,7 @@ typedef struct xenpaging {
|
||
|
unsigned long *bitmap;
|
||
|
|
||
|
mem_event_t mem_event;
|
||
|
+ int num_pages;
|
||
|
int policy_mru_size;
|
||
|
} xenpaging_t;
|
||
|
|