All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: Alex Bligh <alex@alex.org.uk>
Cc: Kevin Wolf <kwolf@redhat.com>,
	Anthony Liguori <aliguori@us.ibm.com>,
	qemu-devel@nongnu.org, liu ping fan <qemulist@gmail.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>,
	rth@twiddle.net
Subject: Re: [Qemu-devel] [RFC] [PATCHv10 08/31] aio / timers: Split QEMUClock into QEMUClock and QEMUTimerList
Date: Mon, 12 Aug 2013 18:14:08 +0200	[thread overview]
Message-ID: <520909D0.3040203@siemens.com> (raw)
In-Reply-To: <1376239405-4084-9-git-send-email-alex@alex.org.uk>

On 2013-08-11 18:43, Alex Bligh wrote:
> Split QEMUClock into QEMUClock and QEMUTimerList so that we can
> have more than one QEMUTimerList associated with the same clock.
> 
> Introduce a main_loop_timerlist concept and make existing
> qemu_clock_* calls that actually should operate on a QEMUTimerList
> call the relevant QEMUTimerList implementations, using the clock's
> default timerlist. This vastly reduces the invasiveness of this
> change and means the API stays constant for existing users.
> 
> Introduce a list of QEMUTimerLists associated with each clock
> so that reenabling the clock can cause all the notifiers
> to be called. Note the code to do the notifications is added
> in a later patch.
> 
> Switch QEMUClockType to an enum. Remove global variables vm_clock,
> host_clock and rt_clock and add compatibility defines. Do not
> fix qemu_next_alarm_deadline as it's going to be deleted.
> 
> Add qemu_clock_use_for_deadline to indicate whether a particular
> clock should be used for deadline calculations. When use_icount
> is true, vm_clock should not be used for deadline calculations
> as it does not contain a nanosecond count. Instead, icount
> timeouts come from the execution thread doing aio_notify or
> qemu_notify as appropriate. This function is used in the next
> patch.
> 
> Signed-off-by: Alex Bligh <alex@alex.org.uk>
> ---
>  include/qemu/timer.h |  347 ++++++++++++++++++++++++++++++++++++++++++++++----
>  qemu-timer.c         |  207 ++++++++++++++++++++++--------
>  2 files changed, 475 insertions(+), 79 deletions(-)
> 
> diff --git a/include/qemu/timer.h b/include/qemu/timer.h
> index fcb6a42..a217a81 100644
> --- a/include/qemu/timer.h
> +++ b/include/qemu/timer.h
> @@ -11,34 +11,84 @@
>  #define SCALE_US 1000
>  #define SCALE_NS 1
>  
> -#define QEMU_CLOCK_REALTIME 0
> -#define QEMU_CLOCK_VIRTUAL  1
> -#define QEMU_CLOCK_HOST     2
> +/**
> + * QEMUClockType:
> + *
> + * The following clock types are available:
> + *
> + * @QEMU_CLOCK_REALTIME: Real time clock
> + *
> + * The real time clock should be used only for stuff which does not
> + * change the virtual machine state, as it is run even if the virtual
> + * machine is stopped. The real time clock has a frequency of 1000
> + * Hz.
> + *
> + * Formerly rt_clock
> + *
> + * @QEMU_CLOCK_VIRTUAL: virtual clock
> + *
> + * The virtual clock is only run during the emulation. It is stopped
> + * when the virtual machine is stopped. Virtual timers use a high
> + * precision clock, usually cpu cycles (use ticks_per_sec).
> + *
> + * Formerly vm_clock
> + *
> + * @QEMU_CLOCK_HOST: host clock
> + *
> + * The host clock should be use for device models that emulate accurate
> + * real time sources. It will continue to run when the virtual machine
> + * 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.
> + *
> + * Formerly host_clock
> + */
> +
> +typedef enum {
> +    QEMU_CLOCK_REALTIME = 0,
> +    QEMU_CLOCK_VIRTUAL = 1,
> +    QEMU_CLOCK_HOST = 2,
> +    QEMU_CLOCK_MAX
> +} QEMUClockType;
>  
>  typedef struct QEMUClock QEMUClock;
> +typedef struct QEMUTimerList QEMUTimerList;
>  typedef void QEMUTimerCB(void *opaque);
>  
> -/* The real time clock should be used only for stuff which does not
> -   change the virtual machine state, as it is run even if the virtual
> -   machine is stopped. The real time clock has a frequency of 1000
> -   Hz. */
> -extern QEMUClock *rt_clock;
> +typedef struct QEMUTimer {
> +    int64_t expire_time;        /* in nanoseconds */
> +    QEMUTimerList *timer_list;
> +    QEMUTimerCB *cb;
> +    void *opaque;
> +    QEMUTimer *next;
> +    int scale;
> +} QEMUTimer;

