[lkml]   [2002]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [PATCH] NMI request/release, version 4
    On Wed, Oct 23, 2002 at 04:53:34PM -0500, Corey Minyard wrote:
    > >After local_irq_count() went away, the idle CPU check was broken
    > >and that meant that if you had an idle CPU, it could hold up RCU
    > >grace period completion.
    > >
    > Ah, much better. That seems to fix it.

    Great! Do you have any latency numbers ? Just curious.

    > >It might just be simpler to use completions instead -
    > >
    > > call_rcu(&(handler->rcu), free_nmi_handler, handler);
    > > init_completion(&handler->completion);
    > > spin_unlock_irqrestore(&nmi_handler_lock, flags);
    > > wait_for_completion(&handler->completion);
    > >
    > >and do
    > >
    > > complete(&handler->completion);
    > >
    > >in the the RCU callback.
    > >
    > I was working under the assumption that the spinlocks were needed. But
    > now I see that there are spinlocks in wait_for_completion. You did get
    > init_completion() and call_rcu() backwards, they would need to be the
    > opposite order, I think.

    AFAICS, the ordering of call_rcu() and init_completion should not matter
    because the CPU that is executing them would not have gone
    through a quiescent state and thus the RCU callback cannot happen.
    Only after a context swtich in wait_for_completion(), the callback
    is possible.

    > >Also, now I think your original idea of "Don't do this!" :) was right.
    > >Waiting until an nmi handler is seen unlinked could make a task
    > >block for a long time if another task re-installs it. You should
    > >probably just fail installation of a busy handler (checked under
    > >lock).
    > >
    > Since just about all of these will be in modules at unload time, I'm
    > thinking that the way it is now is better. Otherwise, someone will mess
    > it up. IMHO, it's much more likely that someone doesn't handle the
    > callback correctly than someone reused the value before the call that
    > releases it returns. I'd prefer to leave it the way it is now.

    Oh, I didn't mean the part about waiting in release_nmi() until
    the release is complete (RCU callback done). That is absolutely
    necessary. I was talking about looping until the handler is
    not busy any more. I think it is safe to just do a wait_for_completion()
    and return in release_nmi().


    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 13:30    [W:0.022 / U:160.904 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site