On Tue, Jun 07, 2011 at 03:01:56PM +0200, Jiri Denemark wrote:
---
src/qemu/qemu_domain.c | 24 ++++++++----------------
src/qemu/qemu_driver.c | 11 ++---------
src/qemu/qemu_migration.c | 31 ++++++++++---------------------
src/util/event_poll.c | 45 ++++++++++++++++-----------------------------
4 files changed, 36 insertions(+), 75 deletions(-)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 332c09e..5f18ad3 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -45,8 +45,6 @@
#define QEMU_NAMESPACE_HREF "http://libvirt.org/schemas/domain/qemu/1.0"
-#define timeval_to_ms(tv) (((tv).tv_sec * 1000ull) + ((tv).tv_usec / 1000))
-
static void qemuDomainEventDispatchFunc(virConnectPtr conn,
virDomainEventPtr event,
@@ -492,15 +490,12 @@ void qemuDomainSetNamespaceHooks(virCapsPtr caps)
int qemuDomainObjBeginJob(virDomainObjPtr obj)
{
qemuDomainObjPrivatePtr priv = obj->privateData;
- struct timeval now;
+ unsigned long long now;
unsigned long long then;
- if (gettimeofday(&now, NULL) < 0) {
- virReportSystemError(errno, "%s",
- _("cannot get time of day"));
+ if (virTimeMs(&now) < 0)
return -1;
- }
- then = timeval_to_ms(now) + QEMU_JOB_WAIT_TIME;
+ then = now + QEMU_JOB_WAIT_TIME;
virDomainObjRef(obj);
@@ -520,7 +515,7 @@ int qemuDomainObjBeginJob(virDomainObjPtr obj)
priv->jobActive = QEMU_JOB_UNSPECIFIED;
priv->jobSignals = 0;
memset(&priv->jobSignalsData, 0, sizeof(priv->jobSignalsData));
- priv->jobStart = timeval_to_ms(now);
+ priv->jobStart = now;
memset(&priv->jobInfo, 0, sizeof(priv->jobInfo));
return 0;
@@ -536,15 +531,12 @@ int qemuDomainObjBeginJobWithDriver(struct qemud_driver *driver,
virDomainObjPtr obj)
{
qemuDomainObjPrivatePtr priv = obj->privateData;
- struct timeval now;
+ unsigned long long now;
unsigned long long then;
- if (gettimeofday(&now, NULL) < 0) {
- virReportSystemError(errno, "%s",
- _("cannot get time of day"));
+ if (virTimeMs(&now) < 0)
return -1;
- }
- then = timeval_to_ms(now) + QEMU_JOB_WAIT_TIME;
+ then = now + QEMU_JOB_WAIT_TIME;
virDomainObjRef(obj);
qemuDriverUnlock(driver);
@@ -568,7 +560,7 @@ int qemuDomainObjBeginJobWithDriver(struct qemud_driver *driver,
priv->jobActive = QEMU_JOB_UNSPECIFIED;
priv->jobSignals = 0;
memset(&priv->jobSignalsData, 0, sizeof(priv->jobSignalsData));
- priv->jobStart = timeval_to_ms(now);
+ priv->jobStart = now;
memset(&priv->jobInfo, 0, sizeof(priv->jobInfo));
virDomainObjUnlock(obj);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 2957467..470573e 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -113,8 +113,6 @@
#define QEMU_NB_BLKIO_PARAM 1
-#define timeval_to_ms(tv) (((tv).tv_sec * 1000ull) + ((tv).tv_usec / 1000))
-
static void processWatchdogEvent(void *data, void *opaque);
static int qemudShutdown(void);
@@ -6843,8 +6841,6 @@ static int qemuDomainGetJobInfo(virDomainPtr dom,
if (virDomainObjIsActive(vm)) {
if (priv->jobActive) {
- struct timeval now;
-
memcpy(info, &priv->jobInfo, sizeof(*info));
/* Refresh elapsed time again just to ensure it
@@ -6852,12 +6848,9 @@ static int qemuDomainGetJobInfo(virDomainPtr dom,
* of incoming migration which we don't currently
* monitor actively in the background thread
*/
- if (gettimeofday(&now, NULL) < 0) {
- virReportSystemError(errno, "%s",
- _("cannot get time of day"));
+ if (virTimeMs(&info->timeElapsed) < 0)
goto cleanup;
- }
- info->timeElapsed = timeval_to_ms(now) - priv->jobStart;
+ info->timeElapsed -= priv->jobStart;
} else {
memset(info, 0, sizeof(*info));
info->type = VIR_DOMAIN_JOB_NONE;
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index f7eaa1c..5d7494b 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -46,8 +46,6 @@
#define VIR_FROM_THIS VIR_FROM_QEMU
-#define timeval_to_ms(tv) (((tv).tv_sec * 1000ull) + ((tv).tv_usec / 1000))
-
enum qemuMigrationCookieFlags {
QEMU_MIGRATION_COOKIE_FLAG_GRAPHICS,
QEMU_MIGRATION_COOKIE_FLAG_LOCKSTATE,
@@ -831,7 +829,6 @@ qemuMigrationUpdateJobStatus(struct qemud_driver *driver,
unsigned long long memProcessed;
unsigned long long memRemaining;
unsigned long long memTotal;
- struct timeval now;
if (!virDomainObjIsActive(vm)) {
qemuReportError(VIR_ERR_INTERNAL_ERROR, _("%s: %s"),
@@ -852,13 +849,9 @@ qemuMigrationUpdateJobStatus(struct qemud_driver *driver,
return -1;
}
- if (gettimeofday(&now, NULL) < 0) {
- priv->jobInfo.type = VIR_DOMAIN_JOB_FAILED;
- virReportSystemError(errno, "%s",
- _("cannot get time of day"));
+ if (virTimeMs(&priv->jobInfo.timeElapsed) < 0)
return -1;
- }
- priv->jobInfo.timeElapsed = timeval_to_ms(now) - priv->jobStart;
+ priv->jobInfo.timeElapsed -= priv->jobStart;
switch (status) {
case QEMU_MONITOR_MIGRATION_STATUS_INACTIVE:
@@ -1069,18 +1062,16 @@ qemuMigrationPrepareTunnel(struct qemud_driver *driver,
int internalret;
int dataFD[2] = { -1, -1 };
qemuDomainObjPrivatePtr priv = NULL;
- struct timeval now;
+ unsigned long long now;
qemuMigrationCookiePtr mig = NULL;
+
VIR_DEBUG("driver=%p, dconn=%p, cookiein=%s, cookieinlen=%d, "
"cookieout=%p, cookieoutlen=%p, st=%p, dname=%s, dom_xml=%s",
driver, dconn, NULLSTR(cookiein), cookieinlen,
cookieout, cookieoutlen, st, NULLSTR(dname), dom_xml);
- if (gettimeofday(&now, NULL) < 0) {
- virReportSystemError(errno, "%s",
- _("cannot get time of day"));
+ if (virTimeMs(&now) < 0)
return -1;
- }
/* Parse the domain XML. */
if (!(def = virDomainDefParseString(driver->caps, dom_xml,
@@ -1190,7 +1181,7 @@ endjob:
virDomainObjIsActive(vm)) {
priv->jobActive = QEMU_JOB_MIGRATION_IN;
priv->jobInfo.type = VIR_DOMAIN_JOB_UNBOUNDED;
- priv->jobStart = timeval_to_ms(now);
+ priv->jobStart = now;
}
cleanup:
@@ -1229,8 +1220,9 @@ qemuMigrationPrepareDirect(struct qemud_driver *driver,
int ret = -1;
int internalret;
qemuDomainObjPrivatePtr priv = NULL;
- struct timeval now;
+ unsigned long long now;
qemuMigrationCookiePtr mig = NULL;
+
VIR_DEBUG("driver=%p, dconn=%p, cookiein=%s, cookieinlen=%d, "
"cookieout=%p, cookieoutlen=%p, uri_in=%s, uri_out=%p, "
"dname=%s, dom_xml=%s",
@@ -1238,11 +1230,8 @@ qemuMigrationPrepareDirect(struct qemud_driver *driver,
cookieout, cookieoutlen, NULLSTR(uri_in), uri_out,
NULLSTR(dname), dom_xml);
- if (gettimeofday(&now, NULL) < 0) {
- virReportSystemError(errno, "%s",
- _("cannot get time of day"));
+ if (virTimeMs(&now) < 0)
return -1;
- }
/* The URI passed in may be NULL or a string "tcp://somehostname:port".
*
@@ -1413,7 +1402,7 @@ endjob:
virDomainObjIsActive(vm)) {
priv->jobActive = QEMU_JOB_MIGRATION_IN;
priv->jobInfo.type = VIR_DOMAIN_JOB_UNBOUNDED;
- priv->jobStart = timeval_to_ms(now);
+ priv->jobStart = now;
}
cleanup:
diff --git a/src/util/event_poll.c b/src/util/event_poll.c
index df2b28c..285ba50 100644
--- a/src/util/event_poll.c
+++ b/src/util/event_poll.c
@@ -201,11 +201,12 @@ int virEventPollRemoveHandle(int watch) {
int virEventPollAddTimeout(int frequency,
virEventTimeoutCallback cb,
void *opaque,
- virFreeCallback ff) {
- struct timeval now;
+ virFreeCallback ff)
+{
+ unsigned long long now;
int ret;
EVENT_DEBUG("Adding timer %d with %d ms freq", nextTimer, frequency);
- if (gettimeofday(&now, NULL) < 0) {
+ if (virTimeMs(&now) < 0) {
return -1;
}
@@ -227,9 +228,7 @@ int virEventPollAddTimeout(int frequency,
eventLoop.timeouts[eventLoop.timeoutsCount].opaque = opaque;
eventLoop.timeouts[eventLoop.timeoutsCount].deleted = 0;
eventLoop.timeouts[eventLoop.timeoutsCount].expiresAt =
- frequency >= 0 ? frequency +
- (((unsigned long long)now.tv_sec)*1000) +
- (((unsigned long long)now.tv_usec)/1000) : 0;
+ frequency >= 0 ? frequency + now : 0;
eventLoop.timeoutsCount++;
ret = nextTimer-1;
@@ -238,8 +237,9 @@ int virEventPollAddTimeout(int frequency,
return ret;
}
-void virEventPollUpdateTimeout(int timer, int frequency) {
- struct timeval tv;
+void virEventPollUpdateTimeout(int timer, int frequency)
+{
+ unsigned long long now;
int i;
EVENT_DEBUG("Updating timer %d timeout with %d ms freq", timer,
frequency);
@@ -248,7 +248,7 @@ void virEventPollUpdateTimeout(int timer, int frequency) {
return;
}
- if (gettimeofday(&tv, NULL) < 0) {
+ if (virTimeMs(&now) < 0) {
return;
}
@@ -257,9 +257,7 @@ void virEventPollUpdateTimeout(int timer, int frequency) {
if (eventLoop.timeouts[i].timer == timer) {
eventLoop.timeouts[i].frequency = frequency;
eventLoop.timeouts[i].expiresAt =
- frequency >= 0 ? frequency +
- (((unsigned long long)tv.tv_sec)*1000) +
- (((unsigned long long)tv.tv_usec)/1000) : 0;
+ frequency >= 0 ? frequency + now : 0;
virEventPollInterruptLocked();
break;
}
@@ -321,18 +319,12 @@ static int virEventPollCalculateTimeout(int *timeout) {
/* Calculate how long we should wait for a timeout if needed */
if (then > 0) {
- struct timeval tv;
+ unsigned long long now;
- if (gettimeofday(&tv, NULL) < 0) {
- virReportSystemError(errno, "%s",
- _("Unable to get current time"));
+ if (virTimeMs(&now) < 0)
return -1;
- }
-
- *timeout = then -
- ((((unsigned long long)tv.tv_sec)*1000) +
- (((unsigned long long)tv.tv_usec)/1000));
+ *timeout = then - now;
if (*timeout < 0)
*timeout = 0;
} else {
@@ -397,21 +389,16 @@ static struct pollfd *virEventPollMakePollFDs(int *nfds) {
*
* Returns 0 upon success, -1 if an error occurred
*/
-static int virEventPollDispatchTimeouts(void) {
- struct timeval tv;
+static int virEventPollDispatchTimeouts(void)
+{
unsigned long long now;
int i;
/* Save this now - it may be changed during dispatch */
int ntimeouts = eventLoop.timeoutsCount;
VIR_DEBUG("Dispatch %d", ntimeouts);
- if (gettimeofday(&tv, NULL) < 0) {
- virReportSystemError(errno, "%s",
- _("Unable to get current time"));
+ if (virTimeMs(&now) < 0)
return -1;
- }
- now = (((unsigned long long)tv.tv_sec)*1000) +
- (((unsigned long long)tv.tv_usec)/1000);
for (i = 0 ; i < ntimeouts ; i++) {
if (eventLoop.timeouts[i].deleted || eventLoop.timeouts[i].frequency < 0)
ACK, this cleans things up on top of previous patch and looks correct
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/