[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/smp: Speed up on_selected_cpus()
commit f97c1abf2934e76fb69fabaf4f5ec04afa813816 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Fri Feb 4 20:12:04 2022 +0000 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Mon Feb 7 17:41:24 2022 +0000 xen/smp: Speed up on_selected_cpus() cpumask_weight() is an incredibly expensive way to find if no bits are set, made worse by the fact that the calculation is performed with the global call_lock held. This appears to be a missing optimisation from c/s 433f14699d48 ("x86: Clean up smp_call_function handling.") in 2011 which dropped the logic requiring the count of CPUs. Switch to using cpumask_empty() instead, which will short circuit as soon as it finds any set bit in the cpumask. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/common/smp.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/xen/common/smp.c b/xen/common/smp.c index 781bcf2c24..a011f541f1 100644 --- a/xen/common/smp.c +++ b/xen/common/smp.c @@ -50,8 +50,6 @@ void on_selected_cpus( void *info, int wait) { - unsigned int nr_cpus; - ASSERT(local_irq_is_enabled()); ASSERT(cpumask_subset(selected, &cpu_online_map)); @@ -59,8 +57,7 @@ void on_selected_cpus( cpumask_copy(&call_data.selected, selected); - nr_cpus = cpumask_weight(&call_data.selected); - if ( nr_cpus == 0 ) + if ( cpumask_empty(&call_data.selected) ) goto out; call_data.func = func; -- generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |