mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] rcuscale: Constify struct rcu_scale_ops
@ 2026-11-07 21:02 Christophe JAILLET
  2026-11-07 23:25 ` Bradley Morgan
  0 siblings, 1 reply; 2+ messages in thread
From: Christophe JAILLET @ 2026-11-07 21:02 UTC (permalink / raw)
  To: Davidlohr Bueso, Paul E. McKenney, Josh Triplett,
	Frederic Weisbecker, Neeraj Upadhyay, Joel Fernandes, Boqun Feng,
	Uladzislau Rezki, Steven Rostedt, Mathieu Desnoyers,
	Lai Jiangshan, Zqiang
  Cc: linux-kernel, kernel-janitors, Christophe JAILLET, rcu

'struct rcu_scale_ops' is not modified in this driver.

Constifying these structures moves some data to a read-only section, so
increases overall security, especially when the structure holds some
function pointers.

On a x86_64, with allmodconfig:
Before:
======
   text	   data	    bss	    dec	    hex	filename
  45585	  24946	   2816	  73347	  11e83	kernel/rcu/rcuscale.o

After:
=====
   text	   data	    bss	    dec	    hex	filename
  46545	  23986	   2816	  73347	  11e83	kernel/rcu/rcuscale.o

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
Compile tested only.
---
 kernel/rcu/rcuscale.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c
index 1097ec15879c..522f7bc2e693 100644
--- a/kernel/rcu/rcuscale.c
+++ b/kernel/rcu/rcuscale.c
@@ -159,7 +159,7 @@ struct rcu_scale_ops {
 	const char *name;
 };
 
-static struct rcu_scale_ops *cur_ops;
+static const struct rcu_scale_ops *cur_ops;
 
 /*
  * Definitions for rcu scalability testing.
@@ -185,7 +185,7 @@ static void rcu_sync_scale_init(void)
 {
 }
 
-static struct rcu_scale_ops rcu_ops = {
+static const struct rcu_scale_ops rcu_ops = {
 	.ptype		= RCU_FLAVOR,
 	.init		= rcu_sync_scale_init,
 	.readlock	= rcu_scale_read_lock,
@@ -247,7 +247,7 @@ static void srcu_scale_synchronize_expedited(void)
 	synchronize_srcu_expedited(srcu_ctlp);
 }
 
-static struct rcu_scale_ops srcu_ops = {
+static const struct rcu_scale_ops srcu_ops = {
 	.ptype		= SRCU_FLAVOR,
 	.init		= rcu_sync_scale_init,
 	.readlock	= srcu_scale_read_lock,
@@ -276,7 +276,7 @@ static void srcu_sync_scale_cleanup(void)
 	cleanup_srcu_struct(srcu_ctlp);
 }
 
-static struct rcu_scale_ops srcud_ops = {
+static const struct rcu_scale_ops srcud_ops = {
 	.ptype		= SRCU_FLAVOR,
 	.init		= srcu_sync_scale_init,
 	.cleanup	= srcu_sync_scale_cleanup,
@@ -313,7 +313,7 @@ static void rcu_tasks_scale_stats(void)
 	rcu_tasks_torture_stats_print(scale_type, SCALE_FLAG);
 }
 
-static struct rcu_scale_ops tasks_ops = {
+static const struct rcu_scale_ops tasks_ops = {
 	.ptype		= RCU_TASKS_FLAVOR,
 	.init		= rcu_sync_scale_init,
 	.readlock	= tasks_scale_read_lock,
@@ -357,7 +357,7 @@ static void rcu_tasks_rude_scale_stats(void)
 	rcu_tasks_rude_torture_stats_print(scale_type, SCALE_FLAG);
 }
 
-static struct rcu_scale_ops tasks_rude_ops = {
+static const struct rcu_scale_ops tasks_rude_ops = {
 	.ptype		= RCU_TASKS_RUDE_FLAVOR,
 	.init		= rcu_sync_scale_init,
 	.readlock	= tasks_rude_scale_read_lock,
@@ -396,7 +396,7 @@ static void tasks_trace_scale_read_unlock(int idx)
 	rcu_read_unlock_trace();
 }
 
-static struct rcu_scale_ops tasks_tracing_ops = {
+static const struct rcu_scale_ops tasks_tracing_ops = {
 	.ptype		= RCU_TASKS_FLAVOR,
 	.init		= rcu_sync_scale_init,
 	.readlock	= tasks_trace_scale_read_lock,
@@ -693,7 +693,7 @@ rcu_scale_writer(void *arg)
 }
 
 static void
-rcu_scale_print_module_parms(struct rcu_scale_ops *cur_ops, const char *tag)
+rcu_scale_print_module_parms(const struct rcu_scale_ops *cur_ops, const char *tag)
 {
 	pr_alert("%s" SCALE_FLAG
 		 "--- %s: gp_async=%d gp_async_max=%d gp_exp=%d holdoff=%d minruntime=%d nreaders=%d nwriters=%d nexp=%d exp_interval=%d writer_holdoff=%d writer_holdoff_jiffies=%d verbose=%d shutdown_secs=%d\n",
@@ -1109,7 +1109,7 @@ rcu_scale_init(void)
 	int firsterr = 0;
 	long i;
 	long j;
-	static struct rcu_scale_ops *scale_ops[] = {
+	static const struct rcu_scale_ops *scale_ops[] = {
 		&rcu_ops, &srcu_ops, &srcud_ops, TASKS_OPS TASKS_RUDE_OPS TASKS_TRACING_OPS
 	};
 
-- 
2.56.0


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] rcuscale: Constify struct rcu_scale_ops
  2026-11-07 21:02 [PATCH] rcuscale: Constify struct rcu_scale_ops Christophe JAILLET
@ 2026-11-07 23:25 ` Bradley Morgan
  0 siblings, 0 replies; 2+ messages in thread
