qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alex Bligh <alex@alex.org.uk>
To: Mike Day <ncmike@ncultra.org>
Cc: Ping Fan Liu <pingfank@linux.vnet.ibm.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	qemu-devel@nongnu.org, Alex Bligh <alex@alex.org.uk>,
	Anthony Liguori <anthony@codemonkey.ws>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v4 2/3] qemu-timer: make qemu_timer_mod_ns() and qemu_timer_del() thread-safe
Date: Mon, 30 Sep 2013 14:34:42 +0100	[thread overview]
Message-ID: <73208DCACC5648DDB3E030CD@Ximines.local> (raw)
In-Reply-To: <CAGaKXu3fxe9-+8x16y3FkUG68OCc0s1qGUW4L=xWGFxYLFKgHQ@mail.gmail.com>

Mike,

>> > void qemu_clock_notify(QEMUClockType type)
...
>> > int64_t qemu_clock_deadline_ns_all(QEMUClockType type)
...
>> > I think these functions are always called now with the BQL held, so I
>> > wonder if they are good candidates for RCU?
>>
>> These routines iterate through the list of timerlists held by
>> a clock.
>>
>> They do not iterate through the list of active timers in a timer
>> list. I believe the latter is what active_timers_lock protects.
>>
>> The list of timers attached to a clock is only modified when timers
>> are created and deleted which is (currently) under the BQL.
>>
>
>
>
> Sorry, and thanks for the correction re: active_timers_lock. I should
> have said that clock->timerlists may need its own mutex if and when we
> remove the BQL from the timer code.

Correct. The list of timerlists is only modified when a
QEMUTimerListGroup is created or destroyed (currently when an
AioContext is created or destroyed), and that is done with the
BQL held.

As you point out, it's currently walked by a couple of functions
that also have the BQL held.

I think the most likely change here is that the walkers might
move outside the BQL. Given modification of this list is so rare,
the lock would be very very read heavy, so RCU is probably a
sensible option.

This link may (or may not) help in understanding:
  http://blog.alex.org.uk/2013/08/24/changes-to-qemus-timer-system/

-- 
Alex Bligh

  reply	other threads:[~2013-09-30 13:34 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-12  9:02 [Qemu-devel] [PATCH v4 0/3] qemu-timer: make qemu_timer_mod_ns() and qemu_timer_del() thread-safe Stefan Hajnoczi
2013-09-12  9:02 ` [Qemu-devel] [PATCH v4 1/3] qemu-timer: drop outdated signal safety comments Stefan Hajnoczi
2013-09-12  9:02 ` [Qemu-devel] [PATCH v4 2/3] qemu-timer: make qemu_timer_mod_ns() and qemu_timer_del() thread-safe Stefan Hajnoczi
2013-09-30 12:45   ` Mike Day
2013-09-30 12:55     ` Alex Bligh
2013-09-30 13:18       ` Mike Day
2013-09-30 13:34         ` Alex Bligh [this message]
2013-09-30 14:31           ` Mike Day
2013-10-07 12:20           ` Paolo Bonzini
2013-10-07 16:14             ` Mike Day
2013-09-12  9:02 ` [Qemu-devel] [PATCH v4 3/3] qemu-timer: do not take the lock in timer_pending Stefan Hajnoczi
2013-09-18 13:51 ` [Qemu-devel] [PATCH v4 0/3] qemu-timer: make qemu_timer_mod_ns() and qemu_timer_del() thread-safe Stefan Hajnoczi

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=73208DCACC5648DDB3E030CD@Ximines.local \
    --to=alex@alex.org.uk \
    --cc=anthony@codemonkey.ws \
    --cc=ncmike@ncultra.org \
    --cc=pbonzini@redhat.com \
    --cc=pingfank@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).