Skip to contentSkip to conversation

FAILED: patch "[PATCH] sched/fair: Fix unthrottle_cfs_rq() for leaf_cfs_rq list" failed to apply to 5.4-stable tree

PATCH [email protected] 3 participants 10 messages May 25, 2020 – Dec 6, 2020

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 39f23ce07b9355d05a64ae303ce20d1c4b92b957 Mon Sep 17 00:00:00 2001
From: Vincent Guittot <[email protected]>
Date: Wed, 13 May 2020 15:55:28 +0200
Subject: [PATCH] sched/fair: Fix unthrottle_cfs_rq() for leaf_cfs_rq list

Although not exactly identical, unthrottle_cfs_rq() and enqueue_task_fair() are quite close and follow the same sequence for enqueuing an entity in the cfs hierarchy. Modify unthrottle_cfs_rq() to use the same pattern as enqueue_task_fair(). This fixes a problem already faced with the latter and add an optimization in the last for_each_sched_entity loop.

Fixes fe61468b2cb (sched/fair: Fix enqueue_task_fair warning)

Reported-by Tao Zhou <[email protected]>

kernel/sched/fair.c +30 -12
index c6d57c334d51..538ba5d94e99 100644
@@ -4774,7 +4774,6 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
 	struct rq *rq = rq_of(cfs_rq);
 	struct cfs_bandwidth *cfs_b = tg_cfs_bandwidth(cfs_rq->tg);
 	struct sched_entity *se;
-	int enqueue = 1;
 	long task_delta, idle_task_delta;
 
 	se = cfs_rq->tg->se[cpu_of(rq)];
@@ -4798,26 +4797,44 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
 	idle_task_delta = cfs_rq->idle_h_nr_running;
 	for_each_sched_entity(se) {
 		if (se->on_rq)
-			enqueue = 0;
+			break;
+		cfs_rq = cfs_rq_of(se);
+		enqueue_entity(cfs_rq, se, ENQUEUE_WAKEUP);
 
+		cfs_rq->h_nr_running += task_delta;
+		cfs_rq->idle_h_nr_running += idle_task_delta;
+
+		/* end evaluation on encountering a throttled cfs_rq */
+		if (cfs_rq_throttled(cfs_rq))
+			goto unthrottle_throttle;
+	}
+
+	for_each_sched_entity(se) {
 		cfs_rq = cfs_rq_of(se);
-		if (enqueue) {
-			enqueue_entity(cfs_rq, se, ENQUEUE_WAKEUP);
-		} else {
-			update_load_avg(cfs_rq, se, 0);
-			se_update_runnable(se);
-		}
+
+		update_load_avg(cfs_rq, se, UPDATE_TG);
+		se_update_runnable(se);
 
 		cfs_rq->h_nr_running += task_delta;
 		cfs_rq->idle_h_nr_running += idle_task_delta;
 
+
+		/* end evaluation on encountering a throttled cfs_rq */
 		if (cfs_rq_throttled(cfs_rq))
-			break;
+			goto unthrottle_throttle;
+
+		/*
+		 * One parent has been throttled and cfs_rq removed from the
+		 * list. Add it back to not break the leaf list.
+		 */
+		if (throttled_hierarchy(cfs_rq))
+			list_add_leaf_cfs_rq(cfs_rq);
 	}
 
-	if (!se)
-		add_nr_running(rq, task_delta);
+	/* At this point se is NULL and we are at root level*/
+	add_nr_running(rq, task_delta);
 
