From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LwiCz-0005Gq-C5 for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:13 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LwiCr-0005Dn-Et for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:10 -0400 Received: from [199.232.76.173] (port=44671 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LwiCq-0005D8-E4 for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:04 -0400 Received: from mx2.redhat.com ([66.187.237.31]:37797) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LwiCp-0000iZ-H9 for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:03 -0400 Message-Id: <20090422192119.745994813@localhost.localdomain> References: <20090422191504.975476933@localhost.localdomain> Date: Wed, 22 Apr 2009 16:15:08 -0300 From: mtosatti@redhat.com Content-Disposition: inline; filename=move-dyntick-rearm-to-main-loop Subject: [Qemu-devel] [patch 04/14] qemu: explictly rearm alarm timer on main_loop_wait List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, aliguori@us.ibm.com Cc: Marcelo Tosatti - lift notification code out of try_to_rearm_timer/host_alarm_handler - probably going to remove alarm timers via signals sometime soon anyway Signed-off-by: Marcelo Tosatti Index: trunk/vl.c =================================================================== --- trunk.orig/vl.c +++ trunk/vl.c @@ -1346,9 +1346,6 @@ static void host_alarm_handler(int host_ #ifdef _WIN32 struct qemu_alarm_win32 *data = ((struct qemu_alarm_timer*)dwUser)->priv; SetEvent(data->host_alarm); -#else - static const char byte = 0; - write(alarm_timer_wfd, &byte, sizeof(byte)); #endif alarm_timer->flags |= ALARM_FLAG_EXPIRED; @@ -1638,27 +1635,13 @@ static void unix_stop_timer(struct qemu_ #endif /* !defined(_WIN32) */ -static void try_to_rearm_timer(void *opaque) -{ - struct qemu_alarm_timer *t = opaque; -#ifndef _WIN32 - ssize_t len; - /* Drain the notify pipe */ - do { - char buffer[512]; - len = read(alarm_timer_rfd, buffer, sizeof(buffer)); - } while ((len == -1 && errno == EINTR) || len > 0); -#endif +#ifdef _WIN32 - if (t->flags & ALARM_FLAG_EXPIRED) { - alarm_timer->flags &= ~ALARM_FLAG_EXPIRED; - qemu_rearm_alarm_timer(alarm_timer); - } +static void dummy_event_handler(void *opaque) +{ } -#ifdef _WIN32 - static int win32_start_timer(struct qemu_alarm_timer *t) { TIMECAPS tc; @@ -1699,7 +1682,7 @@ static int win32_start_timer(struct qemu return -1; } - qemu_add_wait_object(data->host_alarm, try_to_rearm_timer, t); + qemu_add_wait_object(data->host_alarm, dummy_event_handler, t); return 0; } @@ -1782,11 +1765,6 @@ static int init_timer_alarm(void) goto fail; } -#ifndef _WIN32 - qemu_set_fd_handler2(alarm_timer_rfd, NULL, - try_to_rearm_timer, NULL, t); -#endif - alarm_timer = t; return 0; @@ -3778,6 +3756,12 @@ void main_loop_wait(int timeout) } #endif + /* rearm timer, if not periodic */ + if (alarm_timer->flags & ALARM_FLAG_EXPIRED) { + alarm_timer->flags &= ~ALARM_FLAG_EXPIRED; + qemu_rearm_alarm_timer(alarm_timer); + } + /* vm time timers */ if (vm_running && likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER))) qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL], --