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@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list