From: Bradley Morgan @ 2026-11-07 23:25 UTC (permalink / raw)
  To: christophe.jaillet
  Cc: boqun, dave, frederic, jiangshanlai, joelagnelf, josh,
	kernel-janitors, linux-kernel, mathieu.desnoyers,
	neeraj.upadhyay, paulmck, qiang.zhang, rcu, rostedt, urezki

On 7 November 2026 21:02:25 GMT, Christophe JAILLET
<christophe.jaillet@wanadoo.fr> wrote:
>'struct rcu_scale_ops' is not modified in this driver.
>
>Constifying these structures moves some data to a read-only section, so
>increases overall security, especially when the structure holds some
>function pointers.
>
>On a x86_64, with allmodconfig:
>Before:
>======
>   text	   data	    bss	    dec	    hex	filename
>  45585	  24946	   2816	  73347	  11e83	kernel/rcu/rcuscale.o
>
>After:
>=====
>   text	   data	    bss	    dec	    hex	filename
>  46545	  23986	   2816	  73347	  11e83	kernel/rcu/rcuscale.o
>

Well, thanks. so you just consted rcu_scale_ops()? Uhh, well, this makes
enough sense to be feasible

Reviewed-by: Bradley Morgan
<brads@mainlining.org>

But how is this worth it? Why doesn't this work now? how will this make it
better? Those are my questions. 

Well, I'm shrugging, but my tag would stand here, because it won't break
anything in particular.

>Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
>---
>Compile tested only.
>---
> kernel/rcu/rcuscale.c | 18 +++++++++---------
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
>diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c
>index 1097ec15879c..522f7bc2e693 100644
>--- a/kernel/rcu/rcuscale.c
>+++ b/kernel/rcu/rcuscale.c
>@@ -159,7 +159,7 @@ struct rcu_scale_ops {
> 	const char *name;
> };
> 
>-static struct rcu_scale_ops *cur_ops;
>+static const struct rcu_scale_ops *cur_ops;
> 
> /*
>  * Definitions for rcu scalability testing.
>@@ -185,7 +185,7 @@ static void rcu_sync_scale_init(void)
> {
> }
> 
>-static struct rcu_scale_ops rcu_ops = {
>+static const struct rcu_scale_ops rcu_ops = {
> 	.ptype		= RCU_FLAVOR,
> 	.init		= rcu_sync_scale_init,
> 	.readlock	= rcu_scale_read_lock,
>@@ -247,7 +247,7 @@ static void srcu_scale_synchronize_expedited(void)
> 	synchronize_srcu_expedited(srcu_ctlp);
> }
> 
>-static struct rcu_scale_ops srcu_ops = {
>+static const struct rcu_scale_ops srcu_ops = {
> 	.ptype		= SRCU_FLAVOR,
> 	.init		= rcu_sync_scale_init,
> 	.readlock	= srcu_scale_read_lock,
>@@ -276,7 +276,7 @@ static void srcu_sync_scale_cleanup(void)
> 	cleanup_srcu_struct(srcu_ctlp);
> }
> 
>-static struct rcu_scale_ops srcud_ops = {
>+static const struct rcu_scale_ops srcud_ops = {
> 	.ptype		= SRCU_FLAVOR,
> 	.init		= srcu_sync_scale_init,
> 	.cleanup	= srcu_sync_scale_cleanup,
>@@ -313,7 +313,7 @@ static void rcu_tasks_scale_stats(void)
> 	rcu_tasks_torture_stats_print(scale_type, SCALE_FLAG);
> }
> 
>-static struct rcu_scale_ops tasks_ops = {
>+static const struct rcu_scale_ops tasks_ops = {
> 	.ptype		= RCU_TASKS_FLAVOR,
> 	.init		= rcu_sync_scale_init,
> 	.readlock	= tasks_scale_read_lock,
>@@ -357,7 +357,7 @@ static void rcu_tasks_rude_scale_stats(void)
> 	rcu_tasks_rude_torture_stats_print(scale_type, SCALE_FLAG);
> }
> 
>-static struct rcu_scale_ops tasks_rude_ops = {
>+static const struct rcu_scale_ops tasks_rude_ops = {
> 	.ptype		= RCU_TASKS_RUDE_FLAVOR,
> 	.init		= rcu_sync_scale_init,
> 	.readlock	= tasks_rude_scale_read_lock,
>@@ -396,7 +396,7 @@ static void tasks_trace_scale_read_unlock(int idx)
> 	rcu_read_unlock_trace();
> }
> 
>-static struct rcu_scale_ops tasks_tracing_ops = {
>+static const struct rcu_scale_ops tasks_tracing_ops = {
> 	.ptype		= RCU_TASKS_FLAVOR,
> 	.init		= rcu_sync_scale_init,
> 	.readlock	= tasks_trace_scale_read_lock,
>@@ -693,7 +693,7 @@ rcu_scale_writer(void *arg)
> }
> 
> static void
>-rcu_scale_print_module_parms(struct rcu_scale_ops *cur_ops, const char *tag)
>+rcu_scale_print_module_parms(const struct rcu_scale_ops *cur_ops, const char *tag)
> {
> 	pr_alert("%s" SCALE_FLAG
> 		 "--- %s: gp_async=%d gp_async_max=%d gp_exp=%d holdoff=%d minruntime=%d nreaders=%d nwriters=%d nexp=%d exp_interval=%d writer_holdoff=%d writer_holdoff_jiffies=%d verbose=%d shutdown_secs=%d\n",
>@@ -1109,7 +1109,7 @@ rcu_scale_init(void)
> 	int firsterr = 0;
> 	long i;
> 	long j;
>-	static struct rcu_scale_ops *scale_ops[] = {
>+	static const struct rcu_scale_ops *scale_ops[] = {
> 		&rcu_ops, &srcu_ops, &srcud_ops, TASKS_OPS TASKS_RUDE_OPS TASKS_TRACING_OPS
> 	};
> 
>

--- Thanks!

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-11-07 23:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-07 21:02 [PATCH] rcuscale: Constify struct rcu_scale_ops Christophe JAILLET
2026-11-07 23:25 ` Bradley Morgan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®