Merge branch 'linus' into sched/core, to resolve semantic conflict
[linux-2.6-microblaze.git] / include / linux / sched.h
index a33f35f..942b87f 100644 (file)
@@ -552,7 +552,6 @@ struct sched_dl_entity {
         * overruns.
         */
        unsigned int                    dl_throttled      : 1;
-       unsigned int                    dl_boosted        : 1;
        unsigned int                    dl_yielded        : 1;
        unsigned int                    dl_non_contending : 1;
        unsigned int                    dl_overrun        : 1;
@@ -571,6 +570,15 @@ struct sched_dl_entity {
         * time.
         */
        struct hrtimer inactive_timer;
+
+#ifdef CONFIG_RT_MUTEXES
+       /*
+        * Priority Inheritance. When a DEADLINE scheduling entity is boosted
+        * pi_se points to the donor, otherwise points to the dl_se it belongs
+        * to (the original one/itself).
+        */
+       struct sched_dl_entity *pi_se;
+#endif
 };
 
 #ifdef CONFIG_UCLAMP_TASK
@@ -775,7 +783,6 @@ struct task_struct {
        unsigned                        sched_reset_on_fork:1;
        unsigned                        sched_contributes_to_load:1;
        unsigned                        sched_migrated:1;
-       unsigned                        sched_remote_wakeup:1;
 #ifdef CONFIG_PSI
        unsigned                        sched_psi_wake_requeue:1;
 #endif
@@ -785,6 +792,21 @@ struct task_struct {
 
        /* Unserialized, strictly 'current' */
 
+       /*
+        * This field must not be in the scheduler word above due to wakelist
+        * queueing no longer being serialized by p->on_cpu. However:
+        *
+        * p->XXX = X;                  ttwu()
+        * schedule()                     if (p->on_rq && ..) // false
+        *   smp_mb__after_spinlock();    if (smp_load_acquire(&p->on_cpu) && //true
+        *   deactivate_task()                ttwu_queue_wakelist())
+        *     p->on_rq = 0;                    p->sched_remote_wakeup = Y;
+        *
+        * guarantees all stores of 'current' are visible before
+        * ->sched_remote_wakeup gets used, so it can be in this word.
+        */
+       unsigned                        sched_remote_wakeup:1;
+
        /* Bit to tell LSMs we're in execve(): */
        unsigned                        in_execve:1;
        unsigned                        in_iowait:1;