Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2
xen
23583-xenpaging_drop_xc.c_move_xc_wait_for_even...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 23583-xenpaging_drop_xc.c_move_xc_wait_for_event_or_timeout.patch of Package xen
changeset: 23583:235d8fdcb3a9 user: Olaf Hering <olaf@aepfle.de> date: Fri Jun 10 10:47:11 2011 +0200 files: tools/xenpaging/xc.c tools/xenpaging/xc.h tools/xenpaging/xenpaging.c description: 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@aepfle.de> Committed-by: Ian Jackson <ian.jackson.citrix.com> --- tools/xenpaging/xc.c | 40 ------------------------------------ tools/xenpaging/xc.h | 1 tools/xenpaging/xenpaging.c | 48 +++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 45 insertions(+), 44 deletions(-) Index: xen-4.1.2-testing/tools/xenpaging/xc.c =================================================================== --- xen-4.1.2-testing.orig/tools/xenpaging/xc.c +++ xen-4.1.2-testing/tools/xenpaging/xc.c @@ -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; -} Index: xen-4.1.2-testing/tools/xenpaging/xc.h =================================================================== --- xen-4.1.2-testing.orig/tools/xenpaging/xc.h +++ xen-4.1.2-testing/tools/xenpaging/xc.h @@ -37,7 +37,6 @@ -int xc_wait_for_event_or_timeout(xc_interface *xch, xc_evtchn *xce, unsigned long ms); 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 @@ -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"); }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor