Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp3780767imw; Mon, 18 Jul 2022 14:30:06 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tqLAGHW75bURXikJY07peBrjVa/sdAIRAJ3YKyPc+kpmtfYCksRyXZsbpf+y9W537T4/An X-Received: by 2002:a17:90a:b782:b0:1f1:abb8:de1b with SMTP id m2-20020a17090ab78200b001f1abb8de1bmr13977002pjr.44.1658179806064; Mon, 18 Jul 2022 14:30:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658179806; cv=none; d=google.com; s=arc-20160816; b=meiYLPUR4KA+I3cABj/vxBcDGTqYPprY1RL/nEhRJWSzDLVDmUC8AxOKrbehCaS0pZ e+cu9r3BWiWvtx07umjKPZNOH15R+hNpdOWiDoec+tta5unUEsSN5zsq7pWbY+tQM8EJ 8/KPC5IK0n7FPu+Q/StpHx28wiZy2eUrohMZkGTUcF3DZY6c28p62wuD6VHloqjk4P93 FxAydxs2C0FtrD1yib42/B2VeXQL4QDXzRU256ZoE6VvAZWPNXoYNAMjGIjMdU6nrVU1 HN7LTiWeglhvwkJHuqM8hWIOi6JgSnAnhbALjYL/b3ZbDXwkUT7RrSvlZiQo8rN9KO1j nC4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=lSkv8nOF7z0qY9Il4gJSah6aT0EynXIpnmz3r7Nd3zY=; b=MJkNw6Kyk4kOxGQLdsfbSX08EOQOXwCaxnUxY8kbLBcguHTor4uWtZy1ObALxpfWbC jmd1772ou5wGFfuM44GevV1GSgztvV4dc/KA7cxaaaaFXqI3syhrWcxiTT3YFaYcKPXA fTAa+jnW/gqQZ4B6bEbPIfa0DxfmDcgx/feVJORZ6L9/lOJC7spcv9lRFrn6G8KsU7yE E7IDG05MSrB/JPOWMbiPBkXgVFBSjQRB3xqSTE5uc4M8vAACvL/6Zw8X/OOQObE3LT84 4KbcEkaScn18L02UEYpxTFVQ7LQ6BQ3w0ApfGb4lhuPJlsWRYUPqJpg9Q97AMXGrEllx WJdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=desiato.20200630 header.b=VzUCoQth; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q128-20020a634386000000b0040d6a795447si2888216pga.510.2022.07.18.14.29.51; Mon, 18 Jul 2022 14:30:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=desiato.20200630 header.b=VzUCoQth; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234921AbiGRV2F (ORCPT + 99 others); Mon, 18 Jul 2022 17:28:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50128 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233730AbiGRV1n (ORCPT ); Mon, 18 Jul 2022 17:27:43 -0400 Received: from desiato.infradead.org (desiato.infradead.org [IPv6:2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C67832FFC2; Mon, 18 Jul 2022 14:27:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=lSkv8nOF7z0qY9Il4gJSah6aT0EynXIpnmz3r7Nd3zY=; b=VzUCoQthtH6+JWXI+qC6/dm9sU e9VkL400c12o9AcDiovabduBPJZzKqkLZfdimO/F4yIEr5iP89pOkuBws2+TTwCI0XA9S+ri2MYOH iQwsce1cEC0SfvgKLAKdxvzsC4oQZXpxVP2qjS6q2qE5idAMTbIUR+e4XeR2d3HwUE0Gpoffjc7lE biZ0mnyUt9Ca8FMMtPr1yyOFp1njQv+GJCg+7ZJwuG3vBAyGq2yL8mza2zXnWaK7WBLHrcW+YwJsX yIAjSpKZtSRI5Z6E5VhdDvn34wNl1HtLT3EsgE4NYbyy1OfZK5vxvMygXZvng7SNR4QjP0msQdMtk 1fMHlWwg==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=worktop.programming.kicks-ass.net) by desiato.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux)) id 1oDYGQ-004u7h-1o; Mon, 18 Jul 2022 21:26:50 +0000 Received: by worktop.programming.kicks-ass.net (Postfix, from userid 1000) id D5CEA9802A7; Mon, 18 Jul 2022 23:26:48 +0200 (CEST) Date: Mon, 18 Jul 2022 23:26:48 +0200 From: Peter Zijlstra To: Yury Norov Cc: linux-kernel@vger.kernel.org, Alexander Lobakin , Alexei Starovoitov , Alexey Klimov , Andrew Morton , Andrii Nakryiko , Andy Shevchenko , Ben Segall , Christoph Lameter , Dan Williams , Daniel Borkmann , Daniel Bristot de Oliveira , Dennis Zhou , Dietmar Eggemann , Eric Dumazet , Frederic Weisbecker , Guenter Roeck , Ingo Molnar , Isabella Basso , John Fastabend , Josh Poimboeuf , Juergen Gross , Juri Lelli , KP Singh , Kees Cook , Martin KaFai Lau , Mel Gorman , Miroslav Benes , Nathan Chancellor , "Paul E . McKenney" , Randy Dunlap , Rasmus Villemoes , Sebastian Andrzej Siewior , Song Liu , Steven Rostedt , Tejun Heo , Thomas Gleixner , Valentin Schneider , Vincent Guittot , Vlastimil Babka , Yonghong Song , linux-mm@kvack.org, netdev@vger.kernel.org, bpf@vger.kernel.org Subject: Re: [PATCH 07/16] smp: optimize smp_call_function_many_cond() Message-ID: References: <20220718192844.1805158-1-yury.norov@gmail.com> <20220718192844.1805158-8-yury.norov@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220718192844.1805158-8-yury.norov@gmail.com> X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jul 18, 2022 at 12:28:35PM -0700, Yury Norov wrote: > diff --git a/kernel/smp.c b/kernel/smp.c > index dd215f439426..7ed2b9b12f74 100644 > --- a/kernel/smp.c > +++ b/kernel/smp.c > @@ -880,6 +880,28 @@ EXPORT_SYMBOL_GPL(smp_call_function_any); > #define SCF_WAIT (1U << 0) > #define SCF_RUN_LOCAL (1U << 1) > > +/* Check if we need remote execution, i.e., any CPU excluding this one. */ > +static inline bool __need_remote_exec(const struct cpumask *mask, unsigned int this_cpu) > +{ > + unsigned int cpu; > + > + switch (num_online_cpus()) { > + case 0: > + return false; > + case 1: > + return cpu_online(this_cpu) ? false : true; > + default: > + if (mask == cpu_online_mask) > + return true; > + } > + > + cpu = cpumask_first_and(mask, cpu_online_mask); > + if (cpu == this_cpu) > + cpu = cpumask_next_and(cpu, mask, cpu_online_mask); > + > + return cpu < nr_cpu_ids; > +} > + > static void smp_call_function_many_cond(const struct cpumask *mask, > smp_call_func_t func, void *info, > unsigned int scf_flags, > @@ -916,12 +938,7 @@ static void smp_call_function_many_cond(const struct cpumask *mask, > if ((scf_flags & SCF_RUN_LOCAL) && cpumask_test_cpu(this_cpu, mask)) > run_local = true; > > - /* Check if we need remote execution, i.e., any CPU excluding this one. */ > - cpu = cpumask_first_and(mask, cpu_online_mask); > - if (cpu == this_cpu) > - cpu = cpumask_next_and(cpu, mask, cpu_online_mask); > - if (cpu < nr_cpu_ids) > - run_remote = true; > + run_remote = __need_remote_exec(mask, this_cpu); > > if (run_remote) { > cfd = this_cpu_ptr(&cfd_data); This is more complex code for, very little to no gain. Why ?!