Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp281773ybt; Wed, 17 Jun 2020 00:21:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzWfanZXlqe0ChHMsh3qYobIm0VKibyugx7RCcva+s15FMh7ux0OfWQxMYC/xeJjSWOA/vK X-Received: by 2002:a17:906:e257:: with SMTP id gq23mr5958092ejb.398.1592378467747; Wed, 17 Jun 2020 00:21:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592378467; cv=none; d=google.com; s=arc-20160816; b=PW4ROWiI/Fsy4/xPxBQV5dVJBGBviF2CyFyIUmGf4ZRq5tMFG8SXBzHgiFioX9nNiw I6EX+2X5ywmOUs6I5cnRAHwkuP/I5uaQ/SbM+YXRbB7c77Mt2K/iXIVF5uDsumFMyayY IqxlMXmyE0KBs2N28eVQMxfzyBUEjJEezbmTz6Rk/JxtSKTHMFbe6k1xGDS9p1x1aU5a dOkR9+H8ZSm+IdnImkScm9aqBq8pdYV+pG94bs1ENqRGsn2JxJt7XwL6n261uKfixRT4 oPxBGWFg4Ba5YSFiHnFPnyN0wCiBOKs9WuYJeaWjJpoFoy+02YG07VszGaGuLiLfoIGu LRjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:to:references:subject:date :from; bh=gaLOdL5l7a5hw2X8ex3OXIA6UmsIa05c7RSY3qQC6NM=; b=wzxztnJ4aNXEyAjNWJsE1q3KNvsk1dhZw+Ti4byiTWA/krEByAV9mgo2AA+gd534DN YQlfUyioh0x+hZ3aZ/8hA+dErWv9GOAeN3Ujh8wX5mJBryDDEgy8dFV3bFb8yth1E2Ni DbODzCOUJkeR4fHiFDP1Ra+TRmRjWqCenMh4MMUc2cmwvlwCZi1BPRPcVOg8MDH+H9ul Gm4jtG3q2AR0hDc/up2ekpFF5oscnusex9X5t1QQ2dSeLRLXyde9XpA8ueIQ8yqNgihe 354J4HVfMqYiH5MchIA4daoKURslOT4mS4XTHe47v+dvL8v1tso6Xe/QugBic9R8yofc Xo6w== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y18si12450742ejm.315.2020.06.17.00.20.45; Wed, 17 Jun 2020 00:21:07 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726781AbgFQHR5 (ORCPT + 99 others); Wed, 17 Jun 2020 03:17:57 -0400 Received: from 167-179-156-38.a7b39c.bne.nbn.aussiebb.net ([167.179.156.38]:41773 "EHLO fornost.hmeau.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725894AbgFQHR5 (ORCPT ); Wed, 17 Jun 2020 03:17:57 -0400 Received: from gwarestrin.arnor.me.apana.org.au ([192.168.0.7]) by fornost.hmeau.com with smtp (Exim 4.92 #5 (Debian)) id 1jlSK1-0003hL-J3; Wed, 17 Jun 2020 17:17:22 +1000 Received: by gwarestrin.arnor.me.apana.org.au (sSMTP sendmail emulation); Wed, 17 Jun 2020 17:17:21 +1000 From: "Herbert Xu" Date: Wed, 17 Jun 2020 17:17:21 +1000 Subject: [v3 PATCH 2/2] printk: Make linux/printk.h self-contained References: <20200617071524.GA3055@gondor.apana.org.au> To: Petr Mladek , Sergey Senozhatsky , Steven Rostedt , Linux Kernel Mailing List , Peter Zijlstra , Ingo Molnar , Will Deacon , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , linux-s390@vger.kernel.org Message-Id: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As it stands if you include printk.h by itself it will fail to compile because it requires definitions from ratelimit.h. However, simply including ratelimit.h from printk.h does not work due to inclusion loops involving sched.h and kernel.h. This patch solves this by moving bits from ratelimit.h into a new header file which can then be included by printk.h without any worries about header loops. The build bot then revealed some intriguing failures arising out of this patch. On s390 there is an inclusion loop with asm/bug.h and linux/kernel.h that triggers a compile failure, because kernel.h will cause asm-generic/bug.h to be included before s390's own asm/bug.h has finished processing. This has been fixed by not including kernel.h in arch/s390/include/asm/bug.h. Signed-off-by: Herbert Xu Reviewed-by: Andy Shevchenko Reviewed-by: Sergey Senozhatsky Acked-by: Petr Mladek Acked-by: Steven Rostedt (VMware) --- arch/s390/include/asm/bug.h | 2 - include/linux/printk.h | 1 include/linux/ratelimit.h | 36 --------------------------------- include/linux/ratelimit_types.h | 43 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 36 deletions(-) diff --git a/arch/s390/include/asm/bug.h b/arch/s390/include/asm/bug.h index 7725f8006fdfb..0b25f28351edc 100644 --- a/arch/s390/include/asm/bug.h +++ b/arch/s390/include/asm/bug.h @@ -2,7 +2,7 @@ #ifndef _ASM_S390_BUG_H #define _ASM_S390_BUG_H -#include +#include #ifdef CONFIG_BUG diff --git a/include/linux/printk.h b/include/linux/printk.h index fc8f03c545430..34c1a7be3e014 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -7,6 +7,7 @@ #include #include #include +#include extern const char linux_banner[]; extern const char linux_proc_banner[]; diff --git a/include/linux/ratelimit.h b/include/linux/ratelimit.h index 8ddf79e9207a9..b17e0cd0a30cf 100644 --- a/include/linux/ratelimit.h +++ b/include/linux/ratelimit.h @@ -2,41 +2,10 @@ #ifndef _LINUX_RATELIMIT_H #define _LINUX_RATELIMIT_H -#include +#include #include #include -#define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) -#define DEFAULT_RATELIMIT_BURST 10 - -/* issue num suppressed message on exit */ -#define RATELIMIT_MSG_ON_RELEASE BIT(0) - -struct ratelimit_state { - raw_spinlock_t lock; /* protect the state */ - - int interval; - int burst; - int printed; - int missed; - unsigned long begin; - unsigned long flags; -}; - -#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) { \ - .lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ - .interval = interval_init, \ - .burst = burst_init, \ - } - -#define RATELIMIT_STATE_INIT_DISABLED \ - RATELIMIT_STATE_INIT(ratelimit_state, 0, DEFAULT_RATELIMIT_BURST) - -#define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \ - \ - struct ratelimit_state name = \ - RATELIMIT_STATE_INIT(name, interval_init, burst_init) \ - static inline void ratelimit_state_init(struct ratelimit_state *rs, int interval, int burst) { @@ -73,9 +42,6 @@ ratelimit_set_flags(struct ratelimit_state *rs, unsigned long flags) extern struct ratelimit_state printk_ratelimit_state; -extern int ___ratelimit(struct ratelimit_state *rs, const char *func); -#define __ratelimit(state) ___ratelimit(state, __func__) - #ifdef CONFIG_PRINTK #define WARN_ON_RATELIMIT(condition, state) ({ \ diff --git a/include/linux/ratelimit_types.h b/include/linux/ratelimit_types.h new file mode 100644 index 0000000000000..b676aa419eef8 --- /dev/null +++ b/include/linux/ratelimit_types.h @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_RATELIMIT_TYPES_H +#define _LINUX_RATELIMIT_TYPES_H + +#include +#include +#include + +#define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) +#define DEFAULT_RATELIMIT_BURST 10 + +/* issue num suppressed message on exit */ +#define RATELIMIT_MSG_ON_RELEASE BIT(0) + +struct ratelimit_state { + raw_spinlock_t lock; /* protect the state */ + + int interval; + int burst; + int printed; + int missed; + unsigned long begin; + unsigned long flags; +}; + +#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) { \ + .lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ + .interval = interval_init, \ + .burst = burst_init, \ + } + +#define RATELIMIT_STATE_INIT_DISABLED \ + RATELIMIT_STATE_INIT(ratelimit_state, 0, DEFAULT_RATELIMIT_BURST) + +#define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \ + \ + struct ratelimit_state name = \ + RATELIMIT_STATE_INIT(name, interval_init, burst_init) \ + +extern int ___ratelimit(struct ratelimit_state *rs, const char *func); +#define __ratelimit(state) ___ratelimit(state, __func__) + +#endif /* _LINUX_RATELIMIT_TYPES_H */