>
>
> On Mon, Sep 30, 2013 at 8:55 AM, Alex Bligh <a...@alex.org.uk> wrote:
> >
> >
> > On 30 Sep 2013, at 13:45, Mike Day wrote:
> >
> > > I've applied this set to Paolo's rcu tree - I see a couple of routines
> > > that appear to need the active_timers_lock:
> > >
> > > (line 137 of qemu-timer.c in my tree)
> > > void qemu_clock_notify(QEMUClockType type)
> > > {
> > >    QEMUTimerList *timer_list;
> > >    QEMUClock *clock = qemu_clock_ptr(type);
> > >    QLIST_FOREACH(timer_list, &clock->timerlists, list) {
> > >        timerlist_notify(timer_list);
> > >    }
> > > }
> > >
> > > (line 228 of qemu-timer.c in my tree)
> > > int64_t qemu_clock_deadline_ns_all(QEMUClockType type)
> > > {
> > >    int64_t deadline = -1;
> > >    QEMUTimerList *timer_list;
> > >    QEMUClock *clock = qemu_clock_ptr(type);
> > >    QLIST_FOREACH(timer_list, &clock->timerlists, list) {
> > >        deadline = qemu_soonest_timeout(deadline,
> > >
>  timerlist_deadline_ns(timer_list));
> > >    }
> > >    return deadline;
> > > }
> > >
> > > 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.

Mike

Reply via email to