From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58443) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XtaOd-0005jt-Mp for qemu-devel@nongnu.org; Wed, 26 Nov 2014 06:04:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XtaOY-0007zr-Ox for qemu-devel@nongnu.org; Wed, 26 Nov 2014 06:04:31 -0500 Received: from mx1.redhat.com ([209.132.183.28]:55320) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XtaOY-0007zi-HD for qemu-devel@nongnu.org; Wed, 26 Nov 2014 06:04:26 -0500 Message-ID: <5475B3AB.1040402@redhat.com> Date: Wed, 26 Nov 2014 12:04:11 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <20141126103841.7772.11864.stgit@PASHA-ISP> <20141126104049.7772.3594.stgit@PASHA-ISP> In-Reply-To: <20141126104049.7772.3594.stgit@PASHA-ISP> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [RFC PATCH v5 22/31] timer: introduce new QEMU_CLOCK_VIRTUAL_RT clock List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Pavel Dovgalyuk , qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, peter.crosthwaite@xilinx.com, alex.bennee@linaro.org, mark.burton@greensocs.com, real@ispras.ru, batuzovk@ispras.ru, maria.klimushenkova@ispras.ru, afaerber@suse.de, fred.konrad@greensocs.com On 26/11/2014 11:40, Pavel Dovgalyuk wrote: > This patch introduces new QEMU_CLOCK_VIRTUAL_RT clock, which > should be used for icount warping. Separate timer is needed > for replaying the execution, because warping callbacks should > be deterministic. We cannot make realtime clock deterministic > because it is used for screen updates and other simulator-specific > actions. That is why we added new clock which is recorded and > replayed when needed. > > Signed-off-by: Pavel Dovgalyuk > --- > include/qemu/timer.h | 7 +++++++ > qemu-timer.c | 2 ++ > replay/replay.h | 4 +++- > 3 files changed, 12 insertions(+), 1 deletions(-) > > diff --git a/include/qemu/timer.h b/include/qemu/timer.h > index 7b43331..df27157 100644 > --- a/include/qemu/timer.h > +++ b/include/qemu/timer.h > @@ -37,12 +37,19 @@ > * is suspended, and it will reflect system time changes the host may > * undergo (e.g. due to NTP). The host clock has the same precision as > * the virtual clock. > + * > + * @QEMU_CLOCK_VIRTUAL_RT: realtime clock used for icount warp > + * > + * This clock runs as a realtime clock, but is used for icount warp > + * and thus should be traced with record/replay to make warp function > + * behave deterministically. > */ I think it should also stop/restart across "stop" and "cont" commands, similar to QEMU_CLOCK_VIRTUAL. This is as simple as changing get_clock() to cpu_get_clock(). This way, QEMU_CLOCK_VIRTUAL_RT is "what QEMU_CLOCK_VIRTUAL does without -icount". This makes a lot of sense and can be merged in 2.3 independent of the rest of the series. Paolo > typedef enum { > QEMU_CLOCK_REALTIME = 0, > QEMU_CLOCK_VIRTUAL = 1, > QEMU_CLOCK_HOST = 2, > + QEMU_CLOCK_VIRTUAL_RT = 3, > QEMU_CLOCK_MAX > } QEMUClockType; > > diff --git a/qemu-timer.c b/qemu-timer.c > index 8307913..3f99af5 100644 > --- a/qemu-timer.c > +++ b/qemu-timer.c > @@ -567,6 +567,8 @@ int64_t qemu_clock_get_ns(QEMUClockType type) > notifier_list_notify(&clock->reset_notifiers, &now); > } > return now; > + case QEMU_CLOCK_VIRTUAL_RT: > + return REPLAY_CLOCK(REPLAY_CLOCK_VIRTUAL_RT, get_clock()); > } > } > > diff --git a/replay/replay.h b/replay/replay.h > index 143fe85..0c02e03 100755 > --- a/replay/replay.h > +++ b/replay/replay.h > @@ -22,8 +22,10 @@ > #define REPLAY_CLOCK_REAL_TICKS 0 > /* host_clock */ > #define REPLAY_CLOCK_HOST 1 > +/* virtual_rt_clock */ > +#define REPLAY_CLOCK_VIRTUAL_RT 2 > > -#define REPLAY_CLOCK_COUNT 2 > +#define REPLAY_CLOCK_COUNT 3 > > extern ReplayMode replay_mode; > extern char *replay_image_suffix; >