|
Juergen Gross |
10244d |
Patch-mainline: v5.10-rc1
|
|
Juergen Gross |
10244d |
Git-commit: e48c15b796d412ede883bb2ef7779b2a142f7962
|
|
Juergen Gross |
10244d |
References: bsc#1180846
|
|
Juergen Gross |
10244d |
From: "Paul E. McKenney" <paulmck@kernel.org>
|
|
Juergen Gross |
10244d |
Date: Mon, 29 Jun 2020 17:21:32 -0700
|
|
Juergen Gross |
10244d |
Subject: [PATCH] smp: Add source and destination CPUs to __call_single_data
|
|
Juergen Gross |
10244d |
|
|
Juergen Gross |
10244d |
This commit adds a destination CPU to __call_single_data, and is inspired
|
|
Juergen Gross |
10244d |
by an earlier commit by Peter Zijlstra. This version adds #ifdef to
|
|
Juergen Gross |
10244d |
permit use by 32-bit systems and supplying the destination CPU for all
|
|
Juergen Gross |
10244d |
smp_call_function*() requests, not just smp_call_function_single().
|
|
Juergen Gross |
10244d |
|
|
Juergen Gross |
10244d |
If need be, 32-bit systems could be accommodated by shrinking the flags
|
|
Juergen Gross |
10244d |
field to 16 bits (the atomic_t variant is currently unused) and by
|
|
Juergen Gross |
10244d |
providing only eight bits for CPU on such systems.
|
|
Juergen Gross |
10244d |
|
|
Juergen Gross |
10244d |
It is not clear that the addition of the fields to __call_single_node
|
|
Juergen Gross |
10244d |
are really needed.
|
|
Juergen Gross |
10244d |
|
|
Juergen Gross |
10244d |
[ paulmck: Apply Boqun Feng feedback on 32-bit builds. ]
|
|
Juergen Gross |
10244d |
Link: https://lore.kernel.org/lkml/20200615164048.GC2531@hirez.programming.kicks-ass.net/
|
|
Juergen Gross |
10244d |
Cc: Peter Zijlstra <peterz@infradead.org>
|
|
Juergen Gross |
10244d |
Cc: Ingo Molnar <mingo@kernel.org>
|
|
Juergen Gross |
10244d |
Cc: Thomas Gleixner <tglx@linutronix.de>
|
|
Juergen Gross |
10244d |
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
Juergen Gross |
10244d |
Cc: Frederic Weisbecker <frederic@kernel.org>
|
|
Juergen Gross |
10244d |
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
|
|
Juergen Gross |
10244d |
Signed-off-by: Juergen Gross <jgross@suse.com>
|
|
Juergen Gross |
10244d |
---
|
|
Juergen Gross |
10244d |
include/linux/smp.h | 3 +++
|
|
Juergen Gross |
10244d |
kernel/smp.c | 6 ++++++
|
|
Juergen Gross |
10244d |
2 files changed, 9 insertions(+)
|
|
Juergen Gross |
10244d |
|
|
Juergen Gross |
10244d |
diff --git a/include/linux/smp.h b/include/linux/smp.h
|
|
Juergen Gross |
10244d |
index 80d557ef8a11..9f13966d3d92 100644
|
|
Juergen Gross |
10244d |
--- a/include/linux/smp.h
|
|
Juergen Gross |
10244d |
+++ b/include/linux/smp.h
|
|
Juergen Gross |
10244d |
@@ -20,6 +20,9 @@ struct __call_single_data {
|
|
Juergen Gross |
10244d |
smp_call_func_t func;
|
|
Juergen Gross |
10244d |
void *info;
|
|
Juergen Gross |
10244d |
unsigned int flags;
|
|
Juergen Gross |
10244d |
+#ifdef CONFIG_64BIT
|
|
Juergen Gross |
10244d |
+ u16 src, dst;
|
|
Juergen Gross |
10244d |
+#endif
|
|
Juergen Gross |
10244d |
};
|
|
Juergen Gross |
10244d |
|
|
Juergen Gross |
10244d |
/* Use __aligned() to avoid to use 2 cache lines for 1 csd */
|
|
Juergen Gross |
10244d |
diff --git a/kernel/smp.c b/kernel/smp.c
|
|
Juergen Gross |
10244d |
index d0ae8eb6bf8b..865a876f83ce 100644
|
|
Juergen Gross |
10244d |
--- a/kernel/smp.c
|
|
Juergen Gross |
10244d |
+++ b/kernel/smp.c
|
|
Juergen Gross |
10244d |
@@ -164,6 +164,9 @@ int generic_exec_single(int cpu, call_single_data_t *csd,
|
|
Juergen Gross |
10244d |
|
|
Juergen Gross |
10244d |
csd->func = func;
|
|
Juergen Gross |
10244d |
csd->info = info;
|
|
Juergen Gross |
10244d |
+#ifdef CONFIG_64BIT
|
|
Juergen Gross |
10244d |
+ csd->dst = cpu;
|
|
Juergen Gross |
10244d |
+#endif
|
|
Juergen Gross |
10244d |
|
|
Juergen Gross |
10244d |
/*
|
|
Juergen Gross |
10244d |
* The list addition should be visible before sending the IPI
|
|
Juergen Gross |
10244d |
@@ -470,6 +473,9 @@ static void smp_call_function_many(const struct cpumask *mask,
|
|
Juergen Gross |
10244d |
csd->flags |= CSD_FLAG_SYNCHRONOUS;
|
|
Juergen Gross |
10244d |
csd->func = func;
|
|
Juergen Gross |
10244d |
csd->info = info;
|
|
Juergen Gross |
10244d |
+#ifdef CONFIG_64BIT
|
|
Juergen Gross |
10244d |
+ csd->dst = cpu;
|
|
Juergen Gross |
10244d |
+#endif
|
|
Juergen Gross |
10244d |
if (llist_add(&csd->llist, &per_cpu(call_single_queue, cpu)))
|
|
Juergen Gross |
10244d |
__cpumask_set_cpu(cpu, cfd->cpumask_ipi);
|
|
Juergen Gross |
10244d |
}
|
|
Juergen Gross |
10244d |
--
|
|
Juergen Gross |
10244d |
2.26.2
|
|
Juergen Gross |
10244d |
|