lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 22 Nov 2022 14:11:28 -0800
From:   Randy Dunlap <rdunlap@...radead.org>
To:     paulmck@...nel.org, Petr Mladek <pmladek@...e.com>
Cc:     John Ogness <john.ogness@...utronix.de>,
        Naresh Kamboju <naresh.kamboju@...aro.org>,
        open list <linux-kernel@...r.kernel.org>,
        Nathan Chancellor <nathan@...nel.org>,
        Sergey Senozhatsky <senozhatsky@...omium.org>
Subject: Re: next-20221122: tinyconfig: ppc n s390:
 kernel/printk/printk.c:95:1: error: type specifier missing, defaults to
 'int'; ISO C99 and later do not support implicit int [-Werror,-Wimplicit-int]



On 11/22/22 14:00, Paul E. McKenney wrote:
> On Tue, Nov 22, 2022 at 04:55:26PM +0100, Petr Mladek wrote:
>> On Tue 2022-11-22 16:33:39, John Ogness wrote:
>>> On 2022-11-22, "Paul E. McKenney" <paulmck@...nel.org> wrote:
>>>>> @paulmck: Do you have a problem with permanently activating CONFIG_SRCU?
>>>>
>>>> The people wanting it separate back in the day were those wanting very
>>>> tiny kernels.  I have not heard from them in a long time, so maybe it
>>>> is now OK to just make SRCU unconditional.
>>>
>>> Who decides this? Or maybe I should create a semaphore-based Variant of
>>> console_srcu_read_lock()/console_srcu_read_unlock() for the
>>> "!CONFIG_PRINTK && !CONFIG_SRCU" case?
>>
>> I would prefer to avoid it. It would require keeping this in mind.
>> Semaphore behaves very differently than srcu_read_lock (deadlocks,
>> nesting).
>>
>> I am not sure how much the tiny SRCU would increase the size of
>> the kernel. I doubt that it would be more that what printk()
>> added by the various per-CPU and per-console buffers.
>>
>> Well, another question is why we actually need to register the consoles
>> at all for !CONFIG_PRINTK. Only reasons come to my mind:
>>
>>    + /dev/console
>>    + preventing double registration/unregistration (initialization)
>>
>> I could imagine to handle these two use-cases a special way
>> on tiny systems. But I would do it only when anyone complains.
> 
> And here is a first cut.  There will be more patches removing uses
> of CONFIG_SRCU.
> 
> Thoughts?

UML (x86_64 and i386) was also having this build error.
This patch fixes both of those for me.

Acked-by: Randy Dunlap <rdunlap@...radead.org> # build-tested

Thanks.