+unthrottle_throttle:
 	/*
 	 * The cfs_rq_throttled() breaks in the above iteration can result in
 	 * incomplete leaf list maintenance, resulting in triggering the
@@ -4826,7 +4843,8 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
 	for_each_sched_entity(se) {
 		cfs_rq = cfs_rq_of(se);
 
-		list_add_leaf_cfs_rq(cfs_rq);
+		if (list_add_leaf_cfs_rq(cfs_rq))
+			break;
 	}
 
 	assert_list_leaf_cfs_rq(rq);
maintainer Reviewed-by Phil Auld Reviewed-by Ben Segall
#1 lore raw
Quoted 5 lines · Le lundi 25 mai 2020 à 16:42:49 (+0200), [email protected] a écrit :

The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

This patch needs commit
b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more")
to be applied first. But then, it will not apply. The backport is :

[ Upstream commit 39f23ce07b9355d05a64ae303ce20d1c4b92b957 upstream ]

Although not exactly identical, unthrottle_cfs_rq() and enqueue_task_fair() are quite close and follow the same sequence for enqueuing an entity in the cfs hierarchy. Modify unthrottle_cfs_rq() to use the same pattern as enqueue_task_fair(). This fixes a problem already faced with the latter and add an optimization in the last for_each_sched_entity loop.

Fixes fe61468b2cb (sched/fair: Fix enqueue_task_fair warning)

Reported-by Tao Zhou <[email protected]>

---
 kernel/sched/fair.c | 36 ++++++++++++++++++++++++++++--------
 1 file changed, 28 insertions(+), 8 deletions(-)
kernel/sched/fair.c +28 -8
index 193b6ab74d7f..36e3bb990845 100644
@@ -4560,7 +4560,6 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
 	struct rq *rq = rq_of(cfs_rq);
 	struct cfs_bandwidth *cfs_b = tg_cfs_bandwidth(cfs_rq->tg);
 	struct sched_entity *se;
-	int enqueue = 1;
 	long task_delta, idle_task_delta;
 
 	se = cfs_rq->tg->se[cpu_of(rq)];
@@ -4584,21 +4583,41 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
 	idle_task_delta = cfs_rq->idle_h_nr_running;
 	for_each_sched_entity(se) {
 		if (se->on_rq)
-			enqueue = 0;
+			break;
+		cfs_rq = cfs_rq_of(se);
+		enqueue_entity(cfs_rq, se, ENQUEUE_WAKEUP);
+
+		cfs_rq->h_nr_running += task_delta;
+		cfs_rq->idle_h_nr_running += idle_task_delta;
 
+		/* end evaluation on encountering a throttled cfs_rq */
+		if (cfs_rq_throttled(cfs_rq))
+			goto unthrottle_throttle;
+	}
+
+	for_each_sched_entity(se) {
 		cfs_rq = cfs_rq_of(se);
-		if (enqueue)
-			enqueue_entity(cfs_rq, se, ENQUEUE_WAKEUP);
+
 		cfs_rq->h_nr_running += task_delta;
 		cfs_rq->idle_h_nr_running += idle_task_delta;
 
+
+		/* end evaluation on encountering a throttled cfs_rq */
 		if (cfs_rq_throttled(cfs_rq))
-			break;
+			goto unthrottle_throttle;
+
+		/*
+		 * One parent has been throttled and cfs_rq removed from the
+		 * list. Add it back to not break the leaf list.
+		 */
+		if (throttled_hierarchy(cfs_rq))
+			list_add_leaf_cfs_rq(cfs_rq);
 	}
 
-	if (!se)
-		add_nr_running(rq, task_delta);
+	/* At this point se is NULL and we are at root level*/
+	add_nr_running(rq, task_delta);
 
