Received: by 2002:a05:6a10:a841:0:0:0:0 with SMTP id d1csp405099pxy; Thu, 22 Apr 2021 05:03:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz6BTn14cXFEJujDCO6md2H9BrPcR3bg+SFLjO6a2t9NDwB499zk91djII9aIlG5pM8sEMZ X-Received: by 2002:a17:90b:14c4:: with SMTP id jz4mr3742215pjb.144.1619093005818; Thu, 22 Apr 2021 05:03:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619093005; cv=none; d=google.com; s=arc-20160816; b=zTa7uTIv2EOEPzkIacwAyIjFR2cqMGfRbQXPNv+wP0Hxb6+aIB7WFJcikCsHWxzDtO cTmFzzaVI8Mll9l1YREjxniVnNcGUwhMMaBTRtbM9yE2Evpv9KBZ/a2/lUCXgaa3glXs +WMcnDL/vasv4ib6lFEFGYD6MuxvdOk1BK45Njcr/aIZLzMBvqtMzg0ToU4manFts3Dd rANbtMgipORTyglOkHzhQPXmDvsvGl6LiiSUDO1IBOAHENaQXPl/4JbJ5Lvyff1gzDhz VZWIdgY1RviDcItkMHiNQSjyHXrdDE463J5BkWUQ8AlARaQ0XMsVgUVcpYoYVSxN70hh 5jdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=h1Sa/cjQGbcG7Wh5Xhjd5XMMHzJpK3Bl+g9ggkujQnU=; b=Lv3aSc7Q7Fdwn1JLDOYTWHLfsWbi2zhBopX+jmr6MD7Lv2p7fTY7MkXAk2IzpUEdfg ra0P9rfolFiHdxBMqfyUDCpMnUoNfQMPJEgXcUDDfwjDHhFpxBMM8TdTvjnXpbC5pFn7 TFOdj1xoM8wC7hpj3pKP75yLcSDt9AunmdycrtZfC1TK7YDkPex+ak0nCYTxOQ5/FiTy FmK5oEovG+Tg3V7rlFwJKpkagqncZwKbe2loa7Zl2puukUGqxE2t68iCm1rTp5yf2Lbt djVnzK9AjxbPUVksuZutv0TC+P0xOkKCp5ebSDrvYAw6s0wYOoVf94e+zsMzcJy5pc6E 5d7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Nwb39BYO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d13si2931443pfq.20.2021.04.22.05.02.44; Thu, 22 Apr 2021 05:03:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Nwb39BYO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236121AbhDVMCm (ORCPT + 99 others); Thu, 22 Apr 2021 08:02:42 -0400 Received: from mail.kernel.org ([198.145.29.99]:56266 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235957AbhDVMCm (ORCPT ); Thu, 22 Apr 2021 08:02:42 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0F2E061450; Thu, 22 Apr 2021 12:02:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1619092927; bh=C6y1/7eO/16KsPWRmwyMX9yPizdRZz7an8PRE8nlY2w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Nwb39BYO3fuNC/SIA+ZOT4unQwGXqx6nELGRvoOHK5LnbZFL36csdnfSirgXSx2y/ l3bucsLi2Lv6hY18V9aHHP630qPXv/ObY4OZwGnc8bHD7fbxeQg3Pcp+7/6nQIyOAg +pBbL0KN5vQt/wgRWYq+5wlVZD+ZVHsTUSmCpM68VYkEPNPxUw6pItr1av2w6q9UjK 294UPz1edQ5qbOIVs6RQBYWvyjae32T+zNLrKgT+Nt4yHgOt96gaD9ibXZRMCLaVBG 8UP6QhTOfm1fOpX19P2A+Xj27M4LwWqI6cPgAM6hMdUBHKK6vOQFQdk87uzsvKYkVF 3lnhL4ELh4DFA== From: Frederic Weisbecker To: Peter Zijlstra , Thomas Gleixner Cc: LKML , "Rafael J . Wysocki" , Yunfeng Ye , Frederic Weisbecker , Marcelo Tosatti Subject: [PATCH 1/8] tick/nohz: Evaluate the CPU expression after the static key Date: Thu, 22 Apr 2021 14:01:51 +0200 Message-Id: <20210422120158.33629-2-frederic@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210422120158.33629-1-frederic@kernel.org> References: <20210422120158.33629-1-frederic@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Peter Zijlstra When tick_nohz_full_cpu() is called with smp_processor_id(), the latter is unconditionally evaluated whether the static key is on or off. It is not necessary in the off-case though, so make sure the cpu expression is executed at the last moment. Illustrate with the following test function: int tick_nohz_test(void) { return tick_nohz_full_cpu(smp_processor_id()); } The resulting code before was: mov %gs:0x7eea92d1(%rip),%eax # smp_processor_id() fetch nopl 0x0(%rax,%rax,1) xor %eax,%eax retq cmpb $0x0,0x29d393a(%rip) # je tick_nohz_test+0x29 # jump to below eax clear mov %eax,%eax bt %rax,0x29d3936(%rip) # setb %al movzbl %al,%eax retq xor %eax,%eax retq Now it becomes: nopl 0x0(%rax,%rax,1) xor %eax,%eax retq cmpb $0x0,0x29d3871(%rip) # je tick_nohz_test+0x29 # jump to below eax clear mov %gs:0x7eea91f0(%rip),%eax # smp_processor_id() fetch, after static key mov %eax,%eax bt %rax,0x29d3866(%rip) # setb %al movzbl %al,%eax retq xor %eax,%eax retq Not-Yet-Signed-off-by: Peter Zijlstra Cc: Yunfeng Ye Cc: Thomas Gleixner Cc: Marcelo Tosatti Signed-off-by: Frederic Weisbecker --- include/linux/tick.h | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/include/linux/tick.h b/include/linux/tick.h index 7340613c7eff..2258984a0e8a 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h @@ -185,13 +185,17 @@ static inline bool tick_nohz_full_enabled(void) return tick_nohz_full_running; } -static inline bool tick_nohz_full_cpu(int cpu) -{ - if (!tick_nohz_full_enabled()) - return false; - - return cpumask_test_cpu(cpu, tick_nohz_full_mask); -} +/* + * Check if a CPU is part of the nohz_full subset. Arrange for evaluating + * the cpu expression (typically smp_processor_id()) _after_ the static + * key. + */ +#define tick_nohz_full_cpu(_cpu) ({ \ + bool __ret = false; \ + if (tick_nohz_full_enabled()) \ + __ret = cpumask_test_cpu((_cpu), tick_nohz_full_mask); \ + __ret; \ +}) static inline void tick_nohz_full_add_cpus_to(struct cpumask *mask) { -- 2.25.1