Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3531316pxb; Mon, 24 Jan 2022 11:32:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJwx4c0Hp3R9/7GcB26/+5eOtpjzw3d9GoKybF1nrdca8qMuKINRyJM1L9BsNydCJWeLOKy1 X-Received: by 2002:a63:1607:: with SMTP id w7mr12973387pgl.526.1643052754157; Mon, 24 Jan 2022 11:32:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643052754; cv=none; d=google.com; s=arc-20160816; b=vhGOmPNClyxk5IHwsz+w9yk/bVVhJBPeri4tXy34JRW2c3gwd8jS4DJRCIdTPQWHKp MySewk+EXr8+ewzZPGyj2GWAgKiV2K8a2XpoL5S+p3kAOuz3rMVikI4wyYdamGkk1BGG xHo+oj+aj7f35twrGT5P6+UVWtIkWRY1Y5kacy940M/nTkJ1NHUzvQloYO4CsW7zfV2K LLfR3fdNo50ZYhGYc3ockXa6D3GRNVjqmYH+i23Lv+x1G3DO2CPaPrVlK8lW+kOpf8Wv mYNdlNjy74fp/AUiasZ5A2xLBeAl02J24eXjWpEdKMkRcUNr3h/ztwqCzlABD3bNlNjQ e4yg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:dkim-signature:dkim-signature:from; bh=7PeaWocVe+zAkIL1SsVk87o1AdXbDA9YfLASIl5X0r4=; b=ltRgC+InLYoLaq9MFea/FUuNi7HTcWZzADttI60Jks9DDavkEKh5y0gZ9hojt8Vdp2 S0JthhFgyRrp4z8fLZageCjZXfZ0tNBXRvxljt0e6ngJWzkZDp8c22bzUKytMzfKSt4b m2r5ECOHZphe+847ENUYWONa/iufm2xZO/JUgtoNw7/MCiNkgROgMpSaW0erPXwaIUPd nmwl6mz62vhbVPZZpmImE0Q+wei9RWKoJj1JZ1v3MiHCzv18FgChVG+Xksqg+v/q7vyZ jc5xwp+lhOBx7bQcP3kVbwDrE7LuHLGxKsar/qW1J7/6X0eJOVlGXfD7updK6M1dig/1 AeLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=XYqDAdpr; dkim=neutral (no key) header.i=@linutronix.de; 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=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l5si14165382pgq.400.2022.01.24.11.32.22; Mon, 24 Jan 2022 11:32:34 -0800 (PST) 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=@linutronix.de header.s=2020 header.b=XYqDAdpr; dkim=neutral (no key) header.i=@linutronix.de; 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=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243604AbiAXQMr (ORCPT + 99 others); Mon, 24 Jan 2022 11:12:47 -0500 Received: from Galois.linutronix.de ([193.142.43.55]:43980 "EHLO galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243410AbiAXQMp (ORCPT ); Mon, 24 Jan 2022 11:12:45 -0500 From: John Ogness DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1643040763; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=7PeaWocVe+zAkIL1SsVk87o1AdXbDA9YfLASIl5X0r4=; b=XYqDAdpr1CEck0L19jB9n0JlvFW0e+ol2ELD5OFtCJDLzCQaxUZAwaws+v+nx9O3v4l01W Q+6MYcMKLzUDGdfyQ0S+SdKFaI4aQzSsZNnQ6VBUf7lRuJsKOClgEValpd7x145R6gRCgJ +r7n9uCTiQHYi8ws31LB4txTN9qasgXJCkd0p2Lm57ZUPqH6KQhzbBuFJ+RUEd3MtSRW6C Q9x9C2sQfXLAz5aXvfMF1m2f4UAzfeM9egYZTD9bdlvjC558NGOk7ZzKmb0uB8LRA8CO5A kG2j+F9ub5++TMAbCniMnN/NjhqXTV0bIVyNgYcB7llDhyyieRg9ruCkNo6BOA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1643040763; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=7PeaWocVe+zAkIL1SsVk87o1AdXbDA9YfLASIl5X0r4=; b=l6Bi8186Y1Aten8NfPIKdPGOZXyrec0przkfM28k6xCZQT2f/dZV+sQd3sji02FSCvWpGO lRh4znBGtAWhepBw== To: Stephen Brennan , Petr Mladek , Sergey Senozhatsky , Steven Rostedt Cc: Stephen Brennan , Sergey Senozhatsky , linux-kernel@vger.kernel.org Subject: Re: [PATCH 4/4] printk: Drop console_sem during panic In-Reply-To: <20220121190222.572694-5-stephen.s.brennan@oracle.com> References: <20220121190222.572694-1-stephen.s.brennan@oracle.com> <20220121190222.572694-5-stephen.s.brennan@oracle.com> Date: Mon, 24 Jan 2022 17:18:42 +0106 Message-ID: <87pmoh3yf9.fsf@jogness.linutronix.de> MIME-Version: 1.0 Content-Type: text/plain Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2022-01-21, Stephen Brennan wrote: > If another CPU is in panic, we are about to be halted. Try to gracefully > drop console_sem and allow the panic CPU to grab it easily. > > Suggested-by: Petr Mladek > Signed-off-by: Stephen Brennan > --- > kernel/printk/printk.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c > index ca253ac07615..c2dc8ebd9509 100644 > --- a/kernel/printk/printk.c > +++ b/kernel/printk/printk.c > @@ -2668,7 +2668,7 @@ void console_unlock(void) > > for (;;) { > size_t ext_len = 0; > - int handover; > + int handover, pcpu; > size_t len; > > skip: > @@ -2739,6 +2739,12 @@ void console_unlock(void) > if (handover) > return; > > + /* Allow panic_cpu to take over the consoles safely */ > + pcpu = atomic_read(&panic_cpu); > + if (unlikely(pcpu != PANIC_CPU_INVALID && > + pcpu != raw_smp_processor_id())) > + break; > + Keep in mind that after the "break", this context will try to re-acquire the console lock and continue printing. That is a pretty small window for the panic CPU to attempt a trylock. Perhaps the retry after the loop should also be avoided for non-panic CPUs. This would rely on the panic CPU taking over (as your comment suggests will happen). Since the panic-CPU calls pr_emerg() as the final record before drifting off to neverland, that is probably OK. Something like: @@ -2731,7 +2731,8 @@ void console_unlock(void) * there's a new owner and the console_unlock() from them will do the * flush, no worries. */ - retry = prb_read_valid(prb, next_seq, NULL); + retry = (pcpu != raw_smp_processor_id()) && + prb_read_valid(prb, next_seq, NULL); if (retry && console_trylock()) goto again; } I would also like to see a comment about why it is acceptable to use raw_smp_processor_id() in a context that has migration enabled. Something like: raw_smp_processor_id() can be used because this context cannot be migrated to the panic CPU. John Ogness