From: Nicolai Stange <nicstange@gmail.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Juergen Gross <jgross@suse.com>, Ingo Molnar <mingo@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Davidlohr Bueso <dave@stgolabs.net>,
Richard Weinberger <richard@nod.at>,
linux-kernel@vger.kernel.org,
Nicolai Stange <nicstange@gmail.com>
Subject: [PATCH] smp: smp_call_on_cpu(): use INIT_WORK_ONSTACK() for automatic work_struct
Date: Thu, 22 Sep 2016 20:17:58 +0200 [thread overview]
Message-ID: <20160922181758.3449-1-nicstange@gmail.com> (raw)
This new warning
INFO: trying to register non-static key.
the code is fine but needs lockdep annotation.
turning off the locking correctness validator.
CPU: 0 PID: 82 Comm: kworker/0:1 Not tainted 4.8.0-rc6+ #360
Hardware name: Dell Inc. Latitude E6540/0725FP, BIOS A10 06/26/2014
Workqueue: events smp_call_on_cpu_callback
[...]
Call Trace:
[<ffffffff9542fa55>] dump_stack+0x68/0x93
[<ffffffff950ede3a>] register_lock_class+0x54a/0x550
[<ffffffff950f0178>] __lock_acquire+0x88/0x12a0
[<ffffffff95106f0d>] ? debug_lockdep_rcu_enabled+0x1d/0x20
[<ffffffff950f17b9>] lock_acquire+0xe9/0x1d0
[<ffffffff950b2fe7>] ? process_one_work+0x197/0x6c0
[<ffffffff950b3040>] process_one_work+0x1f0/0x6c0
[<ffffffff950b2fe7>] ? process_one_work+0x197/0x6c0
[<ffffffff950b355e>] worker_thread+0x4e/0x4a0
[<ffffffff950b3510>] ? process_one_work+0x6c0/0x6c0
[<ffffffff950b3510>] ? process_one_work+0x6c0/0x6c0
[<ffffffff950baf0f>] kthread+0xff/0x120
[<ffffffff950bae10>] ? kthread_park+0x60/0x60
[<ffffffff9584d217>] ret_from_fork+0x27/0x40
dcdbas dcdbas: Dell Systems Management Base Driver (version 5.6.0-3.2)
can be bisected to commit e23f22b5cb9e ("dcdbas: Make use of
smp_call_on_cpu()").
The reason is that smp_call_on_cpu(), introduced with commit df8ce9d78a4e
("smp: Add function to execute a function synchronously on a CPU"),
initializes a work_struct with automatic storage duration by means of
__WORK_INITIALIZER().
Use INIT_WORK_ONSTACK() there instead, just like the very similar
work_on_cpu() does.
Fixes: df8ce9d78a4e ("smp: Add function to execute a function
synchronously on a CPU")
Signed-off-by: Nicolai Stange <nicstange@gmail.com>
---
kernel/smp.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/kernel/smp.c b/kernel/smp.c
index f4f6137..a129ac3 100644
--- a/kernel/smp.c
+++ b/kernel/smp.c
@@ -759,7 +759,6 @@ static void smp_call_on_cpu_callback(struct work_struct *work)
int smp_call_on_cpu(unsigned int cpu, int (*func)(void *), void *par, bool phys)
{
struct smp_call_on_cpu_struct sscs = {
- .work = __WORK_INITIALIZER(sscs.work, smp_call_on_cpu_callback),
.done = COMPLETION_INITIALIZER_ONSTACK(sscs.done),
.func = func,
.data = par,
@@ -769,9 +768,13 @@ int smp_call_on_cpu(unsigned int cpu, int (*func)(void *), void *par, bool phys)
if (cpu >= nr_cpu_ids || !cpu_online(cpu))
return -ENXIO;
+ INIT_WORK_ONSTACK(&sscs.work, smp_call_on_cpu_callback);
+
queue_work_on(cpu, system_wq, &sscs.work);
wait_for_completion(&sscs.done);
+ destroy_work_on_stack(&sscs.work);
+
return sscs.ret;
}
EXPORT_SYMBOL_GPL(smp_call_on_cpu);
--
2.10.0
next reply other threads:[~2016-09-22 18:18 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-22 18:17 Nicolai Stange [this message]
2016-09-22 18:44 ` [PATCH] smp: smp_call_on_cpu(): use INIT_WORK_ONSTACK() for automatic work_struct Peter Zijlstra
2016-09-22 19:15 ` Nicolai Stange
2016-09-23 7:21 ` Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160922181758.3449-1-nicstange@gmail.com \
--to=nicstange@gmail.com \
--cc=dave@stgolabs.net \
--cc=jgross@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=richard@nod.at \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.