Received: by 2002:a05:7412:d8a:b0:e2:908c:2ebd with SMTP id b10csp1209005rdg; Fri, 13 Oct 2023 13:44:13 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHa+snNjPcEFTpqm55Z7y/GFfQ44eY+Yrf3smLth2K+YP18xdprtSHPDEHfuWa5akRfWFX9 X-Received: by 2002:a05:6a20:4305:b0:15e:2d9f:cae0 with SMTP id h5-20020a056a20430500b0015e2d9fcae0mr29736197pzk.10.1697229852819; Fri, 13 Oct 2023 13:44:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697229852; cv=none; d=google.com; s=arc-20160816; b=Sk4O5EC+tPMjmtIg/+gEtjL/j5+klOn6vvFMnae9uJ3XM2dRHtIjApT/Uz1g/25Gbt 1XX/BLKCXe2RzGoPAP6hVvgCkWf0tnugFp4clTrvAECUeGknpBA8H3RgaEFMa9mzL5Ab TTU7B7x9qMrPCwgAA90pRK5ypJDUU/ANw/2si4T6b1Jd3igXSstsfKp5d7VclI2DThnC HuhwC/jL86ni0uSeY6WRuhFVdiKftkuZS+2ovvK4Cs8vExekJ2VvZRIluckkhQg3l+aW 70vj8kkOzj+eDETWBmQSmGmvpp2bPyJQa6xL0cxFDvxoO1nQjVzCC6lYLrKdPgRr8JVt QHPw== 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:dkim-signature :dkim-signature:from; bh=57p/+gSPfOoKdSF21ACUMUWvxO7+D7FS68Md7CNw7GE=; fh=pKnPKUsir0uEGSsor+4Zc2vgbu+g+ayvUgsdzkuXaoA=; b=lyZN5o3zkIvxFhl9cBgzzwofWXJMx2pl1SLm/zOAbnEJULxTK4QCcw5YNS0URljIwR 1VEW0Pyrd7s4qKYSrIytVP+/m1dn5LUyQy80nFkun41mghT3hWVxr/fb4zIU9vhmTRfF bQczVkkHWtUCCXB8VM/fA001J6KREs5O/kX0AoYNkdPekhdYfm6KO4WeRxTM63vwURrL KihwFJ8rQGuXEMIbJdse16goX5JWJhSqPBIKHuEhuWo8QLYgjcgXV5m7fN2Bbu0RZhY8 d5A9olr660DUf9Myk65B8/gPL2LCd2Y5LuJYDVQMuUNpH08rf/bsKM7782H3d5rkua3J 9z6A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=0xRJBwAV; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e header.b=sWpIK1b2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id v186-20020a6389c3000000b005ad14d37968si1531400pgd.773.2023.10.13.13.44.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Oct 2023 13:44:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=0xRJBwAV; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e header.b=sWpIK1b2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 777A683B5A3D; Fri, 13 Oct 2023 13:44:09 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232041AbjJMUn5 (ORCPT + 99 others); Fri, 13 Oct 2023 16:43:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44386 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231680AbjJMUnt (ORCPT ); Fri, 13 Oct 2023 16:43:49 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A929BF for ; Fri, 13 Oct 2023 13:43:48 -0700 (PDT) From: John Ogness DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1697229827; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=57p/+gSPfOoKdSF21ACUMUWvxO7+D7FS68Md7CNw7GE=; b=0xRJBwAVH/UTiYtp6zcbdVc+c0Ujn60Jf4rk/D5a8G9mOgHOZAlf9xbncVwPRgT3whA8UG usAZZVImCxA+5LUkUX0pJbTfFkF1Yyr+0nmjnyGfkoUytdC8YI9aWYIgqGLDhCKKBFyxX9 CcRrjmMV8iv5MYOaJNPKVsKKxKn+VCqJlQbjgaTwgonRP8+hD5HZmDhxl2DgY/BOIVl/om S7tGO1eHr5WwQ7uUHQfXpjE+XzYi8PZvYqZRPWmQtNC+sh6+w2D6p2OAEIA37PuOIukljA zm/FT01ylYVPgmyNl8aWYntBnyO0qKWK7xYqKINUcfPQG7M4Uje1SdMcTe6How== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1697229827; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=57p/+gSPfOoKdSF21ACUMUWvxO7+D7FS68Md7CNw7GE=; b=sWpIK1b2zhiGcoMSIFK4I5BAQHavPrQ7DURfIvSsasFZVR8eX4g/mmO0MgjRzw/pR7aUyp JRrs1TGPK14eyhAg== To: Petr Mladek Cc: Sergey Senozhatsky , Steven Rostedt , Thomas Gleixner , linux-kernel@vger.kernel.org Subject: [PATCH printk v2 4/4] printk: Ignore waiter on panic Date: Fri, 13 Oct 2023 22:49:40 +0206 Message-Id: <20231013204340.1112036-5-john.ogness@linutronix.de> In-Reply-To: <20231013204340.1112036-1-john.ogness@linutronix.de> References: <20231013204340.1112036-1-john.ogness@linutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INVALID_DATE_TZ_ABSURD, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Fri, 13 Oct 2023 13:44:09 -0700 (PDT) Commit d51507098ff91 ("printk: disable optimistic spin during panic") added checks to avoid becoming a console waiter if a panic is in progress. However, the transition to panic can occur while there is already a waiter. If the panic occurred in a context that does not support printing from the printk() caller context, the waiter CPU may become stopped while still stored as @console_waiter. Then when console_flush_on_panic() is called, the panic CPU will see @console_waiter and handover to the stopped CPU. Here a simple example: CPU0 CPU1 ---- ---- console_lock_spinning_enable() console_trylock_spinning() [set as console waiter] NMI: panic() panic_other_cpus_shutdown() [stopped as console waiter] console_flush_on_panic() console_lock_spinning_enable() [print 1 record] console_lock_spinning_disable_and_check() [handover to stopped CPU1] This results in panic() not flushing the panic messages. Fix this by ignoring any console waiter if the panic CPU is printing. Fixes: dbdda842fe96 ("printk: Add console owner and waiter logic to load balance console writes") Signed-off-by: John Ogness --- kernel/printk/printk.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 56d9b4acbbf2..cd6493f12970 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -1904,7 +1904,8 @@ static int console_lock_spinning_disable_and_check(int cookie) console_owner = NULL; raw_spin_unlock(&console_owner_lock); - if (!waiter) { + /* Waiters are ignored by the panic CPU. */ + if (!waiter || this_cpu_in_panic()) { spin_release(&console_owner_dep_map, _THIS_IP_); return 0; } -- 2.39.2