+unthrottle_throttle:
 	/*
 	 * The cfs_rq_throttled() breaks in the above iteration can result in
 	 * incomplete leaf list maintenance, resulting in triggering the
@@ -4607,7 +4626,8 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
 	for_each_sched_entity(se) {
 		cfs_rq = cfs_rq_of(se);
 
-		list_add_leaf_cfs_rq(cfs_rq);
+		if (list_add_leaf_cfs_rq(cfs_rq))
+			break;
 	}
 
 	assert_list_leaf_cfs_rq(rq);

--
2.17.1

maintainer
#2 lore raw
Quoted 19 lines · Vincent Guittot
Quoted 5 lines · Le lundi 25 mai 2020 à 16:42:49 (+0200), [email protected] a écrit :

The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

This patch needs commit
b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more")
to be applied first. But then, it will not apply. The backport is :

[ Upstream commit 39f23ce07b9355d05a64ae303ce20d1c4b92b957 upstream ]

Although not exactly identical, unthrottle_cfs_rq() and enqueue_task_fair() are quite close and follow the same sequence for enqueuing an entity in the cfs hierarchy. Modify unthrottle_cfs_rq() to use the same pattern as enqueue_task_fair(). This fixes a problem already faced with the latter and add an optimization in the last for_each_sched_entity loop.

Quoted 7 lines
Fixes fe61468b2cb (sched/fair: Fix enqueue_task_fair warning)

Reported-by Tao Zhou <[email protected]>

Peter, could you review/ack the backport please? It's very different from the upstream version.

Signature · 2 lines
Thanks,
Sasha
author maintainer
#3 lore raw
In reply to Vincent Guittot
Quoted 21 lines · Vincent Guittot
Quoted 5 lines · Le lundi 25 mai 2020 à 16:42:49 (+0200), [email protected] a écrit :

The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

This patch needs commit
b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more")
to be applied first. But then, it will not apply. The backport is :

[ Upstream commit 39f23ce07b9355d05a64ae303ce20d1c4b92b957 upstream ]

Although not exactly identical, unthrottle_cfs_rq() and enqueue_task_fair() are quite close and follow the same sequence for enqueuing an entity in the cfs hierarchy. Modify unthrottle_cfs_rq() to use the same pattern as enqueue_task_fair(). This fixes a problem already faced with the latter and add an optimization in the last for_each_sched_entity loop.

Fixes fe61468b2cb (sched/fair: Fix enqueue_task_fair warning)

Reported-by Tao Zhou <[email protected]>

Quoted 8 lines
---
 kernel/sched/fair.c | 36 ++++++++++++++++++++++++++++--------
 1 file changed, 28 insertions(+), 8 deletions(-)

This patch doesn't apply to the 5.4.y tree at all. Can someone please provide a working backport?

thanks,

greg k-h

maintainer
#4 lore raw
Quoted 32 lines · Greg KH
Quoted 21 lines · Vincent Guittot
Quoted 5 lines · Le lundi 25 mai 2020 à 16:42:49 (+0200), [email protected] a écrit :

The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

This patch needs commit
b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more")
to be applied first. But then, it will not apply. The backport is :

[ Upstream commit 39f23ce07b9355d05a64ae303ce20d1c4b92b957 upstream ]

Although not exactly identical, unthrottle_cfs_rq() and enqueue_task_fair() are quite close and follow the same sequence for enqueuing an entity in the cfs hierarchy. Modify unthrottle_cfs_rq() to use the same pattern as enqueue_task_fair(). This fixes a problem already faced with the latter and add an optimization in the last for_each_sched_entity loop.

Fixes fe61468b2cb (sched/fair: Fix enqueue_task_fair warning)

Reported-by Tao Zhou <[email protected]>

Quoted 8 lines
---
 kernel/sched/fair.c | 36 ++++++++++++++++++++++++++++--------
 1 file changed, 28 insertions(+), 8 deletions(-)
Quoted 2 lines

This patch doesn't apply to the 5.4.y tree at all. Can someone please provide a working backport?

It seems that commit b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more") has already been applied back in May. But then, I'm able to apply this patch on top of v5.4.y/v5.4.81

Thanks

Quoted 4 lines

thanks,

greg k-h

author maintainer
#5 lore raw
Quoted 33 lines · Vincent Guittot
Quoted 32 lines · Greg KH
Quoted 29 lines · Vincent Guittot
Quoted 5 lines · Le lundi 25 mai 2020 à 16:42:49 (+0200), [email protected] a écrit :

The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

This patch needs commit
b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more")
to be applied first. But then, it will not apply. The backport is :

[ Upstream commit 39f23ce07b9355d05a64ae303ce20d1c4b92b957 upstream ]

Although not exactly identical, unthrottle_cfs_rq() and enqueue_task_fair() are quite close and follow the same sequence for enqueuing an entity in the cfs hierarchy. Modify unthrottle_cfs_rq() to use the same pattern as enqueue_task_fair(). This fixes a problem already faced with the latter and add an optimization in the last for_each_sched_entity loop.

Fixes fe61468b2cb (sched/fair: Fix enqueue_task_fair warning)

Reported-by Tao Zhou <[email protected]>

---
 kernel/sched/fair.c | 36 ++++++++++++++++++++++++++++--------
 1 file changed, 28 insertions(+), 8 deletions(-)
Quoted 8 lines
Quoted 2 lines

This patch doesn't apply to the 5.4.y tree at all. Can someone please provide a working backport?

It seems that commit b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more") has already been applied back in May. But then, I'm able to apply this patch on top of v5.4.y/v5.4.81

What is "this patch" here? I tried to apply 39f23ce07b93 ("sched/fair:
Fix unthrottle_cfs_rq() for leaf_cfs_rq list") directly to the 5.4 tree and it too did not apply.

confused,

greg k-h

maintainer
#6 lore raw
Quoted 44 lines · Greg KH
Quoted 33 lines · Vincent Guittot
Quoted 32 lines · Greg KH
Quoted 29 lines · Vincent Guittot
Quoted 5 lines · Le lundi 25 mai 2020 à 16:42:49 (+0200), [email protected] a écrit :

The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

This patch needs commit
b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more")
to be applied first. But then, it will not apply. The backport is :

[ Upstream commit 39f23ce07b9355d05a64ae303ce20d1c4b92b957 upstream ]

Although not exactly identical, unthrottle_cfs_rq() and enqueue_task_fair() are quite close and follow the same sequence for enqueuing an entity in the cfs hierarchy. Modify unthrottle_cfs_rq() to use the same pattern as enqueue_task_fair(). This fixes a problem already faced with the latter and add an optimization in the last for_each_sched_entity loop.

Fixes fe61468b2cb (sched/fair: Fix enqueue_task_fair warning)

Reported-by Tao Zhou <[email protected]>

---
 kernel/sched/fair.c | 36 ++++++++++++++++++++++++++++--------
 1 file changed, 28 insertions(+), 8 deletions(-)
Quoted 8 lines
Quoted 2 lines

This patch doesn't apply to the 5.4.y tree at all. Can someone please provide a working backport?

It seems that commit b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more") has already been applied back in May. But then, I'm able to apply this patch on top of v5.4.y/v5.4.81

Quoted 3 lines

What is "this patch" here? I tried to apply 39f23ce07b93 ("sched/fair:
Fix unthrottle_cfs_rq() for leaf_cfs_rq list") directly to the 5.4 tree and it too did not apply.

commit 39f23ce07b93 ("sched/fair: Fix unthrottle_cfs_rq() for leaf_cfs_rq list") can't apply because there are several changes which are not fixes which have been applied since v5.4 on the same code.

This patch is the backport on v5.4 of the commit 39f23ce07b93

Quoted 4 lines

confused,

greg k-h

author maintainer
#7 lore raw
Quoted 49 lines · Vincent Guittot
Quoted 44 lines · Greg KH
Quoted 33 lines · Vincent Guittot
Quoted 32 lines · Greg KH
Quoted 29 lines · Vincent Guittot
Quoted 5 lines · Le lundi 25 mai 2020 à 16:42:49 (+0200), [email protected] a écrit :

The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

This patch needs commit
b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more")
to be applied first. But then, it will not apply. The backport is :

[ Upstream commit 39f23ce07b9355d05a64ae303ce20d1c4b92b957 upstream ]

Although not exactly identical, unthrottle_cfs_rq() and enqueue_task_fair() are quite close and follow the same sequence for enqueuing an entity in the cfs hierarchy. Modify unthrottle_cfs_rq() to use the same pattern as enqueue_task_fair(). This fixes a problem already faced with the latter and add an optimization in the last for_each_sched_entity loop.

Fixes fe61468b2cb (sched/fair: Fix enqueue_task_fair warning)

Reported-by Tao Zhou <[email protected]>

---
 kernel/sched/fair.c | 36 ++++++++++++++++++++++++++++--------
 1 file changed, 28 insertions(+), 8 deletions(-)
Quoted 8 lines
Quoted 2 lines

This patch doesn't apply to the 5.4.y tree at all. Can someone please provide a working backport?

It seems that commit b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more") has already been applied back in May. But then, I'm able to apply this patch on top of v5.4.y/v5.4.81

Quoted 3 lines

What is "this patch" here? I tried to apply 39f23ce07b93 ("sched/fair:
Fix unthrottle_cfs_rq() for leaf_cfs_rq list") directly to the 5.4 tree and it too did not apply.

Quoted 5 lines

commit 39f23ce07b93 ("sched/fair: Fix unthrottle_cfs_rq() for leaf_cfs_rq list") can't apply because there are several changes which are not fixes which have been applied since v5.4 on the same code.

This patch is the backport on v5.4 of the commit 39f23ce07b93

What is "this"? I tried to apply the above patch to the 5.4.y tree, and it didn't apply. So I still do not understand what I can do here...

greg k-h

maintainer
#8 lore raw
Quoted 51 lines · Greg KH
Quoted 49 lines · Vincent Guittot
Quoted 47 lines · Greg KH
Quoted 33 lines · Vincent Guittot
Quoted 32 lines · Greg KH
Quoted 29 lines · Vincent Guittot
Quoted 5 lines · Le lundi 25 mai 2020 à 16:42:49 (+0200), [email protected] a écrit :

The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

This patch needs commit
b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more")
to be applied first. But then, it will not apply. The backport is :

[ Upstream commit 39f23ce07b9355d05a64ae303ce20d1c4b92b957 upstream ]

Although not exactly identical, unthrottle_cfs_rq() and enqueue_task_fair() are quite close and follow the same sequence for enqueuing an entity in the cfs hierarchy. Modify unthrottle_cfs_rq() to use the same pattern as enqueue_task_fair(). This fixes a problem already faced with the latter and add an optimization in the last for_each_sched_entity loop.

Fixes fe61468b2cb (sched/fair: Fix enqueue_task_fair warning)

Reported-by Tao Zhou <[email protected]>

---
 kernel/sched/fair.c | 36 ++++++++++++++++++++++++++++--------
 1 file changed, 28 insertions(+), 8 deletions(-)
Quoted 8 lines
Quoted 2 lines

This patch doesn't apply to the 5.4.y tree at all. Can someone please provide a working backport?

It seems that commit b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more") has already been applied back in May. But then, I'm able to apply this patch on top of v5.4.y/v5.4.81

What is "this patch" here? I tried to apply 39f23ce07b93 ("sched/fair:
Fix unthrottle_cfs_rq() for leaf_cfs_rq list") directly to the 5.4 tree and it too did not apply.

Quoted 7 lines
Quoted 5 lines

commit 39f23ce07b93 ("sched/fair: Fix unthrottle_cfs_rq() for leaf_cfs_rq list") can't apply because there are several changes which are not fixes which have been applied since v5.4 on the same code.

This patch is the backport on v5.4 of the commit 39f23ce07b93

What is "this"? I tried to apply the above patch to the 5.4.y tree, and

I was referring to the email <20200525172709.GB7427@vingu-book>

Quoted 1 line

it didn't apply. So I still do not understand what I can do here...

Let me resend it with a clean subject title

Quoted 2 lines

greg k-h

maintainer
#9 lore raw
In reply to Greg KH
Quoted 50 lines · Greg KH
Quoted 49 lines · Vincent Guittot
Quoted 47 lines · Greg KH
Quoted 33 lines · Vincent Guittot
Quoted 32 lines · Greg KH
Quoted 29 lines · Vincent Guittot
Quoted 5 lines · Le lundi 25 mai 2020 à 16:42:49 (+0200), [email protected] a écrit :

The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

This patch needs commit
b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more")
to be applied first. But then, it will not apply. The backport is :

[ Upstream commit 39f23ce07b9355d05a64ae303ce20d1c4b92b957 upstream ]

Although not exactly identical, unthrottle_cfs_rq() and enqueue_task_fair() are quite close and follow the same sequence for enqueuing an entity in the cfs hierarchy. Modify unthrottle_cfs_rq() to use the same pattern as enqueue_task_fair(). This fixes a problem already faced with the latter and add an optimization in the last for_each_sched_entity loop.

Fixes fe61468b2cb (sched/fair: Fix enqueue_task_fair warning)

Reported-by Tao Zhou <[email protected]>

---
 kernel/sched/fair.c | 36 ++++++++++++++++++++++++++++--------
 1 file changed, 28 insertions(+), 8 deletions(-)
Quoted 8 lines
Quoted 2 lines

This patch doesn't apply to the 5.4.y tree at all. Can someone please provide a working backport?

It seems that commit b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more") has already been applied back in May. But then, I'm able to apply this patch on top of v5.4.y/v5.4.81

What is "this patch" here? I tried to apply 39f23ce07b93 ("sched/fair:
Fix unthrottle_cfs_rq() for leaf_cfs_rq list") directly to the 5.4 tree and it too did not apply.

Quoted 8 lines
Quoted 5 lines

commit 39f23ce07b93 ("sched/fair: Fix unthrottle_cfs_rq() for leaf_cfs_rq list") can't apply because there are several changes which are not fixes which have been applied since v5.4 on the same code.

This patch is the backport on v5.4 of the commit 39f23ce07b93

What is "this"? I tried to apply the above patch to the 5.4.y tree, and it didn't apply. So I still do not understand what I can do here...

It's already in our 5.4 tree I've added it there a few days ago :)

Signature · 2 lines
Thanks,
Sasha