> ------------------------------------------------------------------------
> 
> commit 3721d024963fc35adf92983657dc00edde184d5c
> Author: Paul E. McKenney <paulmck@...nel.org>
> Date:   Tue Nov 22 13:53:57 2022 -0800
> 
>     rcu: Make SRCU mandatory
>     
>     Kernels configured with CONFIG_PRINTK=n and CONFIG_SRCU=n get build
>     failures.  This causes trouble for deep embedded systems.  But given
>     that there are more than 25 instances of "select SRCU" in the kernel,
>     it is hard to believe that there are many kernels running in production
>     without SRCU.  This commit therefore makes SRCU mandatory.  The SRCU
>     Kconfig option remains for backwards compatibility, and will be removed
>     when it is no longer used.
>     
>     Reported-by: John Ogness <john.ogness@...utronix.de>
>     Reported-by: Petr Mladek <pmladek@...e.com>
>     Signed-off-by: Paul E. McKenney <paulmck@...nel.org>
> 
> diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h
> index e89d2f7d0f79f..7f17acf29dda7 100644
> --- a/include/linux/rcutiny.h
> +++ b/include/linux/rcutiny.h
> @@ -152,11 +152,7 @@ static inline bool rcu_preempt_need_deferred_qs(struct task_struct *t)
>  	return false;
>  }
>  static inline void rcu_preempt_deferred_qs(struct task_struct *t) { }
> -#ifdef CONFIG_SRCU
>  void rcu_scheduler_starting(void);
> -#else /* #ifndef CONFIG_SRCU */
> -static inline void rcu_scheduler_starting(void) { }
> -#endif /* #else #ifndef CONFIG_SRCU */
>  static inline void rcu_end_inkernel_boot(void) { }
>  static inline bool rcu_inkernel_boot_has_ended(void) { return true; }
>  static inline bool rcu_is_watching(void) { return true; }
> diff --git a/include/linux/srcu.h b/include/linux/srcu.h
> index f0814ffca34bb..7d680ff27505b 100644
> --- a/include/linux/srcu.h
> +++ b/include/linux/srcu.h
> @@ -78,11 +78,7 @@ static inline void __srcu_read_unlock_nmisafe(struct srcu_struct *ssp, int idx)
>  }
>  #endif /* CONFIG_NEED_SRCU_NMI_SAFE */
>  
> -#ifdef CONFIG_SRCU
>  void srcu_init(void);
> -#else /* #ifdef CONFIG_SRCU */
> -static inline void srcu_init(void) { }
> -#endif /* #else #ifdef CONFIG_SRCU */
>  
>  #ifdef CONFIG_DEBUG_LOCK_ALLOC
>  
> diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig
> index 05106e6fbd0ed..ab62074174c32 100644
> --- a/kernel/rcu/Kconfig
> +++ b/kernel/rcu/Kconfig
> @@ -54,21 +54,17 @@ config RCU_EXPERT
>  	  Say N if you are unsure.
>  
>  config SRCU
> -	bool
> -	help
> -	  This option selects the sleepable version of RCU. This version
> -	  permits arbitrary sleeping or blocking within RCU read-side critical
> -	  sections.
> +	def_bool y
>  
>  config TINY_SRCU
>  	bool
> -	default y if SRCU && TINY_RCU
> +	default y if TINY_RCU
>  	help
>  	  This option selects the single-CPU non-preemptible version of SRCU.
>  
>  config TREE_SRCU
>  	bool
> -	default y if SRCU && !TINY_RCU
> +	default y if !TINY_RCU
>  	help
>  	  This option selects the full-fledged version of SRCU.
>  
> @@ -77,7 +73,6 @@ config NEED_SRCU_NMI_SAFE
>  
>  config TASKS_RCU_GENERIC
>  	def_bool TASKS_RCU || TASKS_RUDE_RCU || TASKS_TRACE_RCU
> -	select SRCU
>  	help
>  	  This option enables generic infrastructure code supporting
>  	  task-based RCU implementations.  Not for manual selection.
> diff --git a/kernel/rcu/Kconfig.debug b/kernel/rcu/Kconfig.debug
> index ea654fdae9a06..49da904df6aa6 100644
> --- a/kernel/rcu/Kconfig.debug
> +++ b/kernel/rcu/Kconfig.debug
> @@ -27,7 +27,6 @@ config RCU_SCALE_TEST
>  	tristate "performance tests for RCU"
>  	depends on DEBUG_KERNEL
>  	select TORTURE_TEST
> -	select SRCU
>  	default n
>  	help
>  	  This option provides a kernel module that runs performance
> @@ -43,7 +42,6 @@ config RCU_TORTURE_TEST
>  	tristate "torture tests for RCU"
>  	depends on DEBUG_KERNEL
>  	select TORTURE_TEST
> -	select SRCU
>  	default n
>  	help
>  	  This option provides a kernel module that runs torture tests
> @@ -59,7 +57,6 @@ config RCU_REF_SCALE_TEST
>  	tristate "Scalability tests for read-side synchronization (RCU and others)"
>  	depends on DEBUG_KERNEL
>  	select TORTURE_TEST
> -	select SRCU
>  	default n
>  	help
>  	  This option provides a kernel module that runs performance tests
> diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h
> index 70c79adfdc704..886e6b0943ab8 100644
> --- a/kernel/rcu/rcu.h
> +++ b/kernel/rcu/rcu.h
> @@ -287,7 +287,7 @@ void rcu_test_sync_prims(void);
>   */
>  extern void resched_cpu(int cpu);
>  
> -#if defined(CONFIG_SRCU) || !defined(CONFIG_TINY_RCU)
> +#if !defined(CONFIG_TINY_RCU)
>  
>  #include <linux/rcu_node_tree.h>
>  
> @@ -438,7 +438,7 @@ do {									\
>  #define raw_lockdep_assert_held_rcu_node(p)				\
>  	lockdep_assert_held(&ACCESS_PRIVATE(p, lock))
>  
> -#endif /* #if defined(CONFIG_SRCU) || !defined(CONFIG_TINY_RCU) */
> +#endif /* !defined(CONFIG_TINY_RCU) */
>  
>  #ifdef CONFIG_TINY_RCU
>  /* Tiny RCU doesn't expedite, as its purpose in life is instead to be tiny. */
> diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
> index 76f9848a21cd5..7b1e183b0eb23 100644
> --- a/kernel/rcu/update.c
> +++ b/kernel/rcu/update.c
> @@ -224,7 +224,7 @@ void rcu_test_sync_prims(void)
>  	synchronize_rcu_expedited();
>  }
>  
> -#if !defined(CONFIG_TINY_RCU) || defined(CONFIG_SRCU)
> +#if !defined(CONFIG_TINY_RCU)
>  
>  /*
>   * Switch to run-time mode once RCU has fully initialized.
> @@ -239,7 +239,7 @@ static int __init rcu_set_runtime_mode(void)
>  }
>  core_initcall(rcu_set_runtime_mode);
>  
> -#endif /* #if !defined(CONFIG_TINY_RCU) || defined(CONFIG_SRCU) */
> +#endif /* #if !defined(CONFIG_TINY_RCU) */
>  
>  #ifdef CONFIG_DEBUG_LOCK_ALLOC
>  static struct lock_class_key rcu_lock_key;
> @@ -561,10 +561,8 @@ static void early_boot_test_call_rcu(void)
>  	struct early_boot_kfree_rcu *rhp;
>  
>  	call_rcu(&head, test_callback);
> -	if (IS_ENABLED(CONFIG_SRCU)) {
> -		early_srcu_cookie = start_poll_synchronize_srcu(&early_srcu);
> -		call_srcu(&early_srcu, &shead, test_callback);
> -	}
> +	early_srcu_cookie = start_poll_synchronize_srcu(&early_srcu);
> +	call_srcu(&early_srcu, &shead, test_callback);
>  	rhp = kmalloc(sizeof(*rhp), GFP_KERNEL);
>  	if (!WARN_ON_ONCE(!rhp))
>  		kfree_rcu(rhp, rh);
> @@ -587,12 +585,10 @@ static int rcu_verify_early_boot_tests(void)
>  	if (rcu_self_test) {
>  		early_boot_test_counter++;
>  		rcu_barrier();
> -		if (IS_ENABLED(CONFIG_SRCU)) {
> -			early_boot_test_counter++;
> -			srcu_barrier(&early_srcu);
> -			WARN_ON_ONCE(!poll_state_synchronize_srcu(&early_srcu, early_srcu_cookie));
> -			cleanup_srcu_struct(&early_srcu);
> -		}
> +		early_boot_test_counter++;
> +		srcu_barrier(&early_srcu);
> +		WARN_ON_ONCE(!poll_state_synchronize_srcu(&early_srcu, early_srcu_cookie));
> +		cleanup_srcu_struct(&early_srcu);
>  	}
>  	if (rcu_self_test_counter != early_boot_test_counter) {
>  		WARN_ON(1);

-- 
~Randy

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