diff mbox series

[1/1] srcu: Replace WARN_ON_ONCE() with BUILD_BUG_ON() if possible

Message ID 20240822032128.1970-1-thunder.leizhen@huawei.com (mailing list archive)
State Accepted
Commit 8ec15757954fac01914d7d40aa12bbd81c608706
Headers show
Series [1/1] srcu: Replace WARN_ON_ONCE() with BUILD_BUG_ON() if possible | expand

Commit Message

Leizhen (ThunderTown) Aug. 22, 2024, 3:21 a.m. UTC
The value of ARRAY_SIZE() can be determined at compile time, so if both
sides of the equation are ARRAY_SIZE(), using BUILD_BUG_ON() can help us
catch the problem earlier.

While there are cases where unequal array sizes will work, there is no
point in allowing them, so it makes more sense to force them to be equal
using BUILD_BUG_ON().

Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
---
 kernel/rcu/srcutree.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Paul E. McKenney Aug. 30, 2024, 10:39 a.m. UTC | #1
On Thu, Aug 22, 2024 at 11:21:28AM +0800, Zhen Lei wrote:
> The value of ARRAY_SIZE() can be determined at compile time, so if both
> sides of the equation are ARRAY_SIZE(), using BUILD_BUG_ON() can help us
> catch the problem earlier.
> 
> While there are cases where unequal array sizes will work, there is no
> point in allowing them, so it makes more sense to force them to be equal
> using BUILD_BUG_ON().
> 
> Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>

Reviewed-by: Paul E. McKenney <paulmck@kernel.org>

> ---
>  kernel/rcu/srcutree.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
> index b24db425f16d850..a9c7795bb77d650 100644
> --- a/kernel/rcu/srcutree.c
> +++ b/kernel/rcu/srcutree.c
> @@ -128,7 +128,7 @@ static void init_srcu_struct_data(struct srcu_struct *ssp)
>  	 * Initialize the per-CPU srcu_data array, which feeds into the
>  	 * leaves of the srcu_node tree.
>  	 */
> -	WARN_ON_ONCE(ARRAY_SIZE(sdp->srcu_lock_count) !=
> +	BUILD_BUG_ON(ARRAY_SIZE(sdp->srcu_lock_count) !=
>  		     ARRAY_SIZE(sdp->srcu_unlock_count));
>  	for_each_possible_cpu(cpu) {
>  		sdp = per_cpu_ptr(ssp->sda, cpu);
> @@ -186,7 +186,7 @@ static bool init_srcu_struct_nodes(struct srcu_struct *ssp, gfp_t gfp_flags)
>  	/* Each pass through this loop initializes one srcu_node structure. */
>  	srcu_for_each_node_breadth_first(ssp, snp) {
>  		spin_lock_init(&ACCESS_PRIVATE(snp, lock));
> -		WARN_ON_ONCE(ARRAY_SIZE(snp->srcu_have_cbs) !=
> +		BUILD_BUG_ON(ARRAY_SIZE(snp->srcu_have_cbs) !=
>  			     ARRAY_SIZE(snp->srcu_data_have_cbs));
>  		for (i = 0; i < ARRAY_SIZE(snp->srcu_have_cbs); i++) {
>  			snp->srcu_have_cbs[i] = SRCU_SNP_INIT_SEQ;
> -- 
> 2.34.1
>
diff mbox series

Patch

diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
index b24db425f16d850..a9c7795bb77d650 100644
--- a/kernel/rcu/srcutree.c
+++ b/kernel/rcu/srcutree.c
@@ -128,7 +128,7 @@  static void init_srcu_struct_data(struct srcu_struct *ssp)
 	 * Initialize the per-CPU srcu_data array, which feeds into the
 	 * leaves of the srcu_node tree.
 	 */
-	WARN_ON_ONCE(ARRAY_SIZE(sdp->srcu_lock_count) !=
+	BUILD_BUG_ON(ARRAY_SIZE(sdp->srcu_lock_count) !=
 		     ARRAY_SIZE(sdp->srcu_unlock_count));
 	for_each_possible_cpu(cpu) {
 		sdp = per_cpu_ptr(ssp->sda, cpu);
@@ -186,7 +186,7 @@  static bool init_srcu_struct_nodes(struct srcu_struct *ssp, gfp_t gfp_flags)
 	/* Each pass through this loop initializes one srcu_node structure. */
 	srcu_for_each_node_breadth_first(ssp, snp) {
 		spin_lock_init(&ACCESS_PRIVATE(snp, lock));
-		WARN_ON_ONCE(ARRAY_SIZE(snp->srcu_have_cbs) !=
+		BUILD_BUG_ON(ARRAY_SIZE(snp->srcu_have_cbs) !=
 			     ARRAY_SIZE(snp->srcu_data_have_cbs));
 		for (i = 0; i < ARRAY_SIZE(snp->srcu_have_cbs); i++) {
 			snp->srcu_have_cbs[i] = SRCU_SNP_INIT_SEQ;