psi: Move PF_MEMSTALL out of task->flags
The task->flags is a 32-bits flag, in which 31 bits have already been consumed. So it is hardly to introduce other new per process flag. Currently there're still enough spaces in the bit-field section of task_struct, so we can define the memstall state as a single bit in task_struct instead. This patch also removes an out-of-date comment pointed by Matthew. Suggested-by: Johannes Weiner <hannes@cmpxchg.org> Signed-off-by: Yafang Shao <laoar.shao@gmail.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Link: https://lkml.kernel.org/r/1584408485-1921-1-git-send-email-laoar.shao@gmail.com
This commit is contained in:

committed by
Peter Zijlstra

parent
a0fe6ba690
commit
1066d1b697
@@ -865,17 +865,17 @@ void psi_memstall_enter(unsigned long *flags)
|
||||
if (static_branch_likely(&psi_disabled))
|
||||
return;
|
||||
|
||||
*flags = current->flags & PF_MEMSTALL;
|
||||
*flags = current->in_memstall;
|
||||
if (*flags)
|
||||
return;
|
||||
/*
|
||||
* PF_MEMSTALL setting & accounting needs to be atomic wrt
|
||||
* in_memstall setting & accounting needs to be atomic wrt
|
||||
* changes to the task's scheduling state, otherwise we can
|
||||
* race with CPU migration.
|
||||
*/
|
||||
rq = this_rq_lock_irq(&rf);
|
||||
|
||||
current->flags |= PF_MEMSTALL;
|
||||
current->in_memstall = 1;
|
||||
psi_task_change(current, 0, TSK_MEMSTALL);
|
||||
|
||||
rq_unlock_irq(rq, &rf);
|
||||
@@ -898,13 +898,13 @@ void psi_memstall_leave(unsigned long *flags)
|
||||
if (*flags)
|
||||
return;
|
||||
/*
|
||||
* PF_MEMSTALL clearing & accounting needs to be atomic wrt
|
||||
* in_memstall clearing & accounting needs to be atomic wrt
|
||||
* changes to the task's scheduling state, otherwise we could
|
||||
* race with CPU migration.
|
||||
*/
|
||||
rq = this_rq_lock_irq(&rf);
|
||||
|
||||
current->flags &= ~PF_MEMSTALL;
|
||||
current->in_memstall = 0;
|
||||
psi_task_change(current, TSK_MEMSTALL, 0);
|
||||
|
||||
rq_unlock_irq(rq, &rf);
|
||||
@@ -970,7 +970,7 @@ void cgroup_move_task(struct task_struct *task, struct css_set *to)
|
||||
} else if (task->in_iowait)
|
||||
task_flags = TSK_IOWAIT;
|
||||
|
||||
if (task->flags & PF_MEMSTALL)
|
||||
if (task->in_memstall)
|
||||
task_flags |= TSK_MEMSTALL;
|
||||
|
||||
if (task_flags)
|
||||
|
Reference in New Issue
Block a user