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>
This commit is contained in:
Olaf Hering committed 2011-06-10 10:47:11 +02:00
1 parent 160e87fd49
commit 1a6a2f7c4d
3 files changed
+45 -44

No files matched your search

-40
View File
@@ -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;
}
-1
View File
@@ -37,7 +37,6 @@
int xc_wait_for_event_or_timeout(xc_interface *xch, xc_evtchn *xce, unsigned long ms);
+45 -3
View File
@@ -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_ioemu_cache(xenpaging_t *paging)
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");
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.