All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@gmail.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] [PATCHv6 05/16] aio / timers: Split QEMUClock into QEMUClock and QEMUTimerList
Date: Wed, 7 Aug 2013 09:27:36 +0200	[thread overview]
Message-ID: <20130807072735.GC19825@stefanha-thinkpad.redhat.com> (raw)
In-Reply-To: <314ACE1E3E8E2438F2A4AB5F@nimrod.local>

On Tue, Aug 06, 2013 at 03:52:37PM +0100, Alex Bligh wrote:
> Stefan,
> 
> >>I think I disagree here.
> >>
> >>At the very least we should put the conversion to use the new API
> >>into a separate patch (possibly a separate patch set). It's fantastically
> >>intrusive.
> >
> >Yes, it should be a separate patch.
> ...
> >>Even if the period is just a month (i.e. the old API goes before 1.7),
> >>why break things unnecessarily?
> >
> >Nothing upstream breaks.  Only out-of-tree code breaks but that's life.
> >
> >What's important is that upstream will be clean and easy to understand
> >or debug.  Given how undocumented the QEMU codebase is, leaving legacy
> >API layers around just does more to confuse new contributors.
> >
> >That's why I'd really like to transition now instead of leaving things
> >in a more complex state than before.
> 
> OK. I'm just concerned about the potential fall out. If that's
> what everyone wants, I will do a monster patch to fix this up. Need
> that be part of this series? I can't help thinking it would be
> better to have the series applied first.
> 
> >We end up with:
> >
> >AioContext->tlg and default_timerlistgroup.
> >
> >Regarding naming, I think default_timerlistgroup should be called
> >main_loop_timerlistgroup instead.  The meaning of "default" is not
> >obvious.
> 
> I agree. I will change this.
> 
> >Now let's think about how callers will create QEMUTimers:
> >
> >1. AioContext
> >
> >   timer_new(ctx->tlg[QEMU_CLOCK_RT], SCALE_NS, cb, opaque);
> >
> >   Or with a wrapper:
> >
> >   QEMUTimer *aio_new_timer(AioContext *ctx, QEMUClockType type, int
> >scale,                             QEMUTimerCB *cb, void *opaque)
> >   {
> >       return timer_new(ctx->tlg[type], scale, cb, opaque);
> >   }
> >
> >   aio_new_timer(ctx, QEMU_CLOCK_RT, SCALE_NS, cb, opaque);
> 
> I was actually thinking about adding that wrapper anyway.
> 
> Do you think we need to wrap timer_mod, timer_del, timer_free
> etc. to make aio_timer_mod and so forth, even though they are
> a straight pass through?

Those wrappers are not necessary.  Once the caller has their QEMUTimer
pointer they should use the QEMUTimer APIs directly.

> >2. main-loop
> >
> >   /* without legacy qemu_timer_new() */
> >   timer_new(main_loop_tlg[QEMU_CLOCK_RT], SCALE_NS, cb, opaque);
> >
> >   Or with a wrapper:
> >
> >   QEMUTimer *qemu_new_timer(QEMUClockType type, int scale,
> >                             QEMUTimerCB *cb, void *opaque)
> >   {
> >       return timer_new(main_loop_tlg[type], scale, cb, opaque);
> >   }
> >
> >   qemu_new_timer(QEMU_CLOCK_RT, SCALE_NS, cb, opaque);
> >
> >Is this what you have in mind too?
> 
> Yes.
> 
> Certainly qemu_timer_new (as opposed to qemu_new_timer)
> would be a good addition.

Okay, great.  This makes the conversion from legacy QEMUClock functions
pretty straightforward.  It can be done mechanically in a single big
patch that converts the tree.

> >But this doesn't allow for the array indexing that you do in
> >TimerListGroup later.  I didn't know that at this point in the patch
> >series.
> 
> Yep. I'll leave that if that's OK.

Yes, I'm convinced now that the it's worth having.

