public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] sched/rt: Move sched_rt_entity::back to CONFIG_RT_GROUP_SCHED
@ 2024-06-03 12:50 Yajun Deng
  2024-06-03 12:50 ` [PATCH 1/2] sched/rt: Use 'back' only if CONFIG_RT_GROUP_SCHED is enabled Yajun Deng
  2024-06-03 12:50 ` [PATCH 2/2] sched/headers: Move sched_rt_entity::back to under the CONFIG_RT_GROUP_SCHED block Yajun Deng
  0 siblings, 2 replies; 5+ messages in thread
From: Yajun Deng @ 2024-06-03 12:50 UTC (permalink / raw)
  To: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, bristot, vschneid
  Cc: linux-kernel, Yajun Deng

The member back in struct sched_rt_entity only related to RT_GROUP_SCHED,
it should not place out of RT_GROUP_SCHED, move back to RT_GROUP_SCHED.
It will save a few bytes.

Yajun Deng (2):
  sched/rt: Use 'back' only if CONFIG_RT_GROUP_SCHED is enabled
  sched/headers: Move sched_rt_entity::back to under the
    CONFIG_RT_GROUP_SCHED block

 include/linux/sched.h |  2 +-
 kernel/sched/rt.c     | 15 ++++++++++-----
 2 files changed, 11 insertions(+), 6 deletions(-)

-- 
2.25.1


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

* [PATCH 1/2] sched/rt: Use 'back' only if CONFIG_RT_GROUP_SCHED is enabled
  2024-06-03 12:50 [PATCH 0/2] sched/rt: Move sched_rt_entity::back to CONFIG_RT_GROUP_SCHED Yajun Deng
@ 2024-06-03 12:50 ` Yajun Deng
  2024-06-04 13:22   ` Steven Rostedt
  2024-06-03 12:50 ` [PATCH 2/2] sched/headers: Move sched_rt_entity::back to under the CONFIG_RT_GROUP_SCHED block Yajun Deng
  1 sibling, 1 reply; 5+ messages in thread
From: Yajun Deng @ 2024-06-03 12:50 UTC (permalink / raw)
  To: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, bristot, vschneid
  Cc: linux-kernel, Yajun Deng

The 'back' member in struct sched_rt_entity only related to
CONFIG_RT_GROUP_SCHED, so there is no need to init it in dequeue_rt_stack.

Init the 'back' member in init_tg_rt_entry and use it only if
CONFIG_RT_GROUP_SCHED is enabled.

Signed-off-by: Yajun Deng <yajun.deng@linux.dev>
---
 kernel/sched/rt.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 63e49c8ffc4d..44bb9087cfe5 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -232,8 +232,10 @@ void init_tg_rt_entry(struct task_group *tg, struct rt_rq *rt_rq,
 
 	if (!parent)
 		rt_se->rt_rq = &rq->rt;
-	else
+	else {
 		rt_se->rt_rq = parent->my_q;
+		parent->back = rt_se;
+	}
 
 	rt_se->my_q = rt_rq;
 	rt_se->parent = parent;
@@ -1428,16 +1430,19 @@ static void dequeue_rt_stack(struct sched_rt_entity *rt_se, unsigned int flags)
 	struct sched_rt_entity *back = NULL;
 	unsigned int rt_nr_running;
 
-	for_each_sched_rt_entity(rt_se) {
-		rt_se->back = back;
+	for_each_sched_rt_entity(rt_se)
 		back = rt_se;
-	}
 
 	rt_nr_running = rt_rq_of_se(back)->rt_nr_running;
 
-	for (rt_se = back; rt_se; rt_se = rt_se->back) {
+	for (rt_se = back; rt_se; ) {
 		if (on_rt_rq(rt_se))
 			__dequeue_rt_entity(rt_se, flags);
+#ifdef CONFIG_RT_GROUP_SCHED
+		rt_se = rt_se->back;
+#else
+		rt_se = NULL;
+#endif
 	}
 
 	dequeue_top_rt_rq(rt_rq_of_se(back), rt_nr_running);
-- 
2.25.1


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

* [PATCH 2/2] sched/headers: Move sched_rt_entity::back to under the CONFIG_RT_GROUP_SCHED block
  2024-06-03 12:50 [PATCH 0/2] sched/rt: Move sched_rt_entity::back to CONFIG_RT_GROUP_SCHED Yajun Deng
  2024-06-03 12:50 ` [PATCH 1/2] sched/rt: Use 'back' only if CONFIG_RT_GROUP_SCHED is enabled Yajun Deng
