Received: by 10.223.176.46 with SMTP id f43csp529726wra; Fri, 19 Jan 2018 23:17:17 -0800 (PST) X-Google-Smtp-Source: AH8x2271W3ylfg15YwmwhwtfS+BbwUjkQ+UKez4uVaIN7tpiZUtyjiVs+WldERlwgi00fNYwaLEG X-Received: by 10.101.77.8 with SMTP id i8mr1166668pgt.308.1516432636904; Fri, 19 Jan 2018 23:17:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516432636; cv=none; d=google.com; s=arc-20160816; b=stO4xdgqqvCFNLwVaCTZY0n7k3oQ6DnF25vY3M61U2L+JcaZZ+hP2mbGT9n+JQ173e 6eRETFNoSNBAFL5lTT8KDxuU2bcJaSLQEkbEYWv8l2ji4yJnj8c1Kc51q5I5JFXz2GTb 8M1BkfSw0GwP0kc2gxyAeUY6dHc0ZNSNwyHVepZ3CUz8RD5JZ5GJPH58g7eT/o8188mM FXPwqgN0pKfJWimi/02AOT286IQYJpLJZ7uka44QDxXxl78RG5tjvvnKyymsebOPiCTg eawPijsPIgUU3VzlZpdBqkkzPNgnswpzYIywz+LdCk2yl2r7KZ1uIZYMGIUMDZON2nVP BrKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature:arc-authentication-results; bh=wXVpeDJ7MlXZQVwReOouNkCSDvqmNXYwabs6C/7GoKU=; b=z/W/ZZd4AJxFkaAVhHR+O5aRYjgKRF5iYQyAwlspBDU34sXZDeG8QTTuCcvr2Q1T+n 4CQgYMx4ArtmKnrlXhRYbIO0gNFkf1W7oL3aNisqsF3xGrALPVTU/g2COJEOSeJqmswO PjsdmJWqCKw6VQRB6Zjnk2sf+YZsh14Rys0YVZRXikwrt5FGbe5VXVzGz/o6bY8+PkCd FGMmSHjSSP7Nn/vQMIjwBcCMXMdPB5ZMBV3fhzBlln2VSl2T4WWjZV8u425zhlD3Q1gL yLIriYTBS0Tg+la3NA8iQ9s1Mn3uA9E9TxH05Eo9JD7TIXrftjOkxxUjvlzfyEFSwYGq 40YA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Ox6/0v5S; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t192si9875204pgc.23.2018.01.19.23.16.51; Fri, 19 Jan 2018 23:17:16 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Ox6/0v5S; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753144AbeATHOP (ORCPT + 99 others); Sat, 20 Jan 2018 02:14:15 -0500 Received: from mail-pf0-f193.google.com ([209.85.192.193]:39206 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750745AbeATHOI (ORCPT ); Sat, 20 Jan 2018 02:14:08 -0500 Received: by mail-pf0-f193.google.com with SMTP id e11so3074039pff.6 for ; Fri, 19 Jan 2018 23:14:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=wXVpeDJ7MlXZQVwReOouNkCSDvqmNXYwabs6C/7GoKU=; b=Ox6/0v5ShONOHn/UTAG8vytKrMfKxxCswQKsYAHowN3jNOdyEH7thVat8bNYUO/R6y 76LJ8KRIns2nnOUYRJapn7nOl0WfcivWliYGvXy+iUBmLmKvdY17QdD4NMyjTlzJ5FZZ frzicvdyOl9zqn4F23uQK2IaHiewg9jSwQx3G9ore91eYmIULejlAKEYjtnW7j1I2mu4 CiQA3t/vNYQeRlIxytWFZMXhHH1/8l641Q2g8nCuZSxb3GiVep7udS2vNodCnACRdsCh 2tc3f8wWeCGnF+AWMBA1CqWtiBUfG5BCgEpHUcJSbOx9tS8yiS48fUH+BQ9EkSWoSiMk WVbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=wXVpeDJ7MlXZQVwReOouNkCSDvqmNXYwabs6C/7GoKU=; b=Ub2lys/GZomkr2ypvLfgYWIm4WASxTZA2LoqGPN9CqfNvR9I5he3wi3MZMWQRvd2py OBss+SbLb3ALa6J2qqdIgAQRiistVqrwWAPEBJoKUxEQGG/BLxXw3Rxw+gDjpWkmMBxz X+sWbVXDPdKZqmAivZas8W9Dc+XVwdsqRtKU4mFnpUYSswhlAZmpDyxskQjPBVa3nEa1 kSOdqkGv5VgrsxleJKlS32ufLWVDQPCMx7NtrG6xUI2rrssdIB18SQLNQRb0Nog8qgUf D33J+gEd/7vmtFH9PT3qL/kosJsx1mGNlvrNehj4DMdB4384Zjej/U+rMGozvUWPR8hy fU4g== X-Gm-Message-State: AKwxytdQzHm7G8IcO5wCAqvRfJVh2XaD3uMgx9B/7uhAE6A5tWHmtETZ 8vx8TujFTvTd7ze6DyDDRiM= X-Received: by 10.99.65.67 with SMTP id o64mr1148818pga.258.1516432448194; Fri, 19 Jan 2018 23:14:08 -0800 (PST) Received: from localhost ([39.7.55.219]) by smtp.gmail.com with ESMTPSA id i128sm19728006pfg.83.2018.01.19.23.14.05 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 19 Jan 2018 23:14:06 -0800 (PST) Date: Sat, 20 Jan 2018 16:14:02 +0900 From: Sergey Senozhatsky To: Steven Rostedt Cc: Tejun Heo , Petr Mladek , Sergey Senozhatsky , Sergey Senozhatsky , akpm@linux-foundation.org, linux-mm@kvack.org, Cong Wang , Dave Hansen , Johannes Weiner , Mel Gorman , Michal Hocko , Vlastimil Babka , Peter Zijlstra , Linus Torvalds , Jan Kara , Mathieu Desnoyers , Tetsuo Handa , rostedt@home.goodmis.org, Byungchul Park , Pavel Machek , linux-kernel@vger.kernel.org Subject: Re: [PATCH v5 0/2] printk: Console owner and waiter logic cleanup Message-ID: <20180120071402.GB8371@jagdpanzerIV> References: <20180111103845.GB477@jagdpanzerIV> <20180111112908.50de440a@vmware.local.home> <20180111203057.5b1a8f8f@gandalf.local.home> <20180111215547.2f66a23a@gandalf.local.home> <20180116194456.GS3460072@devbig577.frc2.facebook.com> <20180117091208.ezvuhumnsarz5thh@pathway.suse.cz> <20180117151509.GT3460072@devbig577.frc2.facebook.com> <20180117121251.7283a56e@gandalf.local.home> <20180117134201.0a9cbbbf@gandalf.local.home> <20180119132052.02b89626@gandalf.local.home> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180119132052.02b89626@gandalf.local.home> User-Agent: Mutt/1.9.2 (2017-12-15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On (01/19/18 13:20), Steven Rostedt wrote: [..] > I was thinking about this a bit more, and instead of offloading a > recursive printk, perhaps its best to simply throttle it. Because the > problem may not go away if a printk thread takes over, because the bug > is really the printk infrastructure filling the printk buffer keeping > printk from ever stopping. right. I didn't quite got it how that would help. if we would kick_offload every time we add new printks after call_console_drivers(), then we can just end up in a kick_offload loop traveling across all CPUs. [..] > asmlinkage int vprintk_emit(int facility, int level, > const char *dict, size_t dictlen, > @@ -1849,6 +1918,17 @@ asmlinkage int vprintk_emit(int facility, int level, > > /* This stops the holder of console_sem just where we want him */ > logbuf_lock_irqsave(flags); > + > + if (recursion_check_test()) { > + /* A printk happened within a printk at the same context */ > + if (this_cpu_inc_return(recursion_count) > recursion_max) { > + atomic_inc(&recursion_overflow); > + logbuf_unlock_irqrestore(flags); > + printed_len = 0; > + goto out; > + } > + } didn't have time to look at this carefully, but is this possible? printks from console_unlock()->call_console_drivers() are redirected to printk_safe buffer. we need irq_work on that CPU to flush its printk_safe buffer. > EXPORT_SYMBOL(vprintk_emit); > @@ -2343,9 +2428,14 @@ void console_unlock(void) > seen_seq = log_next_seq; > } > > - if (console_seq < log_first_seq) { > + if (console_seq < log_first_seq || atomic_read(&recursion_overflow)) { > + size_t missed; > + > + missed = atomic_xchg(&recursion_overflow, 0); > + missed += log_first_seq - console_seq; > + > len = sprintf(text, "** %u printk messages dropped **\n", > - (unsigned)(log_first_seq - console_seq)); > + (unsigned)missed); > > /* messages are gone, move to first one */ > console_seq = log_first_seq; how are we going to distinguish between lockdep splats, for instance, or WARNs from call_console_drivers() -> foo_write(), which are valuable, and kmalloc() print outs, which might be less valuable? are we going to lose all of them now? then we can do a much simpler thing - steal one bit from `printk_context' and use if for a new PRINTK_NOOP_CONTEXT, which will be set around call_console_drivers(). vprintk_func() would redirect printks to vprintk_noop(fmt, args), which will do nothing. -ss