lkml.org 
[lkml]   [2007]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] [14/58] x86_64: Add on_cpu_single
    Hi Andi,

    On 7/19/07, Andi Kleen <ak@suse.de> wrote:
    >
    > Call a function on a target CPU but do the right thing when
    > we're already on that CPU. That's the main difference from
    > smp_call_function_single
    > which does the wrong thing in this case (erroring out)

    I think this is no longer the case, is it? With KVM updates already
    merged in latest mainline -git, that modified smp_call_function_single()
    behaviour ...

    > +#ifdef CONFIG_SMP
    > +/* Similar to smp_call_function_single, but DTRT when we're already
    > + on the right CPU. */
    > +static inline void on_cpu_single(int cpu, void (*func)(void *), void *info)
    > +{
    > + int me = get_cpu();
    > + if (cpu == me) {
    > + func(info);
    > + put_cpu();
    > + } else {
    > + put_cpu();
    > + /* wait is forced on because the me==cpu case above will always wait */
    > + smp_call_function_single(cpu, func, info, 0, 1);

    In any case, this is unsafe. smp_call_function_single() -- with the old
    semantics, which is what this patch assumes, obviously -- is quite
    pointless without its _caller_ disabling preemption around it. So the
    put_cpu() must come after the smp_call_function_single, otherwise
    you won't even detect the error that might happen, seeing you're
    ignoring its return and this wrapper being void-returning.

    > + }
    > +}
    > +#else
    > +static inline void on_cpu_single(int cpu, void (*func)(void *), void *info)
    > +{

    WARN_ON(irqs_disabled());
    local_irq_disable();

    > + func(info);

    local_irq_restore();

    > +}
    > +#endif

    ... for the sake of API / behaviour consistency.


    But probably you should just drop this ... with smp_call_function_single's
    new semantics, I don't see this function growing any users.

    Satyam
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-07-19 13:11    [W:5.807 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site