The typedef part is a duplication of what we already have in
qemu/typedefs.h and breaks the build for me. Just declare the struct here.

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux

  reply	other threads:[~2013-08-12 16:14 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-11 16:42 [Qemu-devel] [RFC] [PATCHv10 00/31] aio / timers: Add AioContext timers and use ppoll Alex Bligh
2013-08-11 16:42 ` [Qemu-devel] [RFC] [PATCHv10 01/31] aio / timers: Rename qemu_timer_* functions Alex Bligh
2013-08-11 16:42 ` [Qemu-devel] [RFC] [PATCHv10 02/31] aio / timers: Rename qemu_new_clock and expose clock types Alex Bligh
2013-08-11 16:42 ` [Qemu-devel] [RFC] [PATCHv10 03/31] aio / timers: add qemu-timer.c utility functions Alex Bligh
2013-08-11 16:42 ` [Qemu-devel] [RFC] [PATCHv10 04/31] aio / timers: Consistent treatment of disabled clocks for deadlines Alex Bligh
2013-08-11 16:42 ` [Qemu-devel] [RFC] [PATCHv10 05/31] aio / timers: add ppoll support with qemu_poll_ns Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 06/31] aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 07/31] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 08/31] aio / timers: Split QEMUClock into QEMUClock and QEMUTimerList Alex Bligh
2013-08-12 16:14   ` Jan Kiszka [this message]
2013-08-12 16:25     ` Alex Bligh
2013-08-12 16:36       ` Jan Kiszka
2013-08-12 17:04       ` Richard Henderson
2013-08-12 17:25         ` Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 09/31] aio / timers: Untangle include files Alex Bligh
2013-08-12 16:40   ` Jan Kiszka
2013-08-12 17:04     ` Alex Bligh
2013-08-12 17:12       ` Jan Kiszka
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 10/31] aio / timers: Add QEMUTimerListGroup and helper functions Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 11/31] aio / timers: Add QEMUTimerListGroup to AioContext Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 12/31] aio / timers: Add a notify callback to QEMUTimerList Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 13/31] aio / timers: aio_ctx_prepare sets timeout from AioContext timers Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 14/31] aio / timers: Add aio_timer_init & aio_timer_new wrappers Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 15/31] aio / timers: Convert aio_poll to use AioContext timers' deadline Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 16/31] aio / timers: Convert mainloop to use timeout Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 17/31] aio / timers: On timer modification, qemu_notify or aio_notify Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 18/31] aio / timers: Introduce new API timer_new and friends Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 19/31] aio / timers: Use all timerlists in icount warp calculations Alex Bligh
2013-08-15 12:30   ` Stefan Hajnoczi
2013-08-15 12:37     ` Alex Bligh
2013-08-15 18:31       ` Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 20/31] aio / timers: Add documentation and new format calls Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 21/31] aio / timers: Remove alarm timers Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 22/31] aio / timers: Remove legacy qemu_clock_deadline & qemu_timerlist_deadline Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 23/31] aio / timers: Add qemu_clock_get_ms and qemu_clock_get_ms Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 24/31] aio / timers: Rearrange timer.h & make legacy functions call non-legacy Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 25/31] aio / timers: Remove main_loop_timerlist Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 26/31] aio / timers: Convert rtc_clock to be a QEMUClockType Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 27/31] aio / timers: convert block_job_sleep_ns and co_sleep_ns to new API Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 28/31] aio / timers: Add test harness for AioContext timers Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 29/31] aio / timers: Add scripts/switch-timer-api Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 30/31] aio / timers: Switch entire codebase to the new timer API Alex Bligh
2013-08-11 16:43 ` [Qemu-devel] [RFC] [PATCHv10 31/31] aio / timers: Remove legacy interface Alex Bligh
2013-08-13 12:22 ` [Qemu-devel] [RFC] [PATCHv10 00/31] aio / timers: Add AioContext timers and use ppoll Jan Kiszka
2013-08-13 12:44   ` Alex Bligh
2013-08-13 12:57     ` Jan Kiszka
2013-08-13 13:12   ` Alex Bligh
2013-08-13 13:25     ` Jan Kiszka
2013-08-13 13:39       ` Alex Bligh
2013-08-13 13:45         ` Jan Kiszka
2013-08-13 13:56           ` Alex Bligh
2013-08-13 14:22           ` Stefan Hajnoczi
2013-08-13 14:26             ` Alex Bligh
2013-08-13 14:34               ` Jan Kiszka
2013-08-14 13:09               ` Stefan Hajnoczi
2013-09-17 16:09             ` Jan Kiszka
2013-09-17 16:19               ` Paolo Bonzini
2013-09-17 16:38                 ` Alex Bligh
2013-09-17 16:50                   ` Jan Kiszka
2013-09-17 17:03                     ` Alex Bligh
2013-09-17 17:04                     ` Paolo Bonzini
2013-09-17 17:32                       ` Alex Bligh
2013-09-18  7:57                         ` Paolo Bonzini
2013-09-18  8:23                           ` Alex Bligh
2013-09-18  9:02                             ` Alex Bligh
2013-09-18  9:25                               ` Paolo Bonzini
2013-09-24 13:47                                 ` Stefan Hajnoczi
2013-09-24 13:48                             ` Stefan Hajnoczi
2013-08-15 12:40 ` Stefan Hajnoczi
2013-08-15 13:05   ` Alex Bligh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=520909D0.3040203@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=alex@alex.org.uk \
    --cc=aliguori@us.ibm.com \
    --cc=kwolf@redhat.com \
    --cc=morita.kazutaka@lab.ntt.co.jp \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemulist@gmail.com \
    --cc=rth@twiddle.net \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.