From patchwork Tue Mar 21 00:55:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. McKenney" X-Patchwork-Id: 72566 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp1522792wrt; Mon, 20 Mar 2023 18:04:42 -0700 (PDT) X-Google-Smtp-Source: AK7set/NhYiiCOf4VjcSzq3SfggOnQ9OrkKz3ninmVDjuFxKd4U80zeAAMEUrIba2sUM1Jxxtr5D X-Received: by 2002:a17:90b:4ad0:b0:23d:5196:eca8 with SMTP id mh16-20020a17090b4ad000b0023d5196eca8mr687384pjb.20.1679360682403; Mon, 20 Mar 2023 18:04:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679360682; cv=none; d=google.com; s=arc-20160816; b=npdnEAUe1Zmeg/HQrEgux/3zVcgg+ibTwZTwoLq7e5xUgYAG/u/oDGgSCNZmX6+jJV NvJLBww0d5F1hNqVVR2Pnujqz5Lxs9Q90GnTSJFc5b+hCMfBGnlgzyK+w+7/aVhZfNwi X9bNoO6bZzrOuP24EuHv/iXSgWKge/xVxg/4XHVsdZaWxEskpl1B4hBy5e6D6obUQP7/ 9ktMO8CGVZ6YNLrqoX+CUkA5nwbcq61yBvWHMFTbBJHrM5FUtXLHggNFeyN5rf8OPOsH e3/boTTUzDZB4obNS2qpaB2fDUZ07OnPw0TYiY6oE6UFJgepws1wBktHi57JSdm/BNIO /nvA== 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=tlHVePyFzwubRnI59fdFlk4dw6lZ81AuuVIhIPN8aq0=; b=lsBPonP0FOmC55oF5ag9q+f4JKnI6vwuFsnQrBt2we0LHyBKJkQdDF3IiVFkjLbmHn hSFa+aWxPRPKCEu+MCNymxWmWXXLkb6Y7/7EOBnKqH5SJdusXbm+FawYJGEIgJv6xEio T14A533OA4BctB5pli1VPmP9H0Skwq65gilgs8suqiWzhmJdtP6SVwHyTqZLFmgkXpm7 mFSRYyqeoWBKaVPWSpBa0TXZOcRlrp/CWkMn1SzUL2wEClxnl0lpO80oxno58chNsyDj 8kYVHxvACDQK4rbIcOObFinM+YVbO48BycqcVsTLGbaaMVqnkRd+3k6cKoPfjUe6Dulc yZpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=nh9KKRJw; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t12-20020a170902b20c00b00189c05664e8si11503647plr.563.2023.03.20.18.04.29; Mon, 20 Mar 2023 18:04:42 -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=@kernel.org header.s=k20201202 header.b=nh9KKRJw; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229735AbjCUAz2 (ORCPT + 99 others); Mon, 20 Mar 2023 20:55:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37828 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229696AbjCUAzX (ORCPT ); Mon, 20 Mar 2023 20:55:23 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1F59F34029 for ; Mon, 20 Mar 2023 17:55:19 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 4F684618CF for ; Tue, 21 Mar 2023 00:55:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B2E6DC433EF; Tue, 21 Mar 2023 00:55:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679360118; bh=g+CxuiiM9x0+HVz5Xxk//DkI5BoRbQEaiqME9OD6zaA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nh9KKRJwyBp3gm0NSmydGxa4d3wcOHUR5/n6H9p8GwRxjTToprCS7ZbruF1b75BBr 78ju3ijSSShz6qCLOarQsM05sXD5kz71lg3LxNQ/sG9Orx/DZZ68jqRIHjIQfjbstq YDMdFAuflwjSNAMx5pLNe8wWeIaXdYGPiJSbgvjYAVAho+zDH4UA1XKTlRl4MrWDeZ XZ9Wybp8hD6JKn+3KM8mxCJeM/bhRUm9HR1dYPaBVvjoVVEoTcBgGNEjdznOhgr8Ak PcOliUp9PFkqRPatzfEgjbrXGf90iIySQ7+6sXABUDTVwvJyGrQ7YU0jooUo6YB+Ly mQNbNALXfaHBA== Received: by paulmck-ThinkPad-P72.home (Postfix, from userid 1000) id 605751540395; Mon, 20 Mar 2023 17:55:18 -0700 (PDT) From: "Paul E. McKenney" To: linux-kernel@vger.kernel.org Cc: kernel-team@meta.com, rostedt@goodmis.org, jgross@suse.com, mingo@kernel.org, peterz@infradead.org, corbet@lwn.net, "Paul E. McKenney" , Borislav Petkov Subject: [PATCH CSDlock 1/4] locking/csd_lock: Add Kconfig option for csd_debug default Date: Mon, 20 Mar 2023 17:55:13 -0700 Message-Id: <20230321005516.50558-1-paulmck@kernel.org> X-Mailer: git-send-email 2.40.0.rc2 In-Reply-To: <0c368b66-71b2-442f-a8f7-e6decc4be2d6@paulmck-laptop> References: <0c368b66-71b2-442f-a8f7-e6decc4be2d6@paulmck-laptop> MIME-Version: 1.0 X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760937306904922418?= X-GMAIL-MSGID: =?utf-8?q?1760937306904922418?= The csd_debug kernel parameter works well, but is inconvenient in cases where it is more closely associated with boot loaders or automation than with a particular kernel version or release. Thererfore, provide a new CSD_LOCK_WAIT_DEBUG_DEFAULT Kconfig option that defaults csd_debug to 1 when selected and 0 otherwise, with this latter being the default. Signed-off-by: Paul E. McKenney Cc: Juergen Gross Cc: Borislav Petkov Cc: Ingo Molnar --- Documentation/admin-guide/kernel-parameters.txt | 6 ++++-- kernel/smp.c | 2 +- lib/Kconfig.debug | 9 +++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 6221a1d057dd..ce70777f5999 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -893,8 +893,10 @@ handling. When switched on, additional debug data is printed to the console in case a hanging CPU is detected, and that CPU is pinged again in order to try - to resolve the hang situation. - 0: disable csdlock debugging (default) + to resolve the hang situation. The default value of + this option depends on the CSD_LOCK_WAIT_DEBUG_DEFAULT + Kconfig option. + 0: disable csdlock debugging 1: enable basic csdlock debugging (minor impact) ext: enable extended csdlock debugging (more impact, but more data) diff --git a/kernel/smp.c b/kernel/smp.c index 06a413987a14..e2d558f5cef8 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -158,7 +158,7 @@ void __init call_function_init(void) #ifdef CONFIG_CSD_LOCK_WAIT_DEBUG -static DEFINE_STATIC_KEY_FALSE(csdlock_debug_enabled); +static DEFINE_STATIC_KEY_MAYBE(CONFIG_CSD_LOCK_WAIT_DEBUG_DEFAULT, csdlock_debug_enabled); static DEFINE_STATIC_KEY_FALSE(csdlock_debug_extended); static int __init csdlock_debug(char *str) diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index c8b379e2e9ad..e1b160a0474d 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1480,6 +1480,15 @@ config CSD_LOCK_WAIT_DEBUG include the IPI handler function currently executing (if any) and relevant stack traces. +config CSD_LOCK_WAIT_DEBUG_DEFAULT + bool "Default csd_lock_wait() debugging on at boot time" + depends on CSD_LOCK_WAIT_DEBUG + depends on 64BIT + default n + help + This option causes the csdlock_debug= kernel boot parameter to + default to 1 (basic debugging) instead of 0 (no debugging). + endmenu # lock debugging config TRACE_IRQFLAGS From patchwork Tue Mar 21 00:55:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. McKenney" X-Patchwork-Id: 72564 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp1522560wrt; Mon, 20 Mar 2023 18:04:01 -0700 (PDT) X-Google-Smtp-Source: AK7set9tH1RdkEjekkxA+Ez+cYowH9+f3jerZrh+kZl3XZw6y6a3oOGvY0XL8GAqauRRUpg6qn02 X-Received: by 2002:a05:6a20:b721:b0:da:6602:5c3 with SMTP id fg33-20020a056a20b72100b000da660205c3mr308289pzb.30.1679360641559; Mon, 20 Mar 2023 18:04:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679360641; cv=none; d=google.com; s=arc-20160816; b=mH94zsMGuzfyz3NvFQWdseSfQtLSZ1Ke8Qp298dz06Vtndc9gy8Pjc3mn9pwKlMULH c0yOS4A+FB4Him5n6S4NraZohQ2CYP+MiFOXTNGhH1zWUUn1h1kOzkKEc+laajCh5qJM AGU7RrDc8I5z8OGF7YujhLnCY2UgmTH64LcAb83kqyz9c7CjFadH00JRa9BTRr6nl5lP m2DHZhp0pejJIFy2r9doEk6EH0uqjWCRzlL7i79p1fBXk8M2NDGkSSWaJb6qIn4BRjLB 1EQzbOoSBbx5iltLPcKz90Et/5UlsZDAyLb6SUf25V4fPxuEJx2qKzOM6bvven0UF47g ceYg== 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=8GghAnj5cOT5fRk9UigClj8RUuwcfwJUo09lqW0bINA=; b=yAAklY/jjRF0SpExW042hlkUmvBheuT5Z2NKyhGDwEP2+KryD3JppW/81JN8pier4N WpyrpjnKiS4LNf0MFkmQkmBBaWKiS5l4Idn/8PfvAppnvBz7axQAlF7O1kOYEQvn1O/j 6T5XIeDGs4w1b9kY4Ak9KWL1USLxZFw/LCAJUWIciQVTaU27HhamjL679DZy6gpbwDJu iepJsRhJBEewR8SU54cj2KyFSkVtLnQxqy9WMj7ydUX/V99VGU7nRLfaamAiKEo4rI2p ieNVDAs9/I4u+sLWnrbwV2qO/hUfxPNNjTUOc1rCXubEXONVxgVK8kBE7vqaSJ6iJDvk ws5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=DnFw2Opp; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v16-20020a634810000000b004ffc2ec1b51si11445949pga.271.2023.03.20.18.03.47; Mon, 20 Mar 2023 18:04:01 -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=@kernel.org header.s=k20201202 header.b=DnFw2Opp; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229782AbjCUAzm (ORCPT + 99 others); Mon, 20 Mar 2023 20:55:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38650 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229771AbjCUAzh (ORCPT ); Mon, 20 Mar 2023 20:55:37 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 85A483433C for ; Mon, 20 Mar 2023 17:55:23 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 2EB2EB811BB for ; Tue, 21 Mar 2023 00:55:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CC652C433D2; Tue, 21 Mar 2023 00:55:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679360118; bh=HUcNT18c9tWGTRdAcwqvm7cb76dFUjKVHSKOqLcCWec=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DnFw2OppJwko8BYMEZK3PKdPrvCOnvvKLYpEH3UefcdI9eecHelx5CbEJJwgaAFID cwwoJbG3Sk/ULp/cxeWAelh3vDwQrAI6j3JklMq1LP+IMs+HG0jp/swLUz0gxaDA0G 6wk2A8XnHjsDSejq4DcE7Z1oxFCz+P8wdl2kMYbVfhokZpg24jY7fnP6AIv7DbwWKM RRU64iVMHU3qTlONXfRoKBBsiYxo3M5zfmTUWstegNG8tKl3S9+gxgTHrSpaqsXKsZ ZdlWkA9zkrlyNF+dKpfegUgIcrZuKDqzceJ+8aBf+oOZ4Hp1jj9DE6F+Vcl9MKXIwg bAza64I/TyrhQ== Received: by paulmck-ThinkPad-P72.home (Postfix, from userid 1000) id 6595B154039B; Mon, 20 Mar 2023 17:55:18 -0700 (PDT) From: "Paul E. McKenney" To: linux-kernel@vger.kernel.org Cc: kernel-team@meta.com, rostedt@goodmis.org, jgross@suse.com, mingo@kernel.org, peterz@infradead.org, corbet@lwn.net, "Paul E. McKenney" Subject: [PATCH CSDlock 2/4] locking/csd_lock: Remove added data from CSD lock debugging Date: Mon, 20 Mar 2023 17:55:14 -0700 Message-Id: <20230321005516.50558-2-paulmck@kernel.org> X-Mailer: git-send-email 2.40.0.rc2 In-Reply-To: <0c368b66-71b2-442f-a8f7-e6decc4be2d6@paulmck-laptop> References: <0c368b66-71b2-442f-a8f7-e6decc4be2d6@paulmck-laptop> MIME-Version: 1.0 X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760937264564000580?= X-GMAIL-MSGID: =?utf-8?q?1760937264564000580?= The diagnostics added by this commit were extremely useful in one instance: a5aabace5fb8 ("locking/csd_lock: Add more data to CSD lock debugging") However, they have not seen much action since, and there have been some concerns expressed that the complexity is not worth the benefit. Therefore, manually revert this commit, but leave a comment telling people where to find these diagnostics. [ paulmck: Apply Juergen Gross feedback. ] Signed-off-by: Paul E. McKenney Cc: Juergen Gross Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Jonathan Corbet --- .../admin-guide/kernel-parameters.txt | 4 - kernel/smp.c | 233 +----------------- 2 files changed, 12 insertions(+), 225 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index ce70777f5999..b15198a85acb 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -896,10 +896,6 @@ to resolve the hang situation. The default value of this option depends on the CSD_LOCK_WAIT_DEBUG_DEFAULT Kconfig option. - 0: disable csdlock debugging - 1: enable basic csdlock debugging (minor impact) - ext: enable extended csdlock debugging (more impact, - but more data) dasd= [HW,NET] See header of drivers/s390/block/dasd_devmap.c. diff --git a/kernel/smp.c b/kernel/smp.c index e2d558f5cef8..038d666f327b 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -31,59 +31,8 @@ #define CSD_TYPE(_csd) ((_csd)->node.u_flags & CSD_FLAG_TYPE_MASK) -#ifdef CONFIG_CSD_LOCK_WAIT_DEBUG -union cfd_seq_cnt { - u64 val; - struct { - u64 src:16; - u64 dst:16; -#define CFD_SEQ_NOCPU 0xffff - u64 type:4; -#define CFD_SEQ_QUEUE 0 -#define CFD_SEQ_IPI 1 -#define CFD_SEQ_NOIPI 2 -#define CFD_SEQ_PING 3 -#define CFD_SEQ_PINGED 4 -#define CFD_SEQ_HANDLE 5 -#define CFD_SEQ_DEQUEUE 6 -#define CFD_SEQ_IDLE 7 -#define CFD_SEQ_GOTIPI 8 -#define CFD_SEQ_HDLEND 9 - u64 cnt:28; - } u; -}; - -static char *seq_type[] = { - [CFD_SEQ_QUEUE] = "queue", - [CFD_SEQ_IPI] = "ipi", - [CFD_SEQ_NOIPI] = "noipi", - [CFD_SEQ_PING] = "ping", - [CFD_SEQ_PINGED] = "pinged", - [CFD_SEQ_HANDLE] = "handle", - [CFD_SEQ_DEQUEUE] = "dequeue (src CPU 0 == empty)", - [CFD_SEQ_IDLE] = "idle", - [CFD_SEQ_GOTIPI] = "gotipi", - [CFD_SEQ_HDLEND] = "hdlend (src CPU 0 == early)", -}; - -struct cfd_seq_local { - u64 ping; - u64 pinged; - u64 handle; - u64 dequeue; - u64 idle; - u64 gotipi; - u64 hdlend; -}; -#endif - struct cfd_percpu { call_single_data_t csd; -#ifdef CONFIG_CSD_LOCK_WAIT_DEBUG - u64 seq_queue; - u64 seq_ipi; - u64 seq_noipi; -#endif }; struct call_function_data { @@ -159,18 +108,21 @@ void __init call_function_init(void) #ifdef CONFIG_CSD_LOCK_WAIT_DEBUG static DEFINE_STATIC_KEY_MAYBE(CONFIG_CSD_LOCK_WAIT_DEBUG_DEFAULT, csdlock_debug_enabled); -static DEFINE_STATIC_KEY_FALSE(csdlock_debug_extended); +/* + * Parse the csdlock_debug= kernel boot parameter. + * + * If you need to restore the old "ext" value that once provided + * additional debugging information, reapply the following commits: + * + * de7b09ef658d ("locking/csd_lock: Prepare more CSD lock debugging") + * a5aabace5fb8 ("locking/csd_lock: Add more data to CSD lock debugging") + */ static int __init csdlock_debug(char *str) { unsigned int val = 0; - if (str && !strcmp(str, "ext")) { - val = 1; - static_branch_enable(&csdlock_debug_extended); - } else - get_option(&str, &val); - + get_option(&str, &val); if (val) static_branch_enable(&csdlock_debug_enabled); @@ -181,36 +133,11 @@ __setup("csdlock_debug=", csdlock_debug); static DEFINE_PER_CPU(call_single_data_t *, cur_csd); static DEFINE_PER_CPU(smp_call_func_t, cur_csd_func); static DEFINE_PER_CPU(void *, cur_csd_info); -static DEFINE_PER_CPU(struct cfd_seq_local, cfd_seq_local); static ulong csd_lock_timeout = 5000; /* CSD lock timeout in milliseconds. */ module_param(csd_lock_timeout, ulong, 0444); static atomic_t csd_bug_count = ATOMIC_INIT(0); -static u64 cfd_seq; - -#define CFD_SEQ(s, d, t, c) \ - (union cfd_seq_cnt){ .u.src = s, .u.dst = d, .u.type = t, .u.cnt = c } - -static u64 cfd_seq_inc(unsigned int src, unsigned int dst, unsigned int type) -{ - union cfd_seq_cnt new, old; - - new = CFD_SEQ(src, dst, type, 0); - - do { - old.val = READ_ONCE(cfd_seq); - new.u.cnt = old.u.cnt + 1; - } while (cmpxchg(&cfd_seq, old.val, new.val) != old.val); - - return old.val; -} - -#define cfd_seq_store(var, src, dst, type) \ - do { \ - if (static_branch_unlikely(&csdlock_debug_extended)) \ - var = cfd_seq_inc(src, dst, type); \ - } while (0) /* Record current CSD work for current CPU, NULL to erase. */ static void __csd_lock_record(struct __call_single_data *csd) @@ -244,80 +171,6 @@ static int csd_lock_wait_getcpu(struct __call_single_data *csd) return -1; } -static void cfd_seq_data_add(u64 val, unsigned int src, unsigned int dst, - unsigned int type, union cfd_seq_cnt *data, - unsigned int *n_data, unsigned int now) -{ - union cfd_seq_cnt new[2]; - unsigned int i, j, k; - - new[0].val = val; - new[1] = CFD_SEQ(src, dst, type, new[0].u.cnt + 1); - - for (i = 0; i < 2; i++) { - if (new[i].u.cnt <= now) - new[i].u.cnt |= 0x80000000U; - for (j = 0; j < *n_data; j++) { - if (new[i].u.cnt == data[j].u.cnt) { - /* Direct read value trumps generated one. */ - if (i == 0) - data[j].val = new[i].val; - break; - } - if (new[i].u.cnt < data[j].u.cnt) { - for (k = *n_data; k > j; k--) - data[k].val = data[k - 1].val; - data[j].val = new[i].val; - (*n_data)++; - break; - } - } - if (j == *n_data) { - data[j].val = new[i].val; - (*n_data)++; - } - } -} - -static const char *csd_lock_get_type(unsigned int type) -{ - return (type >= ARRAY_SIZE(seq_type)) ? "?" : seq_type[type]; -} - -static void csd_lock_print_extended(struct __call_single_data *csd, int cpu) -{ - struct cfd_seq_local *seq = &per_cpu(cfd_seq_local, cpu); - unsigned int srccpu = csd->node.src; - struct call_function_data *cfd = per_cpu_ptr(&cfd_data, srccpu); - struct cfd_percpu *pcpu = per_cpu_ptr(cfd->pcpu, cpu); - unsigned int now; - union cfd_seq_cnt data[2 * ARRAY_SIZE(seq_type)]; - unsigned int n_data = 0, i; - - data[0].val = READ_ONCE(cfd_seq); - now = data[0].u.cnt; - - cfd_seq_data_add(pcpu->seq_queue, srccpu, cpu, CFD_SEQ_QUEUE, data, &n_data, now); - cfd_seq_data_add(pcpu->seq_ipi, srccpu, cpu, CFD_SEQ_IPI, data, &n_data, now); - cfd_seq_data_add(pcpu->seq_noipi, srccpu, cpu, CFD_SEQ_NOIPI, data, &n_data, now); - - cfd_seq_data_add(per_cpu(cfd_seq_local.ping, srccpu), srccpu, CFD_SEQ_NOCPU, CFD_SEQ_PING, data, &n_data, now); - cfd_seq_data_add(per_cpu(cfd_seq_local.pinged, srccpu), srccpu, CFD_SEQ_NOCPU, CFD_SEQ_PINGED, data, &n_data, now); - - cfd_seq_data_add(seq->idle, CFD_SEQ_NOCPU, cpu, CFD_SEQ_IDLE, data, &n_data, now); - cfd_seq_data_add(seq->gotipi, CFD_SEQ_NOCPU, cpu, CFD_SEQ_GOTIPI, data, &n_data, now); - cfd_seq_data_add(seq->handle, CFD_SEQ_NOCPU, cpu, CFD_SEQ_HANDLE, data, &n_data, now); - cfd_seq_data_add(seq->dequeue, CFD_SEQ_NOCPU, cpu, CFD_SEQ_DEQUEUE, data, &n_data, now); - cfd_seq_data_add(seq->hdlend, CFD_SEQ_NOCPU, cpu, CFD_SEQ_HDLEND, data, &n_data, now); - - for (i = 0; i < n_data; i++) { - pr_alert("\tcsd: cnt(%07x): %04x->%04x %s\n", - data[i].u.cnt & ~0x80000000U, data[i].u.src, - data[i].u.dst, csd_lock_get_type(data[i].u.type)); - } - pr_alert("\tcsd: cnt now: %07x\n", now); -} - /* * Complain if too much time spent waiting. Note that only * the CSD_TYPE_SYNC/ASYNC types provide the destination CPU, @@ -368,8 +221,6 @@ static bool csd_lock_wait_toolong(struct __call_single_data *csd, u64 ts0, u64 * *bug_id, !cpu_cur_csd ? "unresponsive" : "handling this request"); } if (cpu >= 0) { - if (static_branch_unlikely(&csdlock_debug_extended)) - csd_lock_print_extended(csd, cpu); dump_cpu_task(cpu); if (!cpu_cur_csd) { pr_alert("csd: Re-sending CSD lock (#%d) IPI from CPU#%02d to CPU#%02d\n", *bug_id, raw_smp_processor_id(), cpu); @@ -412,27 +263,7 @@ static __always_inline void csd_lock_wait(struct __call_single_data *csd) smp_cond_load_acquire(&csd->node.u_flags, !(VAL & CSD_FLAG_LOCK)); } - -static void __smp_call_single_queue_debug(int cpu, struct llist_node *node) -{ - unsigned int this_cpu = smp_processor_id(); - struct cfd_seq_local *seq = this_cpu_ptr(&cfd_seq_local); - struct call_function_data *cfd = this_cpu_ptr(&cfd_data); - struct cfd_percpu *pcpu = per_cpu_ptr(cfd->pcpu, cpu); - - cfd_seq_store(pcpu->seq_queue, this_cpu, cpu, CFD_SEQ_QUEUE); - if (llist_add(node, &per_cpu(call_single_queue, cpu))) { - cfd_seq_store(pcpu->seq_ipi, this_cpu, cpu, CFD_SEQ_IPI); - cfd_seq_store(seq->ping, this_cpu, cpu, CFD_SEQ_PING); - send_call_function_single_ipi(cpu); - cfd_seq_store(seq->pinged, this_cpu, cpu, CFD_SEQ_PINGED); - } else { - cfd_seq_store(pcpu->seq_noipi, this_cpu, cpu, CFD_SEQ_NOIPI); - } -} #else -#define cfd_seq_store(var, src, dst, type) - static void csd_lock_record(struct __call_single_data *csd) { } @@ -470,19 +301,6 @@ static DEFINE_PER_CPU_SHARED_ALIGNED(call_single_data_t, csd_data); void __smp_call_single_queue(int cpu, struct llist_node *node) { -#ifdef CONFIG_CSD_LOCK_WAIT_DEBUG - if (static_branch_unlikely(&csdlock_debug_extended)) { - unsigned int type; - - type = CSD_TYPE(container_of(node, call_single_data_t, - node.llist)); - if (type == CSD_TYPE_SYNC || type == CSD_TYPE_ASYNC) { - __smp_call_single_queue_debug(cpu, node); - return; - } - } -#endif - /* * The list addition should be visible before sending the IPI * handler locks the list to pull the entry off it because of @@ -541,8 +359,6 @@ static int generic_exec_single(int cpu, struct __call_single_data *csd) */ void generic_smp_call_function_single_interrupt(void) { - cfd_seq_store(this_cpu_ptr(&cfd_seq_local)->gotipi, CFD_SEQ_NOCPU, - smp_processor_id(), CFD_SEQ_GOTIPI); __flush_smp_call_function_queue(true); } @@ -570,13 +386,7 @@ static void __flush_smp_call_function_queue(bool warn_cpu_offline) lockdep_assert_irqs_disabled(); head = this_cpu_ptr(&call_single_queue); - cfd_seq_store(this_cpu_ptr(&cfd_seq_local)->handle, CFD_SEQ_NOCPU, - smp_processor_id(), CFD_SEQ_HANDLE); entry = llist_del_all(head); - cfd_seq_store(this_cpu_ptr(&cfd_seq_local)->dequeue, - /* Special meaning of source cpu: 0 == queue empty */ - entry ? CFD_SEQ_NOCPU : 0, - smp_processor_id(), CFD_SEQ_DEQUEUE); entry = llist_reverse_order(entry); /* There shouldn't be any pending callbacks on an offline CPU. */ @@ -635,12 +445,8 @@ static void __flush_smp_call_function_queue(bool warn_cpu_offline) } } - if (!entry) { - cfd_seq_store(this_cpu_ptr(&cfd_seq_local)->hdlend, - 0, smp_processor_id(), - CFD_SEQ_HDLEND); + if (!entry) return; - } /* * Second; run all !SYNC callbacks. @@ -678,9 +484,6 @@ static void __flush_smp_call_function_queue(bool warn_cpu_offline) */ if (entry) sched_ttwu_pending(entry); - - cfd_seq_store(this_cpu_ptr(&cfd_seq_local)->hdlend, CFD_SEQ_NOCPU, - smp_processor_id(), CFD_SEQ_HDLEND); } @@ -704,8 +507,6 @@ void flush_smp_call_function_queue(void) if (llist_empty(this_cpu_ptr(&call_single_queue))) return; - cfd_seq_store(this_cpu_ptr(&cfd_seq_local)->idle, CFD_SEQ_NOCPU, - smp_processor_id(), CFD_SEQ_IDLE); local_irq_save(flags); /* Get the already pending soft interrupts for RT enabled kernels */ was_pending = local_softirq_pending(); @@ -929,8 +730,7 @@ static void smp_call_function_many_cond(const struct cpumask *mask, cpumask_clear(cfd->cpumask_ipi); for_each_cpu(cpu, cfd->cpumask) { - struct cfd_percpu *pcpu = per_cpu_ptr(cfd->pcpu, cpu); - call_single_data_t *csd = &pcpu->csd; + call_single_data_t *csd = &per_cpu_ptr(cfd->pcpu, cpu)->csd; if (cond_func && !cond_func(cpu, info)) continue; @@ -944,20 +744,13 @@ static void smp_call_function_many_cond(const struct cpumask *mask, csd->node.src = smp_processor_id(); csd->node.dst = cpu; #endif - cfd_seq_store(pcpu->seq_queue, this_cpu, cpu, CFD_SEQ_QUEUE); if (llist_add(&csd->node.llist, &per_cpu(call_single_queue, cpu))) { __cpumask_set_cpu(cpu, cfd->cpumask_ipi); nr_cpus++; last_cpu = cpu; - - cfd_seq_store(pcpu->seq_ipi, this_cpu, cpu, CFD_SEQ_IPI); - } else { - cfd_seq_store(pcpu->seq_noipi, this_cpu, cpu, CFD_SEQ_NOIPI); } } - cfd_seq_store(this_cpu_ptr(&cfd_seq_local)->ping, this_cpu, CFD_SEQ_NOCPU, CFD_SEQ_PING); - /* * Choose the most efficient way to send an IPI. Note that the * number of CPUs might be zero due to concurrent changes to the @@ -967,8 +760,6 @@ static void smp_call_function_many_cond(const struct cpumask *mask, send_call_function_single_ipi(last_cpu); else if (likely(nr_cpus > 1)) arch_send_call_function_ipi_mask(cfd->cpumask_ipi); - - cfd_seq_store(this_cpu_ptr(&cfd_seq_local)->pinged, this_cpu, CFD_SEQ_NOCPU, CFD_SEQ_PINGED); } if (run_local && (!cond_func || cond_func(this_cpu, info))) { From patchwork Tue Mar 21 00:55:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. McKenney" X-Patchwork-Id: 72607 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp1530190wrt; Mon, 20 Mar 2023 18:26:47 -0700 (PDT) X-Google-Smtp-Source: AK7set/qUZ/3XEIY/zGZYyjaJffvNGPtt3iuz2sKSSr8YlxQC6+3Ux0HHuQO4+WQrni6YcjxwDcP X-Received: by 2002:a05:6a20:389e:b0:d9:63c3:e2a0 with SMTP id n30-20020a056a20389e00b000d963c3e2a0mr591956pzf.18.1679362007243; Mon, 20 Mar 2023 18:26:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679362007; cv=none; d=google.com; s=arc-20160816; b=WrYmlWKYO8npMzZDi3YOZlcNJq4xdoOpsrFu2UpwF6Bun5qti3wsQjFWQfK0etUqC7 fchf6wGhqYWxVHkjh5PQJY4AXmZDnynNdClDEoM+vHgfvPqJV6IyoU6rsbfsgfpIPhb8 WXklPRBhTWs9WqGLZKGbvTssYd1ikmLuG5k8/oWsPzGyeUTcemolq7MCKtTKMmMntvfJ 47E0DuFY6IPF32tLV9l0L6PokSyQdULIAOs+Za2hz+Ma8CPEoZFxXxnPhiGE+6hwc90n 9HawQUqZKn0NIsbITY4/DRqS25ZRA1w2wxEm10pYBDB++bsBT01iZdog7tcknGfrPro7 ajwA== 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=pcSAyPlW6urGoUphKy1m2NwHdG6svXplSxzP/dB8vIM=; b=SqOCu9ZIWUVoHTdEzln0hBUUJ8G+zaUIlOYfntKCyJK6Ja76TL/uun8AW2cLkC0BS8 8Yr+SVA8VlavSwd2XwhDLMQh1GSg1tVvNSyCgYcYKNeiPXWVew653EieXuHxjF7nk3dD j9tf9mAgVJ5xwCXw7x43cyiQ7nFcWtsfUmFrTFvC/JXpuOxYLO+FSNBdPsr/DZcmO1kj N1TKtttTu//QYyNJ+CvbCTIDd6s2CXCFXND+b9fw9jqDG7IyWLpzrbjKzwmG7e/gKy77 UIEGydp+ljxzXdHPC0lzPzMZmU4HwDo8U+Jza/K8hkBwYvCFzEHyqll/vXGAiF0ANEDT NPmA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=POkf0iCa; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m18-20020a62f212000000b00627f05a1d88si5672658pfh.352.2023.03.20.18.26.34; Mon, 20 Mar 2023 18:26:47 -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=@kernel.org header.s=k20201202 header.b=POkf0iCa; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229767AbjCUAzb (ORCPT + 99 others); Mon, 20 Mar 2023 20:55:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38102 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229458AbjCUAz0 (ORCPT ); Mon, 20 Mar 2023 20:55:26 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 96E2B34038 for ; Mon, 20 Mar 2023 17:55:22 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 31840B811BC for ; Tue, 21 Mar 2023 00:55:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E1C29C4339B; Tue, 21 Mar 2023 00:55:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679360118; bh=ek7/AteWZYhmTEqsmUJlialhZknBT1IZtRC5ItpzjTg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=POkf0iCa8BfQoAsVCpZXGJGRvObfxJO83+BBkjjmYs+2/ObTWuByWoP3CrVn1lZ0R sI6OQmL76cNsKAilP93ONJY4ybZiw43QopjIfDae9TU/kqfBMV6u+35YGlzCDclfkb Fcm5C52oP/2rPTJSN4z9gyJE7kUUPCiKjD6+Z5zA/R76UyoyQyEwUxYj7eBSJcMGfd 9BdAYwHp/FDQMEpZ+a4byl3QH/iDk/J6+Jb2tzUTFnvR1BMKMAq1eBqH6ciTr2MCmk yhQLEEDVWD6Nq9hB/hHli5S/mijpGDHKGx38Gt1kWY8z0ydpdPQDO4aMz2VmmqBLWY +B3lLrccWj6jg== Received: by paulmck-ThinkPad-P72.home (Postfix, from userid 1000) id 70F00154039D; Mon, 20 Mar 2023 17:55:18 -0700 (PDT) From: "Paul E. McKenney" To: linux-kernel@vger.kernel.org Cc: kernel-team@meta.com, rostedt@goodmis.org, jgross@suse.com, mingo@kernel.org, peterz@infradead.org, corbet@lwn.net, "Paul E. McKenney" Subject: [PATCH CSDlock 3/4] locking/csd_lock: Remove per-CPU data indirection from CSD lock debugging Date: Mon, 20 Mar 2023 17:55:15 -0700 Message-Id: <20230321005516.50558-3-paulmck@kernel.org> X-Mailer: git-send-email 2.40.0.rc2 In-Reply-To: <0c368b66-71b2-442f-a8f7-e6decc4be2d6@paulmck-laptop> References: <0c368b66-71b2-442f-a8f7-e6decc4be2d6@paulmck-laptop> MIME-Version: 1.0 X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760938696069069685?= X-GMAIL-MSGID: =?utf-8?q?1760938696069069685?= The diagnostics added by this commit were extremely useful in one instance: a5aabace5fb8 ("locking/csd_lock: Add more data to CSD lock debugging") However, they have not seen much action since, and there have been some concerns expressed that the complexity is not worth the benefit. Therefore, manually revert the following commit preparatory commit: de7b09ef658d ("locking/csd_lock: Prepare more CSD lock debugging") Signed-off-by: Paul E. McKenney Cc: Juergen Gross Cc: Ingo Molnar Cc: Peter Zijlstra --- kernel/smp.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/kernel/smp.c b/kernel/smp.c index 038d666f327b..7a85bcddd9dc 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -31,12 +31,8 @@ #define CSD_TYPE(_csd) ((_csd)->node.u_flags & CSD_FLAG_TYPE_MASK) -struct cfd_percpu { - call_single_data_t csd; -}; - struct call_function_data { - struct cfd_percpu __percpu *pcpu; + call_single_data_t __percpu *csd; cpumask_var_t cpumask; cpumask_var_t cpumask_ipi; }; @@ -59,8 +55,8 @@ int smpcfd_prepare_cpu(unsigned int cpu) free_cpumask_var(cfd->cpumask); return -ENOMEM; } - cfd->pcpu = alloc_percpu(struct cfd_percpu); - if (!cfd->pcpu) { + cfd->csd = alloc_percpu(call_single_data_t); + if (!cfd->csd) { free_cpumask_var(cfd->cpumask); free_cpumask_var(cfd->cpumask_ipi); return -ENOMEM; @@ -75,7 +71,7 @@ int smpcfd_dead_cpu(unsigned int cpu) free_cpumask_var(cfd->cpumask); free_cpumask_var(cfd->cpumask_ipi); - free_percpu(cfd->pcpu); + free_percpu(cfd->csd); return 0; } @@ -730,7 +726,7 @@ static void smp_call_function_many_cond(const struct cpumask *mask, cpumask_clear(cfd->cpumask_ipi); for_each_cpu(cpu, cfd->cpumask) { - call_single_data_t *csd = &per_cpu_ptr(cfd->pcpu, cpu)->csd; + call_single_data_t *csd = per_cpu_ptr(cfd->csd, cpu); if (cond_func && !cond_func(cpu, info)) continue; @@ -774,7 +770,7 @@ static void smp_call_function_many_cond(const struct cpumask *mask, for_each_cpu(cpu, cfd->cpumask) { call_single_data_t *csd; - csd = &per_cpu_ptr(cfd->pcpu, cpu)->csd; + csd = per_cpu_ptr(cfd->csd, cpu); csd_lock_wait(csd); } } From patchwork Tue Mar 21 00:55:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. McKenney" X-Patchwork-Id: 72567 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp1522838wrt; Mon, 20 Mar 2023 18:04:50 -0700 (PDT) X-Google-Smtp-Source: AK7set+yhAuRt8kpPqS932pNkozQgXtKJjxeK3EXaWwZUR/9IuaRizMFJXSFswxdCFyIJuIC1TUQ X-Received: by 2002:a17:90b:1d8a:b0:23f:5fe7:25a1 with SMTP id pf10-20020a17090b1d8a00b0023f5fe725a1mr659285pjb.13.1679360690238; Mon, 20 Mar 2023 18:04:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679360690; cv=none; d=google.com; s=arc-20160816; b=LefLAYg/UxVP9FOV///HUe38dEU7R65CFnq8DAXltPV5EH2jQHWzZ3s1aF5iqDEwkF g6Vqgp/9kbCZ/TOWnwS2F/sHj77EkMBG5PuJpEtjcWypxJiY5rWm0z5XjvB7N5OENuc2 wct1mjYZtCBRNBB53iRootRrI7uocFHGWKVBrqEiqD4idD2CjOCA57eI3vOzFhptovGS uX3xOiEiehniTLXUfssqUSqCsAeaQFc5inRZl4H6bXrfZwSYNpjN08oqBukAZkRLZnjX skd0wNI5sWDkogmeNV+IeZ8I3uhBFeWn4dDigUqH1BnUQ8Wp3C0uZPwWwNKdyVUazs7M yalw== 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=rrXcw0k5H12PWjk51NC1AE/jhElj7G5fqOZjetS/eNI=; b=XV8+5vqw1l+RfbAb0xlz71+4zewyA0psKlaIBHf7yMaAaVTF3yJXzQVBNBF58sXSxP SSKdkJvWn+yxPzUrWlDfTVLG/DJlDK9eSE/7uM7fT3RgxX7V6ZBOQ+acEg5+aL6n3E0z psu6q6Chla1B6skLBxupIcj5+vag8mlUAq1YmsOW+c2YzTO7mmtOKWeI6MN/an+sJd7X Ghg6YlfjYD8h+dA+jse6MA3RhoVF3IdmfDfBIhxG1K/XyHkYfKRKQhqJnSWcxehuyWMQ 3kuh8RHXPhW7ldHDqlEtDylnwVRQuyYB0f1Li1ANfEsH3/Hm/3AcOnwIah2Q7DNhEr4u 1viQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Dq4vUy8g; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h20-20020a17090acf1400b0023d982fb7ecsi17051736pju.75.2023.03.20.18.04.37; Mon, 20 Mar 2023 18:04:50 -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=@kernel.org header.s=k20201202 header.b=Dq4vUy8g; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229483AbjCUAzZ (ORCPT + 99 others); Mon, 20 Mar 2023 20:55:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37898 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229713AbjCUAzX (ORCPT ); Mon, 20 Mar 2023 20:55:23 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 23AF33430C for ; Mon, 20 Mar 2023 17:55:20 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 89333618F4 for ; Tue, 21 Mar 2023 00:55:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E6FB6C4339C; Tue, 21 Mar 2023 00:55:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679360118; bh=x3dYREr13qysgzwTS5v6Z35aAfe/WZzlbYN9SMZ6zZ8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Dq4vUy8ghBwgdglCk3r1bXCg9XrfkbsEECqD02CDoEEewVlBvPDfAqHXWcRNsByw0 ay17aMja0BFHQc5YZ0YXKLWtZIGZpOfcw7RJYuWwPToQhtesjTwL21w79ybsRQ7EKv JZepj8uP1M9PH0KI/++R7ne3+XnzlcuT/10ptmLus9VgI8K7593s/5n1OVYNIK3mmX QGf+Azfj+5jt5dwqoZpXLjQXAoaX+SPehIT5Tb7vZ/CLCtfs9aP8MaYqOLEvpGfD9h gWuBr+bK4IdzpUbcks1/ZVuhLq0kU9k/emPv4vQKk6/svBwEpgLbfySNkyu9DT3NUH ovF/bX/zGs+ag== Received: by paulmck-ThinkPad-P72.home (Postfix, from userid 1000) id 75E81154039F; Mon, 20 Mar 2023 17:55:18 -0700 (PDT) From: "Paul E. McKenney" To: linux-kernel@vger.kernel.org Cc: kernel-team@meta.com, rostedt@goodmis.org, jgross@suse.com, mingo@kernel.org, peterz@infradead.org, corbet@lwn.net, "Paul E. McKenney" , Jes Sorensen Subject: [PATCH CSDlock 4/4] kernel/smp: Make csdlock_debug= resettable Date: Mon, 20 Mar 2023 17:55:16 -0700 Message-Id: <20230321005516.50558-4-paulmck@kernel.org> X-Mailer: git-send-email 2.40.0.rc2 In-Reply-To: <0c368b66-71b2-442f-a8f7-e6decc4be2d6@paulmck-laptop> References: <0c368b66-71b2-442f-a8f7-e6decc4be2d6@paulmck-laptop> MIME-Version: 1.0 X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760937315313493764?= X-GMAIL-MSGID: =?utf-8?q?1760937315313493764?= It is currently possible to set the csdlock_debug_enabled static branch, but not to reset it. This is an issue when several different entities supply kernel boot parameters and also for kernels built with CONFIG_CSD_LOCK_WAIT_DEBUG_DEFAULT=y. Therefore, make the csdlock_debug=0 kernel boot parameter turn off debugging. Last one wins! Reported-by: Jes Sorensen Signed-off-by: Paul E. McKenney --- Documentation/admin-guide/kernel-parameters.txt | 13 +++++++------ kernel/smp.c | 11 ++++++++--- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index b15198a85acb..5f2ec4b0f927 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -889,12 +889,13 @@ cs89x0_media= [HW,NET] Format: { rj45 | aui | bnc } - csdlock_debug= [KNL] Enable debug add-ons of cross-CPU function call - handling. When switched on, additional debug data is - printed to the console in case a hanging CPU is - detected, and that CPU is pinged again in order to try - to resolve the hang situation. The default value of - this option depends on the CSD_LOCK_WAIT_DEBUG_DEFAULT + csdlock_debug= [KNL] Enable or disable debug add-ons of cross-CPU + function call handling. When switched on, + additional debug data is printed to the console + in case a hanging CPU is detected, and that + CPU is pinged again in order to try to resolve + the hang situation. The default value of this + option depends on the CSD_LOCK_WAIT_DEBUG_DEFAULT Kconfig option. dasd= [HW,NET] diff --git a/kernel/smp.c b/kernel/smp.c index 7a85bcddd9dc..298ba7570621 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -116,11 +116,16 @@ static DEFINE_STATIC_KEY_MAYBE(CONFIG_CSD_LOCK_WAIT_DEBUG_DEFAULT, csdlock_debug */ static int __init csdlock_debug(char *str) { + int ret; unsigned int val = 0; - get_option(&str, &val); - if (val) - static_branch_enable(&csdlock_debug_enabled); + ret = get_option(&str, &val); + if (ret) { + if (val) + static_branch_enable(&csdlock_debug_enabled); + else + static_branch_disable(&csdlock_debug_enabled); + } return 1; }