From 99c8ff2ae97fbbcfe0d3b977bfa7e4d3d8702712 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 23 Nov 2020 12:33:10 +0100 Subject: [PATCH] 5.4-stable patches added patches: sched-fair-fix-overutilized-update-in-enqueue_task_fair.patch --- ...utilized-update-in-enqueue_task_fair.patch | 48 +++++++++++++++++++ queue-5.4/series | 1 + 2 files changed, 49 insertions(+) create mode 100644 queue-5.4/sched-fair-fix-overutilized-update-in-enqueue_task_fair.patch diff --git a/queue-5.4/sched-fair-fix-overutilized-update-in-enqueue_task_fair.patch b/queue-5.4/sched-fair-fix-overutilized-update-in-enqueue_task_fair.patch new file mode 100644 index 00000000000..06339f2ddba --- /dev/null +++ b/queue-5.4/sched-fair-fix-overutilized-update-in-enqueue_task_fair.patch @@ -0,0 +1,48 @@ +From 8e1ac4299a6e8726de42310d9c1379f188140c71 Mon Sep 17 00:00:00 2001 +From: Quentin Perret +Date: Thu, 12 Nov 2020 11:12:01 +0000 +Subject: sched/fair: Fix overutilized update in enqueue_task_fair() + +From: Quentin Perret + +commit 8e1ac4299a6e8726de42310d9c1379f188140c71 upstream. + +enqueue_task_fair() attempts to skip the overutilized update for new +tasks as their util_avg is not accurate yet. However, the flag we check +to do so is overwritten earlier on in the function, which makes the +condition pretty much a nop. + +Fix this by saving the flag early on. + +Fixes: 2802bf3cd936 ("sched/fair: Add over-utilization/tipping point indicator") +Reported-by: Rick Yiu +Signed-off-by: Quentin Perret +Signed-off-by: Peter Zijlstra (Intel) +Reviewed-by: Vincent Guittot +Reviewed-by: Valentin Schneider +Link: https://lkml.kernel.org/r/20201112111201.2081902-1-qperret@google.com +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/sched/fair.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/kernel/sched/fair.c ++++ b/kernel/sched/fair.c +@@ -5228,6 +5228,7 @@ enqueue_task_fair(struct rq *rq, struct + struct cfs_rq *cfs_rq; + struct sched_entity *se = &p->se; + int idle_h_nr_running = task_has_idle_policy(p); ++ int task_new = !(flags & ENQUEUE_WAKEUP); + + /* + * The code below (indirectly) updates schedutil which looks at +@@ -5299,7 +5300,7 @@ enqueue_throttle: + * into account, but that is not straightforward to implement, + * and the following generally works well enough in practice. + */ +- if (flags & ENQUEUE_WAKEUP) ++ if (!task_new) + update_overutilized_status(rq); + + } diff --git a/queue-5.4/series b/queue-5.4/series index 17f4db08e49..27c4951a67f 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -155,3 +155,4 @@ x86-microcode-intel-check-patch-signature-before-saving-microcode-for-early-load mm-memcg-slab-fix-root-memcg-vmstats.patch mm-userfaultfd-do-not-access-vma-vm_mm-after-calling-handle_userfault.patch mm-page_alloc-skip-waternark_boost-for-atomic-order-0-allocations.patch +sched-fair-fix-overutilized-update-in-enqueue_task_fair.patch -- 2.47.3