> >>>> struct QEMUTimer {
> >>>>     int64_t expire_time;	/* in nanoseconds */
> >>>> -    QEMUClock *clock;
> >>>> +    QEMUTimerList *tl;
> >>>
> >>> 'timer_list' is easier to read than just 'tl'.
> >>
> >>It caused a pile of line wrap issues which made the patch harder
> >>to read, so I shortened it. I can put it back if you like.
> >
> >Are you sure it's the QEMUTimer->tl field that causes line wraps?
> >
> >I took a quick look and it seemed like only the QEMUTimerList *tl
> >function argument to the deadline functions could cause line wrap.  The
> >argument variable is unrelated and can stay short since it has a very
> >narrow context - the reader can be expected to remember the tl argument
> >while reading the code for the function.
> 
> >From memory it was lots of ->tl expanding within the code the issue
> rather than the arguments to functions. I'll try again. To be honest
> it's probably easier to change tl to timer_list throughout.

If you convert both that's good too.

> >
> >>>> +bool qemu_clock_use_for_deadline(QEMUClock *clock)
> >>>> +{
> >>>> +    return !(use_icount && (clock->type = QEMU_CLOCK_VIRTUAL));
> >>>> +}
> >>>
> >>> Please use doc comments (see include/object/qom.h for example doc
> >>> comment syntax).  No idea why this function is needed or what it will
> >>> be used for.
> >>
> >>I will comment it, but it mostly does what it says in the tin. Per
> >>Paolo's comment, the vm_clock should not be used for calculation of
> >>deadlines to ppoll etc. if use_icount is true, because it's not actually
> >>in nanoseconds; rather qemu_notify() or aio_notify() get called by the
> >>vm cpu thread when the relevant instruction counter is exceeded.
> >
> >I didn't know that but the explanation makes sense.  Definitely
> >something that could be in a comment.  Perhaps its best to introduce
> >this small helper function in the patch that actually calls it.
> 
> It's preparation for the next patch. I will add a comment in the
> commit message.

Thanks!

  reply	other threads:[~2013-08-07  7:27 UTC|newest]

Thread overview: 128+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1E8E204.8000201@redhat.com>
2013-07-20 18:06 ` [Qemu-devel] [PATCHv2] [RFC 0/7] aio / timers: Add AioContext timers and use ppoll Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 1/7] aio / timers: Remove alarm timers Alex Bligh
2013-07-25  9:10     ` Stefan Hajnoczi
2013-07-25  9:11       ` Paolo Bonzini
2013-07-25  9:38         ` Alex Bligh
2013-07-25  9:37       ` Alex Bligh
2013-07-25  9:38         ` Paolo Bonzini
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 2/7] aio / timers: qemu-timer.c utility functions and add list of clocks Alex Bligh
2013-07-23 21:09     ` Richard Henderson
2013-07-23 21:34       ` Alex Bligh
2013-07-25  9:19     ` Stefan Hajnoczi
2013-07-25  9:46       ` Alex Bligh
2013-07-26  8:26         ` Stefan Hajnoczi
2013-07-25  9:21     ` Stefan Hajnoczi
2013-07-25  9:46       ` Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 3/7] aio / timers: add ppoll support with qemu_g_poll_ns Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 4/7] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 5/7] aio / timers: Add a clock to AioContext Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 6/7] aio / timers: Switch to ppoll, run AioContext timers in aio_poll/aio_dispatch Alex Bligh
2013-07-25  9:33     ` Stefan Hajnoczi
2013-07-25 14:53       ` Alex Bligh
2013-07-26  8:34         ` Stefan Hajnoczi
2013-07-25 18:51       ` Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 7/7] aio / timers: Add test harness for AioContext timers Alex Bligh
2013-07-25  9:37   ` [Qemu-devel] [PATCHv2] [RFC 0/7] aio / timers: Add AioContext timers and use ppoll Stefan Hajnoczi
2013-07-25 22:16     ` [Qemu-devel] [RFC] [PATCHv3 00/12] " Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 01/12] aio / timers: add qemu-timer.c utility functions Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 02/12] aio / timers: add ppoll support with qemu_poll_ns Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 03/12] aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 04/12] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 05/12] aio / timers: Add a clock to AioContext Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 06/12] aio / timers: Add an AioContext pointer to QEMUClock Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 07/12] aio / timers: aio_ctx_prepare sets timeout from AioContext timers Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 08/12] aio / timers: Convert aio_poll to use AioContext timers' deadline Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 09/12] aio / timers: convert mainloop to use timeout Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 10/12] aio / timers: on timer modification, qemu_notify or aio_notify Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 11/12] aio / timers: Remove alarm timers Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 12/12] aio / timers: Add test harness for AioContext timers Alex Bligh
2013-07-25 22:22       ` [Qemu-devel] [RFC] [PATCHv3 00/12] aio / timers: Add AioContext timers and use ppoll Alex Bligh
2013-07-26 18:37         ` [Qemu-devel] [RFC] [PATCHv4 00/13] " Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 01/13] aio / timers: add qemu-timer.c utility functions Alex Bligh
2013-08-01 12:07             ` Paolo Bonzini
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 02/13] aio / timers: add ppoll support with qemu_poll_ns Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 03/13] aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 04/13] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 05/13] aio / timers: Split QEMUClock into QEMUClock and QEMUTimerList Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 06/13] aio / timers: Add a QEMUTimerList to AioContext Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 07/13] aio / timers: Add an AioContext pointer to QEMUTimerList Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 08/13] aio / timers: aio_ctx_prepare sets timeout from AioContext timers Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 09/13] aio / timers: Convert aio_poll to use AioContext timers' deadline Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 10/13] aio / timers: Convert mainloop to use timeout Alex Bligh
2013-08-01 12:41             ` Paolo Bonzini
2013-08-01 13:43               ` Alex Bligh
2013-08-01 14:14                 ` Paolo Bonzini
2013-08-02 13:09                   ` Alex Bligh
2013-08-04 18:09                     ` [Qemu-devel] [RFC] [PATCHv5 00/16] aio / timers: Add AioContext timers and use ppoll Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 01/16] aio / timers: add qemu-timer.c utility functions Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 02/16] aio / timers: add ppoll support with qemu_poll_ns Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 03/16] aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 04/16] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 05/16] aio / timers: Split QEMUClock into QEMUClock and QEMUTimerList Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 06/16] aio / timers: Untangle include files Alex Bligh
2013-08-06 10:10                         ` Stefan Hajnoczi
2013-08-06 11:20                           ` Alex Bligh
2013-08-06 11:48                             ` Stefan Hajnoczi
2013-08-06 23:52                           ` Alex Bligh
2013-08-07  7:19                             ` Stefan Hajnoczi
2013-08-07 10:14                               ` Alex Bligh
2013-08-08  8:34                                 ` Stefan Hajnoczi
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 07/16] aio / timers: Add QEMUTimerListGroup and helper functions Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 08/16] aio / timers: Add QEMUTimerListGroup to AioContext Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 09/16] aio / timers: Add a notify callback to QEMUTimerList Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 10/16] aio / timers: aio_ctx_prepare sets timeout from AioContext timers Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 11/16] aio / timers: Convert aio_poll to use AioContext timers' deadline Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 12/16] aio / timers: Convert mainloop to use timeout Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 13/16] aio / timers: On timer modification, qemu_notify or aio_notify Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 14/16] aio / timers: Use all timerlists in icount warp calculations Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 15/16] aio / timers: Remove alarm timers Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 16/16] aio / timers: Add test harness for AioContext timers Alex Bligh
2013-08-06  9:16                       ` [Qemu-devel] [RFC] [PATCHv6 00/16] aio / timers: Add AioContext timers and use ppoll Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 01/16] aio / timers: add qemu-timer.c utility functions Alex Bligh
2013-08-06 12:02                           ` Stefan Hajnoczi
2013-08-06 12:30                             ` Alex Bligh
2013-08-06 13:59                               ` Stefan Hajnoczi
2013-08-06 14:18                                 ` Alex Bligh
2013-08-07  7:21                                   ` Stefan Hajnoczi
2013-08-07 10:14                                     ` Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 02/16] aio / timers: add ppoll support with qemu_poll_ns Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 03/16] aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 04/16] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 05/16] aio / timers: Split QEMUClock into QEMUClock and QEMUTimerList Alex Bligh
2013-08-06 12:26                           ` Stefan Hajnoczi
2013-08-06 12:49                             ` Alex Bligh
2013-08-06 14:29                               ` Stefan Hajnoczi
2013-08-06 14:52                                 ` Alex Bligh
2013-08-07  7:27                                   ` Stefan Hajnoczi [this message]
2013-08-07 10:16                                     ` Alex Bligh
2013-08-06 23:54                                 ` Alex Bligh
2013-08-06 13:16                             ` Alex Bligh
2013-08-06 14:31                               ` Stefan Hajnoczi
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 06/16] aio / timers: Untangle include files Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 07/16] aio / timers: Add QEMUTimerListGroup and helper functions Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 08/16] aio / timers: Add QEMUTimerListGroup to AioContext Alex Bligh
2013-08-06 12:30                           ` Stefan Hajnoczi
2013-08-06 12:50                             ` Alex Bligh
2013-08-06 14:45                               ` Stefan Hajnoczi
2013-08-06 14:58                                 ` Alex Bligh
2013-08-07  7:28                                   ` Stefan Hajnoczi
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 09/16] aio / timers: Add a notify callback to QEMUTimerList Alex Bligh
2013-08-06 12:34                           ` Stefan Hajnoczi
2013-08-06 12:50                             ` Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 10/16] aio / timers: aio_ctx_prepare sets timeout from AioContext timers Alex Bligh
2013-08-06 12:40                           ` Stefan Hajnoczi
2013-08-06 12:54                             ` Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 11/16] aio / timers: Convert aio_poll to use AioContext timers' deadline Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 12/16] aio / timers: Convert mainloop to use timeout Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 13/16] aio / timers: On timer modification, qemu_notify or aio_notify Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 14/16] aio / timers: Use all timerlists in icount warp calculations Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 15/16] aio / timers: Remove alarm timers Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 16/16] aio / timers: Add test harness for AioContext timers Alex Bligh
2013-08-06  9:29                         ` [Qemu-devel] [RFC] [PATCHv6 00/16] aio / timers: Add AioContext timers and use ppoll Alex Bligh
2013-08-06 11:53                         ` Stefan Hajnoczi
2013-08-06 15:38                         ` Stefan Hajnoczi
2013-08-07 15:43                           ` Paolo Bonzini
2013-08-07 17:20                             ` Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 11/13] aio / timers: on timer modification, qemu_notify or aio_notify Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 12/13] aio / timers: Remove alarm timers Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 13/13] aio / timers: Add test harness for AioContext timers 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=20130807072735.GC19825@stefanha-thinkpad.redhat.com \
    --to=stefanha@gmail.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.