diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2010-05-28 09:30:19 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2010-05-28 09:30:19 +0100 |
commit | 5cc436c1d2b3b0be3f42104582f53eec3969b43a (patch) | |
tree | 1e30ade146ee7287c486d1309b5d3d2c69a2d9b9 /tools/xenpaging | |
parent | 7f9a888af4b65cb8c22cea3c8295d30d0fedd623 (diff) | |
download | xen-5cc436c1d2b3b0be3f42104582f53eec3969b43a.tar.gz xen-5cc436c1d2b3b0be3f42104582f53eec3969b43a.tar.bz2 xen-5cc436c1d2b3b0be3f42104582f53eec3969b43a.zip |
libxc: eliminate static variables, use xentoollog; API change
This patch eliminate the global variables in libxenctrl (used for
logging and error reporting).
Instead the information which was in the global variables is now in a
new xc_interface* opaque structure, which xc_interface open returns
instead of the raw file descriptor; furthermore, logging is done via
xentoollog.
There are three new parameters to xc_interface_open to control the
logging, but existing callers can just pass "0" for all three to get
the old behaviour.
All libxc callers have been adjusted accordingly.
Also update QEMU_TAG for corresponding qemu change.
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/xenpaging')
-rw-r--r-- | tools/xenpaging/file_ops.c | 1 | ||||
-rw-r--r-- | tools/xenpaging/policy.h | 3 | ||||
-rw-r--r-- | tools/xenpaging/policy_default.c | 3 | ||||
-rw-r--r-- | tools/xenpaging/xc.c | 9 | ||||
-rw-r--r-- | tools/xenpaging/xc.h | 7 | ||||
-rw-r--r-- | tools/xenpaging/xenpaging.c | 44 | ||||
-rw-r--r-- | tools/xenpaging/xenpaging.h | 2 |
7 files changed, 39 insertions, 30 deletions
diff --git a/tools/xenpaging/file_ops.c b/tools/xenpaging/file_ops.c index 2d52827669..772d222637 100644 --- a/tools/xenpaging/file_ops.c +++ b/tools/xenpaging/file_ops.c @@ -22,6 +22,7 @@ #include <unistd.h> +#include <stdarg.h> #include <xc_private.h> diff --git a/tools/xenpaging/policy.h b/tools/xenpaging/policy.h index 5d7ed6c1db..0b8fa6cf46 100644 --- a/tools/xenpaging/policy.h +++ b/tools/xenpaging/policy.h @@ -29,7 +29,8 @@ int policy_init(xenpaging_t *paging); -int policy_choose_victim(xenpaging_t *paging, domid_t domain_id, +int policy_choose_victim(xc_interface *xch, + xenpaging_t *paging, domid_t domain_id, xenpaging_victim_t *victim); void policy_notify_paged_out(domid_t domain_id, unsigned long gfn); void policy_notify_paged_in(domid_t domain_id, unsigned long gfn); diff --git a/tools/xenpaging/policy_default.c b/tools/xenpaging/policy_default.c index 599472edd5..1bb89e03ba 100644 --- a/tools/xenpaging/policy_default.c +++ b/tools/xenpaging/policy_default.c @@ -57,7 +57,8 @@ int policy_init(xenpaging_t *paging) return rc; } -int policy_choose_victim(xenpaging_t *paging, domid_t domain_id, +int policy_choose_victim(xc_interface *xch, + xenpaging_t *paging, domid_t domain_id, xenpaging_victim_t *victim) { ASSERT(victim != NULL); diff --git a/tools/xenpaging/xc.c b/tools/xenpaging/xc.c index a5a396b3fd..3b9c836aa0 100644 --- a/tools/xenpaging/xc.c +++ b/tools/xenpaging/xc.c @@ -23,6 +23,7 @@ #include <errno.h> #include <string.h> +#include <stdarg.h> #include <sys/poll.h> #include <xc_private.h> #include <xg_save_restore.h> @@ -64,7 +65,7 @@ int xc_mem_paging_flush_ioemu_cache(domid_t domain_id) return rc; } -int xc_wait_for_event_or_timeout(int xce_handle, unsigned long ms) +int xc_wait_for_event_or_timeout(xc_interface *xch, int xce_handle, unsigned long ms) { struct pollfd fd = { .fd = xce_handle, .events = POLLIN | POLLERR }; int port; @@ -105,12 +106,12 @@ int xc_wait_for_event_or_timeout(int xce_handle, unsigned long ms) return -errno; } -int xc_wait_for_event(int xce_handle) +int xc_wait_for_event(xc_interface *xch, int xce_handle) { - return xc_wait_for_event_or_timeout(xce_handle, -1); + return xc_wait_for_event_or_timeout(xch, xce_handle, -1); } -int xc_get_platform_info(int xc_handle, domid_t domain_id, +int xc_get_platform_info(xc_interface *xc_handle, domid_t domain_id, xc_platform_info_t *platform_info) { return get_platform_info(xc_handle, domain_id, diff --git a/tools/xenpaging/xc.h b/tools/xenpaging/xc.h index 19da10767a..5febb89ef3 100644 --- a/tools/xenpaging/xc.h +++ b/tools/xenpaging/xc.h @@ -25,6 +25,7 @@ #define __XC_H__ +#include <stdarg.h> #include <xc_private.h> #include <xen/mem_event.h> @@ -52,10 +53,10 @@ typedef struct xc_platform_info { int alloc_bitmap(unsigned long **bitmap, unsigned long bitmap_size); int xc_mem_paging_flush_ioemu_cache(domid_t domain_id); -int xc_wait_for_event(int xce_handle); -int xc_wait_for_event_or_timeout(int xce_handle, unsigned long ms); +int xc_wait_for_event(xc_interface *xch, int xce_handle); +int xc_wait_for_event_or_timeout(xc_interface *xch, int xce_handle, unsigned long ms); -int xc_get_platform_info(int xc_handle, domid_t domain_id, +int xc_get_platform_info(xc_interface *xc_handle, domid_t domain_id, xc_platform_info_t *platform_info); diff --git a/tools/xenpaging/xenpaging.c b/tools/xenpaging/xenpaging.c index 1c91ba8b1d..25ad5c44ee 100644 --- a/tools/xenpaging/xenpaging.c +++ b/tools/xenpaging/xenpaging.c @@ -22,6 +22,7 @@ #include <inttypes.h> #include <stdlib.h> +#include <stdarg.h> #include <xc_private.h> #include <xen/mem_event.h> @@ -66,24 +67,24 @@ static void *init_page(void) return NULL; } -xenpaging_t *xenpaging_init(domid_t domain_id) +xenpaging_t *xenpaging_init(xc_interface **xch_r, domid_t domain_id) { xenpaging_t *paging; + xc_interface *xch; int rc; + xch = xc_interface_open(0,0,0); + if ( !xch ) return NULL; + DPRINTF("xenpaging init\n"); + *xch_r = xch; /* Allocate memory */ paging = malloc(sizeof(xenpaging_t)); memset(paging, 0, sizeof(xenpaging_t)); /* Open connection to xen */ - paging->xc_handle = xc_interface_open(); - if ( paging->xc_handle < 0 ) - { - ERROR("Failed to open connection to Xen"); - goto err; - } + paging->xc_handle = xch; /* Set domain id */ paging->mem_event.domain_id = domain_id; @@ -208,7 +209,7 @@ xenpaging_t *xenpaging_init(domid_t domain_id) return NULL; } -int xenpaging_teardown(xenpaging_t *paging) +int xenpaging_teardown(xc_interface *xch, xenpaging_t *paging) { int rc; @@ -248,7 +249,7 @@ int xenpaging_teardown(xenpaging_t *paging) ERROR("Error closing connection to xen"); goto err; } - paging->xc_handle = -1; + paging->xc_handle = NULL; return 0; @@ -302,7 +303,8 @@ static int put_response(mem_event_t *mem_event, mem_event_response_t *rsp) return 0; } -int xenpaging_evict_page(xenpaging_t *paging, xenpaging_victim_t *victim, int fd, int i) +int xenpaging_evict_page(xc_interface *xch, xenpaging_t *paging, + xenpaging_victim_t *victim, int fd, int i) { void *page; unsigned long gfn; @@ -373,7 +375,8 @@ int xenpaging_resume_page(xenpaging_t *paging, mem_event_response_t *rsp) return ret; } -int xenpaging_populate_page(xenpaging_t *paging, unsigned long *gfn, int fd, int i) +int xenpaging_populate_page(xc_interface *xch, xenpaging_t *paging, + unsigned long *gfn, int fd, int i) { void *page; int ret; @@ -411,7 +414,7 @@ int xenpaging_populate_page(xenpaging_t *paging, unsigned long *gfn, int fd, int return ret; } -static int evict_victim(xenpaging_t *paging, domid_t domain_id, +static int evict_victim(xc_interface *xch, xenpaging_t *paging, domid_t domain_id, xenpaging_victim_t *victim, int fd, int i) { int j = 0; @@ -419,7 +422,7 @@ static int evict_victim(xenpaging_t *paging, domid_t domain_id, do { - ret = policy_choose_victim(paging, domain_id, victim); + ret = policy_choose_victim(xch, paging, domain_id, victim); if ( ret != 0 ) { ERROR("Error choosing victim"); @@ -429,7 +432,7 @@ static int evict_victim(xenpaging_t *paging, domid_t domain_id, ret = xc_mem_paging_nominate(paging->xc_handle, paging->mem_event.domain_id, victim->gfn); if ( ret == 0 ) - ret = xenpaging_evict_page(paging, victim, fd, i); + ret = xenpaging_evict_page(xch, paging, victim, fd, i); else { if ( j++ % 1000 == 0 ) @@ -459,6 +462,7 @@ int main(int argc, char *argv[]) int i; int rc = -1; int rc1; + xc_interface *xch; int open_flags = O_CREAT | O_TRUNC | O_RDWR; mode_t open_mode = S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR | S_IWGRP | S_IWOTH; @@ -489,7 +493,7 @@ int main(int argc, char *argv[]) srand(time(NULL)); /* Initialise domain paging */ - paging = xenpaging_init(domain_id); + paging = xenpaging_init(&xch, domain_id); if ( paging == NULL ) { ERROR("Error initialising paging"); @@ -500,7 +504,7 @@ int main(int argc, char *argv[]) memset(victims, 0, sizeof(xenpaging_victim_t) * num_pages); for ( i = 0; i < num_pages; i++ ) { - evict_victim(paging, domain_id, &victims[i], fd, i); + evict_victim(xch, paging, domain_id, &victims[i], fd, i); if ( i % 100 == 0 ) DPRINTF("%d pages evicted\n", i); } @@ -511,7 +515,7 @@ int main(int argc, char *argv[]) while ( 1 ) { /* Wait for Xen to signal that a page needs paged in */ - rc = xc_wait_for_event_or_timeout(paging->mem_event.xce_handle, 100); + rc = xc_wait_for_event_or_timeout(xch, paging->mem_event.xce_handle, 100); if ( rc < -1 ) { ERROR("Error getting event"); @@ -549,7 +553,7 @@ int main(int argc, char *argv[]) } /* Populate the page */ - rc = xenpaging_populate_page(paging, &req.gfn, fd, i); + rc = xenpaging_populate_page(xch, paging, &req.gfn, fd, i); if ( rc != 0 ) { ERROR("Error populating page"); @@ -570,7 +574,7 @@ int main(int argc, char *argv[]) } /* Evict a new page to replace the one we just paged in */ - evict_victim(paging, domain_id, &victims[i], fd, i); + evict_victim(xch, paging, domain_id, &victims[i], fd, i); } else { @@ -604,7 +608,7 @@ int main(int argc, char *argv[]) free(victims); /* Tear down domain paging */ - rc1 = xenpaging_teardown(paging); + rc1 = xenpaging_teardown(xch, paging); if ( rc1 != 0 ) ERROR("Error tearing down paging"); diff --git a/tools/xenpaging/xenpaging.h b/tools/xenpaging/xenpaging.h index 3c897ca381..d8451937d3 100644 --- a/tools/xenpaging/xenpaging.h +++ b/tools/xenpaging/xenpaging.h @@ -36,7 +36,7 @@ typedef struct xenpaging { - int xc_handle; + xc_interface *xc_handle; xc_platform_info_t *platform_info; xc_domaininfo_t *domain_info; |