• Thomas Gleixner's avatar
    x86/smp: Enhance native_send_call_func_ipi() · 832df3d4
    Thomas Gleixner authored
    Nadav noticed that the cpumask allocations in native_send_call_func_ipi()
    are noticeable in microbenchmarks.
    
    Use the new cpumask_or_equal() function to simplify the decision whether
    the supplied target CPU mask is either equal to cpu_online_mask or equal to
    cpu_online_mask except for the CPU on which the function is invoked.
    
    cpumask_or_equal() or's the target mask and the cpumask of the current CPU
    together and compares it to cpu_online_mask.
    
    If the result is false, use the mask based IPI function, otherwise check
    whether the current CPU is set in the target mask and invoke either the
    send_IPI_all() or the send_IPI_allbutselt() APIC callback.
    
    Make the shorthand decision also depend on the static key which enables
    shorthand mode. That allows to remove the extra cpumask comparison with
    cpu_callout_mask.
    Reported-by: default avatarNadav Amit <namit@vmware.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20190722105220.768238809@linutronix.de
    832df3d4
ipi.c 8 KB