mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull scheduler updates from Ingo Molnar: - membarrier updates (Mathieu Desnoyers) - SMP balancing optimizations (Mel Gorman) - stats update optimizations (Peter Zijlstra) - RT scheduler race fixes (Steven Rostedt) - misc fixes and updates * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: sched/fair: Use a recently used CPU as an idle candidate and the basis for SIS sched/fair: Do not migrate if the prev_cpu is idle sched/fair: Restructure wake_affine*() to return a CPU id sched/fair: Remove unnecessary parameters from wake_affine_idle() sched/rt: Make update_curr_rt() more accurate sched/rt: Up the root domain ref count when passing it around via IPIs sched/rt: Use container_of() to get root domain in rto_push_irq_work_func() sched/core: Optimize update_stats_*() sched/core: Optimize ttwu_stat() membarrier/selftest: Test private expedited sync core command membarrier/arm64: Provide core serializing command membarrier/x86: Provide core serializing command membarrier: Provide core serializing command, *_SYNC_CORE lockin/x86: Implement sync_core_before_usermode() locking: Introduce sync_core_before_usermode() membarrier/selftest: Test global expedited command membarrier: Provide GLOBAL_EXPEDITED command membarrier: Document scheduler barrier requirements powerpc, membarrier: Skip memory barrier in switch_mm() membarrier/selftest: Test private expedited command
This commit is contained in:
commit
ab2d92ad88
25 changed files with 750 additions and 127 deletions
|
|
@ -555,6 +555,14 @@ struct task_struct {
|
|||
unsigned long wakee_flip_decay_ts;
|
||||
struct task_struct *last_wakee;
|
||||
|
||||
/*
|
||||
* recent_used_cpu is initially set as the last CPU used by a task
|
||||
* that wakes affine another task. Waker/wakee relationships can
|
||||
* push tasks around a CPU where each wakeup moves to the next one.
|
||||
* Tracking a recently used CPU allows a quick search for a recently
|
||||
* used CPU that may be idle.
|
||||
*/
|
||||
int recent_used_cpu;
|
||||
int wake_cpu;
|
||||
#endif
|
||||
int on_rq;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
#include <linux/sched.h>
|
||||
#include <linux/mm_types.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/sync_core.h>
|
||||
|
||||
/*
|
||||
* Routines for handling mm_structs
|
||||
|
|
@ -194,18 +195,48 @@ static inline void memalloc_noreclaim_restore(unsigned int flags)
|
|||
|
||||
#ifdef CONFIG_MEMBARRIER
|
||||
enum {
|
||||
MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = (1U << 0),
|
||||
MEMBARRIER_STATE_SWITCH_MM = (1U << 1),
|
||||
MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = (1U << 0),
|
||||
MEMBARRIER_STATE_PRIVATE_EXPEDITED = (1U << 1),
|
||||
MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = (1U << 2),
|
||||
MEMBARRIER_STATE_GLOBAL_EXPEDITED = (1U << 3),
|
||||
MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = (1U << 4),
|
||||
MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = (1U << 5),
|
||||
};
|
||||
|
||||
enum {
|
||||
MEMBARRIER_FLAG_SYNC_CORE = (1U << 0),
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_MEMBARRIER_CALLBACKS
|
||||
#include <asm/membarrier.h>
|
||||
#endif
|
||||
|
||||
static inline void membarrier_mm_sync_core_before_usermode(struct mm_struct *mm)
|
||||
{
|
||||
if (likely(!(atomic_read(&mm->membarrier_state) &
|
||||
MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE)))
|
||||
return;
|
||||
sync_core_before_usermode();
|
||||
}
|
||||
|
||||
static inline void membarrier_execve(struct task_struct *t)
|
||||
{
|
||||
atomic_set(&t->mm->membarrier_state, 0);
|
||||
}
|
||||
#else
|
||||
#ifdef CONFIG_ARCH_HAS_MEMBARRIER_CALLBACKS
|
||||
static inline void membarrier_arch_switch_mm(struct mm_struct *prev,
|
||||
struct mm_struct *next,
|
||||
struct task_struct *tsk)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
static inline void membarrier_execve(struct task_struct *t)
|
||||
{
|
||||
}
|
||||
static inline void membarrier_mm_sync_core_before_usermode(struct mm_struct *mm)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_SCHED_MM_H */
|
||||
|
|
|
|||
21
include/linux/sync_core.h
Normal file
21
include/linux/sync_core.h
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _LINUX_SYNC_CORE_H
|
||||
#define _LINUX_SYNC_CORE_H
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE
|
||||
#include <asm/sync_core.h>
|
||||
#else
|
||||
/*
|
||||
* This is a dummy sync_core_before_usermode() implementation that can be used
|
||||
* on all architectures which return to user-space through core serializing
|
||||
* instructions.
|
||||
* If your architecture returns to user-space through non-core-serializing
|
||||
* instructions, you need to write your own functions.
|
||||
*/
|
||||
static inline void sync_core_before_usermode(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_SYNC_CORE_H */
|
||||
|
||||
Loading…
Reference in a new issue