]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/linux/sched.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[karo-tx-linux.git] / include / linux / sched.h
index 2b69fc65020131bed57e41d4b228ed0c59692a5c..9c4ca7433d9d6d89aa6bad857b5299ae1bbe5577 100644 (file)
@@ -421,7 +421,8 @@ struct sched_dl_entity {
        u64                             dl_runtime;     /* Maximum runtime for each instance    */
        u64                             dl_deadline;    /* Relative deadline of each instance   */
        u64                             dl_period;      /* Separation of two instances (period) */
-       u64                             dl_bw;          /* dl_runtime / dl_deadline             */
+       u64                             dl_bw;          /* dl_runtime / dl_period               */
+       u64                             dl_density;     /* dl_runtime / dl_deadline             */
 
        /*
         * Actual scheduling parameters. Initialized with the values above,
@@ -445,16 +446,33 @@ struct sched_dl_entity {
         *
         * @dl_yielded tells if task gave up the CPU before consuming
         * all its available runtime during the last job.
+        *
+        * @dl_non_contending tells if the task is inactive while still
+        * contributing to the active utilization. In other words, it
+        * indicates if the inactive timer has been armed and its handler
+        * has not been executed yet. This flag is useful to avoid race
+        * conditions between the inactive timer handler and the wakeup
+        * code.
         */
        int                             dl_throttled;
        int                             dl_boosted;
        int                             dl_yielded;
+       int                             dl_non_contending;
 
        /*
         * Bandwidth enforcement timer. Each -deadline task has its
         * own bandwidth to be enforced, thus we need one timer per task.
         */
        struct hrtimer                  dl_timer;
+
+       /*
+        * Inactive timer, responsible for decreasing the active utilization
+        * at the "0-lag time". When a -deadline task blocks, it contributes
+        * to GRUB's active utilization until the "0-lag time", hence a
+        * timer is needed to decrease the active utilization at the correct
+        * time.
+        */
+       struct hrtimer inactive_timer;
 };
 
 union rcu_special {
@@ -1096,8 +1114,6 @@ static inline struct pid *task_session(struct task_struct *task)
  *                     current.
  * task_xid_nr_ns()  : id seen from the ns specified;
  *
- * set_task_vxid()   : assigns a virtual id to a task;
- *
  * see also pid_nr() etc in include/linux/pid.h
  */
 pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, struct pid_namespace *ns);
@@ -1265,6 +1281,16 @@ extern struct pid *cad_pid;
 #define tsk_used_math(p)                       ((p)->flags & PF_USED_MATH)
 #define used_math()                            tsk_used_math(current)
 
+static inline bool is_percpu_thread(void)
+{
+#ifdef CONFIG_SMP
+       return (current->flags & PF_NO_SETAFFINITY) &&
+               (current->nr_cpus_allowed  == 1);
+#else
+       return true;
+#endif
+}
+
 /* Per-process atomic flags. */
 #define PFA_NO_NEW_PRIVS               0       /* May not gain new privileges. */
 #define PFA_SPREAD_PAGE                        1       /* Spread page cache over cpuset */