diff options
Diffstat (limited to 'debian/patches-rt/lib-smp_processor_id-Don-t-use-cpumask_equal.patch')
-rw-r--r-- | debian/patches-rt/lib-smp_processor_id-Don-t-use-cpumask_equal.patch | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/debian/patches-rt/lib-smp_processor_id-Don-t-use-cpumask_equal.patch b/debian/patches-rt/lib-smp_processor_id-Don-t-use-cpumask_equal.patch new file mode 100644 index 000000000..4519ecd92 --- /dev/null +++ b/debian/patches-rt/lib-smp_processor_id-Don-t-use-cpumask_equal.patch @@ -0,0 +1,36 @@ +From: Waiman Long <longman@redhat.com> +Date: Thu, 3 Oct 2019 16:36:08 -0400 +Subject: [PATCH] lib/smp_processor_id: Don't use cpumask_equal() +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patches-5.4.3-rt1.tar.xz + +The check_preemption_disabled() function uses cpumask_equal() to see +if the task is bounded to the current CPU only. cpumask_equal() calls +memcmp() to do the comparison. As x86 doesn't have __HAVE_ARCH_MEMCMP, +the slow memcmp() function in lib/string.c is used. + +On a RT kernel that call check_preemption_disabled() very frequently, +below is the perf-record output of a certain microbenchmark: + + 42.75% 2.45% testpmd [kernel.kallsyms] [k] check_preemption_disabled + 40.01% 39.97% testpmd [kernel.kallsyms] [k] memcmp + +We should avoid calling memcmp() in performance critical path. So the +cpumask_equal() call is now replaced with an equivalent simpler check. + +Signed-off-by: Waiman Long <longman@redhat.com> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + lib/smp_processor_id.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/lib/smp_processor_id.c ++++ b/lib/smp_processor_id.c +@@ -23,7 +23,7 @@ unsigned int check_preemption_disabled(c + * Kernel threads bound to a single CPU can safely use + * smp_processor_id(): + */ +- if (cpumask_equal(current->cpus_ptr, cpumask_of(this_cpu))) ++ if (current->nr_cpus_allowed == 1) + goto out; + + /* |