]> git.baikalelectronics.ru Git - kernel.git/commit
smp: Allow smp_call_function_single_async() to insert locked csd
authorPeter Xu <peterx@redhat.com>
Mon, 16 Dec 2019 21:31:23 +0000 (16:31 -0500)
committerIngo Molnar <mingo@kernel.org>
Fri, 6 Mar 2020 12:42:28 +0000 (13:42 +0100)
commit40af6a83a34ee4c6e6ea23faf3bfb62eb5acb5e2
treeee7d4657d75a83bdd336a4a7be4e3cc90f901812
parentda9af775549478b1a54a86cc9542eac351a4db4b
smp: Allow smp_call_function_single_async() to insert locked csd

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: Peter Xu <peterx@redhat.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lkml.kernel.org/r/20191216213125.9536-2-peterx@redhat.com
kernel/smp.c