Patch "sched,psi: Handle potential task count underflow bugs more gracefully" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    sched,psi: Handle potential task count underflow bugs more gracefully

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     sched-psi-handle-potential-task-count-underflow-bugs.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 97c09fdaac130a2f4c25dc961884b1462cd90f3b
Author: Charan Teja Reddy <charante@xxxxxxxxxxxxxx>
Date:   Fri Apr 16 20:32:16 2021 +0530

    sched,psi: Handle potential task count underflow bugs more gracefully
    
    [ Upstream commit 9d10a13d1e4c349b76f1c675a874a7f981d6d3b4 ]
    
    psi_group_cpu->tasks, represented by the unsigned int, stores the
    number of tasks that could be stalled on a psi resource(io/mem/cpu).
    Decrementing these counters at zero leads to wrapping which further
    leads to the psi_group_cpu->state_mask is being set with the
    respective pressure state. This could result into the unnecessary time
    sampling for the pressure state thus cause the spurious psi events.
    This can further lead to wrong actions being taken at the user land
    based on these psi events.
    
    Though psi_bug is set under these conditions but that just for debug
    purpose. Fix it by decrementing the ->tasks count only when it is
    non-zero.
    
    Signed-off-by: Charan Teja Reddy <charante@xxxxxxxxxxxxxx>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
    Acked-by: Johannes Weiner <hannes@xxxxxxxxxxx>
    Link: https://lkml.kernel.org/r/1618585336-37219-1-git-send-email-charante@xxxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c
index 967732c0766c..651218ded981 100644
--- a/kernel/sched/psi.c
+++ b/kernel/sched/psi.c
@@ -711,14 +711,15 @@ static void psi_group_change(struct psi_group *group, int cpu,
 	for (t = 0, m = clear; m; m &= ~(1 << t), t++) {
 		if (!(m & (1 << t)))
 			continue;
-		if (groupc->tasks[t] == 0 && !psi_bug) {
+		if (groupc->tasks[t]) {
+			groupc->tasks[t]--;
+		} else if (!psi_bug) {
 			printk_deferred(KERN_ERR "psi: task underflow! cpu=%d t=%d tasks=[%u %u %u %u] clear=%x set=%x\n",
 					cpu, t, groupc->tasks[0],
 					groupc->tasks[1], groupc->tasks[2],
 					groupc->tasks[3], clear, set);
 			psi_bug = 1;
 		}
-		groupc->tasks[t]--;
 	}
 
 	for (t = 0; set; set &= ~(1 << t), t++)



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux