• Peter Xu's avatar
    smp: Allow smp_call_function_single_async() to insert locked csd · 5a18ceca
    Peter Xu authored
    Previously we will raise an warning if we want to insert a csd object
    which is with the LOCK flag set, and if it happens we'll also wait for
    the lock to be released.  However, this operation does not match
    perfectly with how the function is named - the name with "_async"
    suffix hints that this function should not block, while we will.
    
    This patch changed this behavior by simply return -EBUSY instead of
    waiting, at the meantime we allow this operation to happen without
    warning the user to change this into a feature when the caller wants
    to "insert a csd object, if it's there, just wait for that one".
    
    This is pretty safe because in flush_smp_call_function_queue() for
    async csd objects (where csd->flags&SYNC is zero) we'll first do the
    unlock then we call the csd->func().  So if we see the csd->flags&LOCK
    is true in smp_call_function_single_async(), then it's guaranteed that
    csd->func() will be called after this smp_call_function_single_async()
    returns -EBUSY.
    
    Update the comment of the function too to refect this.
    Signed-off-by: default avatarPeter Xu <peterx@redhat.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Link: https://lkml.kernel.org/r/20191216213125.9536-2-peterx@redhat.com
    5a18ceca
smp.c 21.9 KB