@ 2024-06-03 12:50 ` Yajun Deng
  1 sibling, 0 replies; 5+ messages in thread
From: Yajun Deng @ 2024-06-03 12:50 UTC (permalink / raw)
  To: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, bristot, vschneid
  Cc: linux-kernel, Yajun Deng

We already remove the call to the 'back' member when CONFIG_RT_GROUP_SCHED
is disabled.

It's safe to move sched_rt_entity::back to under the
CONFIG_RT_GROUP_SCHED block, it would save a few bytes.

Signed-off-by: Yajun Deng <yajun.deng@linux.dev>
---
 include/linux/sched.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index 61591ac6eab6..3af89a67fb61 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -582,8 +582,8 @@ struct sched_rt_entity {
 	unsigned short			on_rq;
 	unsigned short			on_list;
 
-	struct sched_rt_entity		*back;
 #ifdef CONFIG_RT_GROUP_SCHED
+	struct sched_rt_entity		*back;
 	struct sched_rt_entity		*parent;
 	/* rq on which this entity is (to be) queued: */
 	struct rt_rq			*rt_rq;
-- 
2.25.1


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

* Re: [PATCH 1/2] sched/rt: Use 'back' only if CONFIG_RT_GROUP_SCHED is enabled
  2024-06-03 12:50 ` [PATCH 1/2] sched/rt: Use 'back' only if CONFIG_RT_GROUP_SCHED is enabled Yajun Deng
@ 2024-06-04 13:22   ` Steven Rostedt
  2024-06-05  1:51     ` Yajun Deng
  0 siblings, 1 reply; 5+ messages in thread
From: Steven Rostedt @ 2024-06-04 13:22 UTC (permalink / raw)
  To: Yajun Deng
  Cc: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	bsegall, mgorman, bristot, vschneid, linux-kernel

On Mon,  3 Jun 2024 20:50:01 +0800
Yajun Deng <yajun.deng@linux.dev> wrote:

> The 'back' member in struct sched_rt_entity only related to
> CONFIG_RT_GROUP_SCHED, so there is no need to init it in dequeue_rt_stack.
> 
> Init the 'back' member in init_tg_rt_entry and use it only if
> CONFIG_RT_GROUP_SCHED is enabled.
> 
> Signed-off-by: Yajun Deng <yajun.deng@linux.dev>
> ---
>  kernel/sched/rt.c | 15 ++++++++++-----
>  1 file changed, 10 insertions(+), 5 deletions(-)
> 
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index 63e49c8ffc4d..44bb9087cfe5 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -232,8 +232,10 @@ void init_tg_rt_entry(struct task_group *tg, struct rt_rq *rt_rq,
>  
>  	if (!parent)
>  		rt_se->rt_rq = &rq->rt;
> -	else
> +	else {
>  		rt_se->rt_rq = parent->my_q;
> +		parent->back = rt_se;
> +	}

If one block of an if/else requires brackets, then both do.


>  
>  	rt_se->my_q = rt_rq;
>  	rt_se->parent = parent;
> @@ -1428,16 +1430,19 @@ static void dequeue_rt_stack(struct sched_rt_entity *rt_se, unsigned int flags)
>  	struct sched_rt_entity *back = NULL;
>  	unsigned int rt_nr_running;
>  
> -	for_each_sched_rt_entity(rt_se) {
> -		rt_se->back = back;
> +	for_each_sched_rt_entity(rt_se)
>  		back = rt_se;
> -	}
>  
>  	rt_nr_running = rt_rq_of_se(back)->rt_nr_running;
>  
> -	for (rt_se = back; rt_se; rt_se = rt_se->back) {
> +	for (rt_se = back; rt_se; ) {
>  		if (on_rt_rq(rt_se))
>  			__dequeue_rt_entity(rt_se, flags);
> +#ifdef CONFIG_RT_GROUP_SCHED
> +		rt_se = rt_se->back;
> +#else
> +		rt_se = NULL;
> +#endif

Perhaps make a helper function to get rid of the #ifdef in the code here.

	for (rt_se = back, rt_se; rt_se = rt_se_back(rt_se)) {

Where rt_se_back() above can be defined in the #ifdef blocks for
CONFIG_RT_GROUP_SCHED as either:

static struct sched_rt_entity *rt_se_back(struct sched_rt_entity *se)
{
	return se->back;
}

Or

static inline struct sched_rt_entity *rt_se_back(struct sched_rt_entity *se)
{
	return NULL;
}

-- Steve


>  	}
>  
>  	dequeue_top_rt_rq(rt_rq_of_se(back), rt_nr_running);


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

* Re: [PATCH 1/2] sched/rt: Use 'back' only if CONFIG_RT_GROUP_SCHED is enabled
  2024-06-04 13:22   ` Steven Rostedt
@ 2024-06-05  1:51     ` Yajun Deng
  0 siblings, 0 replies; 5+ messages in thread
From: Yajun Deng @ 2024-06-05  1:51 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	bsegall, mgorman, bristot, vschneid, linux-kernel

June 4, 2024 at 9:22 PM, "Steven Rostedt" <rostedt@goodmis.org> wrote:



> 
> On Mon, 3 Jun 2024 20:50:01 +0800
> 
> Yajun Deng <yajun.deng@linux.dev> wrote:
> 
> > 
> > The 'back' member in struct sched_rt_entity only related to
> > 
> >  CONFIG_RT_GROUP_SCHED, so there is no need to init it in dequeue_rt_stack.
> > 
> >  
> > 
> >  Init the 'back' member in init_tg_rt_entry and use it only if
> > 
> >  CONFIG_RT_GROUP_SCHED is enabled.
> > 
> >  
> > 
> >  Signed-off-by: Yajun Deng <yajun.deng@linux.dev>
> > 
> >  ---
> > 
> >  kernel/sched/rt.c | 15 ++++++++++-----
> > 
> >  1 file changed, 10 insertions(+), 5 deletions(-)
> > 
> >  
> > 
> >  diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> > 
> >  index 63e49c8ffc4d..44bb9087cfe5 100644
> > 
> >  --- a/kernel/sched/rt.c
> > 
> >  +++ b/kernel/sched/rt.c
> > 
> >  @@ -232,8 +232,10 @@ void init_tg_rt_entry(struct task_group *tg, struct rt_rq *rt_rq,
> > 
> >  
> > 
> >  if (!parent)
> > 
> >  rt_se->rt_rq = &rq->rt;
> > 
> >  - else
> > 
> >  + else {
> > 
> >  rt_se->rt_rq = parent->my_q;
> > 
> >  + parent->back = rt_se;
> > 
> >  + }
> > 
> 
> If one block of an if/else requires brackets, then both do.
> 

Got it.
> > 
> > rt_se->my_q = rt_rq;
> > 
> >  rt_se->parent = parent;
> > 
> >  @@ -1428,16 +1430,19 @@ static void dequeue_rt_stack(struct sched_rt_entity *rt_se, unsigned int flags)
> > 
> >  struct sched_rt_entity *back = NULL;
> > 
> >  unsigned int rt_nr_running;
> > 
> >  
> > 
> >  - for_each_sched_rt_entity(rt_se) {
> > 
> >  - rt_se->back = back;
> > 
> >  + for_each_sched_rt_entity(rt_se)
> > 
> >  back = rt_se;
> > 
> >  - }
> > 
> >  
> > 
> >  rt_nr_running = rt_rq_of_se(back)->rt_nr_running;
> > 
> >  
> > 
> >  - for (rt_se = back; rt_se; rt_se = rt_se->back) {
> > 
> >  + for (rt_se = back; rt_se; ) {
> > 
> >  if (on_rt_rq(rt_se))
> > 
> >  __dequeue_rt_entity(rt_se, flags);
> > 
> >  +#ifdef CONFIG_RT_GROUP_SCHED
> > 
> >  + rt_se = rt_se->back;
> > 
> >  +#else
> > 
> >  + rt_se = NULL;
> > 
> >  +#endif
> > 
> 
> Perhaps make a helper function to get rid of the #ifdef in the code here.
> 
>  for (rt_se = back, rt_se; rt_se = rt_se_back(rt_se)) {
> 
> Where rt_se_back() above can be defined in the #ifdef blocks for
> 
> CONFIG_RT_GROUP_SCHED as either:
> 
> static struct sched_rt_entity *rt_se_back(struct sched_rt_entity *se)
> 
> {
> 
>  return se->back;
> 
> }
> 
> Or
> 
> static inline struct sched_rt_entity *rt_se_back(struct sched_rt_entity *se)
> 
> {
> 
>  return NULL;
> 
> }
> 

Okay, thanks.

> -- Steve
> 
> > 
> > }
> > 
> >  
> > 
> >  dequeue_top_rt_rq(rt_rq_of_se(back), rt_nr_running);
> >
>

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

end of thread, other threads:[~2024-06-05  1:51 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-03 12:50 [PATCH 0/2] sched/rt: Move sched_rt_entity::back to CONFIG_RT_GROUP_SCHED Yajun Deng
2024-06-03 12:50 ` [PATCH 1/2] sched/rt: Use 'back' only if CONFIG_RT_GROUP_SCHED is enabled Yajun Deng
2024-06-04 13:22   ` Steven Rostedt
2024-06-05  1:51     ` Yajun Deng
2024-06-03 12:50 ` [PATCH 2/2] sched/headers: Move sched_rt_entity::back to under the CONFIG_RT_GROUP_SCHED block Yajun Deng

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