[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 08 of 22] xenpaging: drop xc.c, move xc_wait_for_event_or_timeout
# HG changeset patch # User Olaf Hering <olaf@xxxxxxxxx> # Date 1307695631 -7200 # Node ID b4e8bdedc0eaf9f1615e01152240d74a9996e07f # Parent fe8cb47be2adc95e6181de8c166e4460e1a2e40f xenpaging: drop xc.c, move xc_wait_for_event_or_timeout Move xc_wait_for_event_or_timeout() into xenpaging and massage it a bit for further changes in subsequent patches. Include poll.h instead of sys/poll.h. Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> diff -r fe8cb47be2ad -r b4e8bdedc0ea tools/xenpaging/xc.c --- a/tools/xenpaging/xc.c Fri Jun 10 10:47:10 2011 +0200 +++ b/tools/xenpaging/xc.c Fri Jun 10 10:47:11 2011 +0200 @@ -32,46 +32,6 @@ -int xc_wait_for_event_or_timeout(xc_interface *xch, xc_evtchn *xce, unsigned long ms) -{ - struct pollfd fd = { .fd = xc_evtchn_fd(xce), .events = POLLIN | POLLERR }; - int port; - int rc; - - rc = poll(&fd, 1, ms); - if ( rc == -1 ) - { - if (errno == EINTR) - return 0; - - ERROR("Poll exited with an error"); - goto err; - } - - if ( rc == 1 ) - { - port = xc_evtchn_pending(xce); - if ( port == -1 ) - { - ERROR("Failed to read port from event channel"); - goto err; - } - - rc = xc_evtchn_unmask(xce, port); - if ( rc != 0 ) - { - ERROR("Failed to unmask event channel port"); - goto err; - } - } - else - port = -1; - - return port; - - err: - return -errno; -} diff -r fe8cb47be2ad -r b4e8bdedc0ea tools/xenpaging/xc.h --- a/tools/xenpaging/xc.h Fri Jun 10 10:47:10 2011 +0200 +++ b/tools/xenpaging/xc.h Fri Jun 10 10:47:11 2011 +0200 @@ -37,7 +37,6 @@ -int xc_wait_for_event_or_timeout(xc_interface *xch, xc_evtchn *xce, unsigned long ms); diff -r fe8cb47be2ad -r b4e8bdedc0ea tools/xenpaging/xenpaging.c --- a/tools/xenpaging/xenpaging.c Fri Jun 10 10:47:10 2011 +0200 +++ b/tools/xenpaging/xenpaging.c Fri Jun 10 10:47:11 2011 +0200 @@ -27,6 +27,7 @@ #include <time.h> #include <signal.h> #include <unistd.h> +#include <poll.h> #include <xc_private.h> #include <xs.h> @@ -62,6 +63,47 @@ static int xenpaging_mem_paging_flush_io return rc == true ? 0 : -1; } +static int xenpaging_wait_for_event_or_timeout(xenpaging_t *paging) +{ + xc_interface *xch = paging->xc_handle; + xc_evtchn *xce = paging->mem_event.xce_handle; + struct pollfd fd[1]; + int port; + int rc; + + fd[0].fd = xc_evtchn_fd(xce); + fd[0].events = POLLIN | POLLERR; + rc = poll(fd, 1, 100); + if ( rc < 0 ) + { + if (errno == EINTR) + return 0; + + ERROR("Poll exited with an error"); + return -errno; + } + + if ( rc && fd[0].revents & POLLIN ) + { + DPRINTF("Got event from evtchn\n"); + port = xc_evtchn_pending(xce); + if ( port == -1 ) + { + ERROR("Failed to read port from event channel"); + rc = -1; + goto err; + } + + rc = xc_evtchn_unmask(xce, port); + if ( rc < 0 ) + { + ERROR("Failed to unmask event channel port"); + } + } +err: + return rc; +} + static void *init_page(void) { void *buffer; @@ -598,13 +640,13 @@ int main(int argc, char *argv[]) while ( !interrupted ) { /* Wait for Xen to signal that a page needs paged in */ - rc = xc_wait_for_event_or_timeout(xch, paging->mem_event.xce_handle, 100); - if ( rc < -1 ) + rc = xenpaging_wait_for_event_or_timeout(paging); + if ( rc < 0 ) { ERROR("Error getting event"); goto out; } - else if ( rc != -1 ) + else if ( rc != 0 ) { DPRINTF("Got event from Xen\n"); } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |