summaryrefslogtreecommitdiffstats
path: root/kernel/sched/sched.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched/sched.h')
-rw-r--r--kernel/sched/sched.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index b3cb895d14a2..0db2c1b3361e 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -911,6 +911,10 @@ struct rq {
911 911
912 atomic_t nr_iowait; 912 atomic_t nr_iowait;
913 913
914#ifdef CONFIG_MEMBARRIER
915 int membarrier_state;
916#endif
917
914#ifdef CONFIG_SMP 918#ifdef CONFIG_SMP
915 struct root_domain *rd; 919 struct root_domain *rd;
916 struct sched_domain __rcu *sd; 920 struct sched_domain __rcu *sd;
@@ -2438,3 +2442,33 @@ static inline bool sched_energy_enabled(void)
2438static inline bool sched_energy_enabled(void) { return false; } 2442static inline bool sched_energy_enabled(void) { return false; }
2439 2443
2440#endif /* CONFIG_ENERGY_MODEL && CONFIG_CPU_FREQ_GOV_SCHEDUTIL */ 2444#endif /* CONFIG_ENERGY_MODEL && CONFIG_CPU_FREQ_GOV_SCHEDUTIL */
2445
2446#ifdef CONFIG_MEMBARRIER
2447/*
2448 * The scheduler provides memory barriers required by membarrier between:
2449 * - prior user-space memory accesses and store to rq->membarrier_state,
2450 * - store to rq->membarrier_state and following user-space memory accesses.
2451 * In the same way it provides those guarantees around store to rq->curr.
2452 */
2453static inline void membarrier_switch_mm(struct rq *rq,
2454 struct mm_struct *prev_mm,
2455 struct mm_struct *next_mm)
2456{
2457 int membarrier_state;
2458
2459 if (prev_mm == next_mm)
2460 return;
2461
2462 membarrier_state = atomic_read(&next_mm->membarrier_state);
2463 if (READ_ONCE(rq->membarrier_state) == membarrier_state)
2464 return;
2465
2466 WRITE_ONCE(rq->membarrier_state, membarrier_state);
2467}
2468#else
2469static inline void membarrier_switch_mm(struct rq *rq,
2470 struct mm_struct *prev_mm,
2471 struct mm_struct *next_mm)
2472{
2473}
2474#endif