diff options
author | ptr1337 | 2021-05-07 14:38:18 +0200 |
---|---|---|
committer | ptr1337 | 2021-05-07 14:38:18 +0200 |
commit | 7b87365a70158d22f396f2cc5ed2aa693eb292f7 (patch) | |
tree | 21b39e7a7e1a723a1e0bcf8ed2cebdf4604cdb68 /cacule-5.10.patch | |
parent | 4c9e940693f5d1ac45c6654bf6220f8a18b5a0d3 (diff) | |
download | aur-7b87365a70158d22f396f2cc5ed2aa693eb292f7.tar.gz |
new cacule patch, kernel update
Diffstat (limited to 'cacule-5.10.patch')
-rw-r--r-- | cacule-5.10.patch | 7459 |
1 files changed, 6150 insertions, 1309 deletions
diff --git a/cacule-5.10.patch b/cacule-5.10.patch index 6e846eea3e26..c8b235006b0f 100644 --- a/cacule-5.10.patch +++ b/cacule-5.10.patch @@ -1,1309 +1,6150 @@ -diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst -index d4b32cc32bb7..2788c5bbd870 100644 ---- a/Documentation/admin-guide/sysctl/kernel.rst -+++ b/Documentation/admin-guide/sysctl/kernel.rst -@@ -1087,6 +1087,10 @@ Model available). If your platform happens to meet the - requirements for EAS but you do not want to use it, change - this value to 0. - -+sched_interactivity_factor (CacULE scheduler only) -+================================================== -+Sets the value *m* for interactivity score calculations. See -+Figure 1 in https://web.cs.ucdavis.edu/~roper/ecs150/ULE.pdf - - sched_schedstats - ================ -diff --git a/Documentation/scheduler/sched-CacULE.rst b/Documentation/scheduler/sched-CacULE.rst -new file mode 100644 -index 000000000000..82b0847c468a ---- /dev/null -+++ b/Documentation/scheduler/sched-CacULE.rst -@@ -0,0 +1,76 @@ -+====================================== -+The CacULE Scheduler by Hamad Al Marri. -+====================================== -+ -+1. Overview -+============= -+ -+The CacULE CPU scheduler is based on interactivity score mechanism. -+The interactivity score is inspired by the ULE scheduler (FreeBSD -+scheduler). -+ -+1.1 About CacULE Scheduler -+-------------------------- -+ -+ - Each CPU has its own runqueue. -+ -+ - NORMAL runqueue is a linked list of sched_entities (instead of RB-Tree). -+ -+ - RT and other runqueues are just the same as the CFS's. -+ -+ - Wake up tasks preempt currently running tasks if its interactivity score value -+ is higher. -+ -+ -+1.2. Complexity -+---------------- -+ -+The complexity of Enqueue and Dequeue a task is O(1). -+ -+The complexity of pick the next task is in O(n), where n is the number of tasks -+in a runqueue (each CPU has its own runqueue). -+ -+Note: O(n) sounds scary, but usually for a machine with 4 CPUS where it is used -+for desktop or mobile jobs, the maximum number of runnable tasks might not -+exceeds 10 (at the pick next run time) - the idle tasks are excluded since they -+are dequeued when sleeping and enqueued when they wake up. -+ -+ -+2. The CacULE Interactivity Score -+======================================================= -+ -+The interactivity score is inspired by the ULE scheduler (FreeBSD scheduler). -+For more information see: https://web.cs.ucdavis.edu/~roper/ecs150/ULE.pdf -+CacULE doesn't replace CFS with ULE, it only changes the CFS' pick next task -+mechanism to ULE's interactivity score mechanism for picking next task to run. -+ -+ -+2.3 sched_interactivity_factor -+================= -+Sets the value *m* for interactivity score calculations. See Figure 1 in -+https://web.cs.ucdavis.edu/~roper/ecs150/ULE.pdf -+The default value of in CacULE is 10 which means that the Maximum Interactive -+Score is 20 (since m = Maximum Interactive Score / 2). -+You can tune sched_interactivity_factor with sysctl command: -+ -+ sysctl kernel.sched_interactivity_factor=50 -+ -+This command changes the sched_interactivity_factor from 10 to 50. -+ -+ -+3. Scheduling policies -+======================= -+ -+CacULE some CFS, implements three scheduling policies: -+ -+ - SCHED_NORMAL (traditionally called SCHED_OTHER): The scheduling -+ policy that is used for regular tasks. -+ -+ - SCHED_BATCH: Does not preempt nearly as often as regular tasks -+ would, thereby allowing tasks to run longer and make better use of -+ caches but at the cost of interactivity. This is well suited for -+ batch jobs. -+ -+ - SCHED_IDLE: This is even weaker than nice 19, but its not a true -+ idle timer scheduler in order to avoid to get into priority -+ inversion problems which would deadlock the machine. -diff --git a/include/linux/sched.h b/include/linux/sched.h -index 76cd21fa5501..a4d58d27fc72 100644 ---- a/include/linux/sched.h -+++ b/include/linux/sched.h -@@ -448,16 +448,29 @@ struct sched_statistics { - #endif - }; - -+#ifdef CONFIG_CACULE_SCHED -+struct cacule_node { -+ struct cacule_node* next; -+ struct cacule_node* prev; -+ u64 cacule_start_time; -+ u64 vruntime; -+}; -+#endif -+ - struct sched_entity { - /* For load-balancing: */ - struct load_weight load; - struct rb_node run_node; -+#ifdef CONFIG_CACULE_SCHED -+ struct cacule_node cacule_node; -+#else -+ u64 vruntime; -+#endif - struct list_head group_node; - unsigned int on_rq; - - u64 exec_start; - u64 sum_exec_runtime; -- u64 vruntime; - u64 prev_sum_exec_runtime; - - u64 nr_migrations; -diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h -index 3c31ba88aca5..cb819c3d86f3 100644 ---- a/include/linux/sched/sysctl.h -+++ b/include/linux/sched/sysctl.h -@@ -31,6 +31,12 @@ extern unsigned int sysctl_sched_min_granularity; - extern unsigned int sysctl_sched_wakeup_granularity; - extern unsigned int sysctl_sched_child_runs_first; - -+#ifdef CONFIG_CACULE_SCHED -+extern int interactivity_factor; -+extern unsigned int interactivity_threshold; -+extern int cacule_max_lifetime; -+#endif -+ - enum sched_tunable_scaling { - SCHED_TUNABLESCALING_NONE, - SCHED_TUNABLESCALING_LOG, -diff --git a/init/Kconfig b/init/Kconfig -index fc4c9f416fad..16676cfd11d7 100644 ---- a/init/Kconfig -+++ b/init/Kconfig -@@ -825,6 +825,17 @@ config UCLAMP_BUCKETS_COUNT - - endmenu - -+config CACULE_SCHED -+ bool "CacULE CPU scheduler" -+ default y -+ help -+ The CacULE CPU scheduler is based on interactivity score mechanism. -+ The interactivity score is inspired by the ULE scheduler (FreeBSD -+ scheduler). -+ -+ If unsure, say Y here. -+ -+ - # - # For architectures that want to enable the support for NUMA-affine scheduler - # balancing logic: -@@ -1208,6 +1219,7 @@ config SCHED_AUTOGROUP - select CGROUPS - select CGROUP_SCHED - select FAIR_GROUP_SCHED -+ default y - help - This option optimizes the scheduler for common desktop workloads by - automatically creating and populating task groups. This separation -diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index 3a150445e0cb..75f80beab9b7 100644 ---- a/kernel/sched/core.c -+++ b/kernel/sched/core.c -@@ -3067,7 +3067,13 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p) - p->se.sum_exec_runtime = 0; - p->se.prev_sum_exec_runtime = 0; - p->se.nr_migrations = 0; -+ -+#ifdef CONFIG_CACULE_SCHED -+ p->se.cacule_node.vruntime = 0; -+#else - p->se.vruntime = 0; -+#endif -+ - INIT_LIST_HEAD(&p->se.group_node); - - #ifdef CONFIG_FAIR_GROUP_SCHED -@@ -3352,6 +3358,10 @@ void wake_up_new_task(struct task_struct *p) - update_rq_clock(rq); - post_init_entity_util_avg(p); - -+#ifdef CONFIG_CACULE_SCHED -+ p->se.cacule_node.cacule_start_time = sched_clock(); -+#endif -+ - activate_task(rq, p, ENQUEUE_NOCLOCK); - trace_sched_wakeup_new(p); - check_preempt_curr(rq, p, WF_FORK); -@@ -7066,6 +7076,10 @@ void __init sched_init(void) - BUG_ON(&dl_sched_class + 1 != &stop_sched_class); - #endif - -+#ifdef CONFIG_CACULE_SCHED -+ printk(KERN_INFO "CacULE CPU scheduler v5.10 by Hamad Al Marri."); -+#endif -+ - wait_bit_init(); - - #ifdef CONFIG_FAIR_GROUP_SCHED -diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c -index 2357921580f9..fb4ef69724c3 100644 ---- a/kernel/sched/debug.c -+++ b/kernel/sched/debug.c -@@ -439,7 +439,11 @@ static void print_cfs_group_stats(struct seq_file *m, int cpu, struct task_group - return; - - PN(se->exec_start); -+#ifdef CONFIG_CACULE_SCHED -+ PN(se->cacule_node.vruntime); -+#else - PN(se->vruntime); -+#endif - PN(se->sum_exec_runtime); - - if (schedstat_enabled()) { -@@ -493,7 +497,11 @@ print_task(struct seq_file *m, struct rq *rq, struct task_struct *p) - - SEQ_printf(m, " %15s %5d %9Ld.%06ld %9Ld %5d ", - p->comm, task_pid_nr(p), -+#ifdef CONFIG_CACULE_SCHED -+ SPLIT_NS(p->se.cacule_node.vruntime), -+#else - SPLIT_NS(p->se.vruntime), -+#endif - (long long)(p->nvcsw + p->nivcsw), - p->prio); - -@@ -535,8 +543,12 @@ static void print_rq(struct seq_file *m, struct rq *rq, int rq_cpu) - - void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq) - { -- s64 MIN_vruntime = -1, min_vruntime, max_vruntime = -1, -- spread, rq0_min_vruntime, spread0; -+ s64 MIN_vruntime = -1, -+#if !defined(CONFIG_CACULE_SCHED) -+ min_vruntime, rq0_min_vruntime, -+ spread0, -+#endif -+ max_vruntime = -1, spread; - struct rq *rq = cpu_rq(cpu); - struct sched_entity *last; - unsigned long flags; -@@ -553,25 +565,41 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq) - - raw_spin_lock_irqsave(&rq->lock, flags); - if (rb_first_cached(&cfs_rq->tasks_timeline)) -+#ifdef CONFIG_CACULE_SCHED -+ MIN_vruntime = (__pick_first_entity(cfs_rq))->cacule_node.vruntime; -+#else - MIN_vruntime = (__pick_first_entity(cfs_rq))->vruntime; -+#endif -+ - last = __pick_last_entity(cfs_rq); - if (last) -+#ifdef CONFIG_CACULE_SCHED -+ max_vruntime = last->cacule_node.vruntime; -+#else - max_vruntime = last->vruntime; -+#endif -+ -+#if !defined(CONFIG_CACULE_SCHED) - min_vruntime = cfs_rq->min_vruntime; - rq0_min_vruntime = cpu_rq(0)->cfs.min_vruntime; -+#endif - raw_spin_unlock_irqrestore(&rq->lock, flags); - SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "MIN_vruntime", - SPLIT_NS(MIN_vruntime)); -+#if !defined(CONFIG_CACULE_SCHED) - SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "min_vruntime", - SPLIT_NS(min_vruntime)); -+#endif - SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "max_vruntime", - SPLIT_NS(max_vruntime)); - spread = max_vruntime - MIN_vruntime; - SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "spread", - SPLIT_NS(spread)); -+#if !defined(CONFIG_CACULE_SCHED) - spread0 = min_vruntime - rq0_min_vruntime; - SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "spread0", - SPLIT_NS(spread0)); -+#endif - SEQ_printf(m, " .%-30s: %d\n", "nr_spread_over", - cfs_rq->nr_spread_over); - SEQ_printf(m, " .%-30s: %d\n", "nr_running", cfs_rq->nr_running); -@@ -928,7 +956,11 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns, - #define PN_SCHEDSTAT(F) __PSN(#F, schedstat_val(p->F)) - - PN(se.exec_start); -+#ifdef CONFIG_CACULE_SCHED -+ PN(se.cacule_node.vruntime); -+#else - PN(se.vruntime); -+#endif - PN(se.sum_exec_runtime); - - nr_switches = p->nvcsw + p->nivcsw; -diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index 348605306027..681fa23d4a45 100644 ---- a/kernel/sched/fair.c -+++ b/kernel/sched/fair.c -@@ -19,6 +19,10 @@ - * - * Adaptive scheduling granularity, math enhancements by Peter Zijlstra - * Copyright (C) 2007 Red Hat, Inc., Peter Zijlstra -+ * -+ * CacULE enhancements CPU cache and scheduler based on -+ * Interactivity Score. -+ * (C) 2020 Hamad Al Marri <hamad.s.almarri@gmail.com> - */ - #include "sched.h" - -@@ -113,6 +117,11 @@ int __weak arch_asym_cpu_priority(int cpu) - */ - #define fits_capacity(cap, max) ((cap) * 1280 < (max) * 1024) - -+#endif -+#ifdef CONFIG_CACULE_SCHED -+int __read_mostly cacule_max_lifetime = 22000; // in ms -+int __read_mostly interactivity_factor = 32768; -+unsigned int __read_mostly interactivity_threshold = 20480; - #endif - - #ifdef CONFIG_CFS_BANDWIDTH -@@ -253,6 +262,14 @@ static u64 __calc_delta(u64 delta_exec, unsigned long weight, struct load_weight - - const struct sched_class fair_sched_class; - -+ -+#ifdef CONFIG_CACULE_SCHED -+static inline struct sched_entity *se_of(struct cacule_node *cn) -+{ -+ return container_of(cn, struct sched_entity, cacule_node); -+} -+#endif -+ - /************************************************************** - * CFS operations on generic schedulable entities: - */ -@@ -512,7 +529,7 @@ void account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec); - /************************************************************** - * Scheduling class tree data structure manipulation methods: - */ -- -+#if !defined(CONFIG_CACULE_SCHED) - static inline u64 max_vruntime(u64 max_vruntime, u64 vruntime) - { - s64 delta = (s64)(vruntime - max_vruntime); -@@ -568,7 +585,169 @@ static void update_min_vruntime(struct cfs_rq *cfs_rq) - cfs_rq->min_vruntime_copy = cfs_rq->min_vruntime; - #endif - } -+#endif /* CONFIG_CACULE_SCHED */ -+ -+#ifdef CONFIG_CACULE_SCHED -+static unsigned int -+calc_interactivity(u64 now, struct cacule_node *se) -+{ -+ u64 l_se, vr_se, sleep_se = 1ULL, u64_factor; -+ unsigned int score_se; -+ -+ /* -+ * in case of vruntime==0, logical OR with 1 would -+ * make sure that the least sig. bit is 1 -+ */ -+ l_se = now - se->cacule_start_time; -+ vr_se = se->vruntime | 1; -+ u64_factor = interactivity_factor; -+ -+ /* safety check */ -+ if (likely(l_se > vr_se)) -+ sleep_se = (l_se - vr_se) | 1; -+ -+ if (sleep_se >= vr_se) -+ score_se = u64_factor / (sleep_se / vr_se); -+ else -+ score_se = (u64_factor << 1) - (u64_factor / (vr_se / sleep_se)); -+ -+ return score_se; -+} -+ -+static inline int is_interactive(struct cacule_node *cn) -+{ -+ if (cn->vruntime == 0) -+ return 0; -+ -+ return calc_interactivity(sched_clock(), cn) < interactivity_threshold; -+} -+ -+static inline int -+entity_before_cached(u64 now, unsigned int score_curr, struct cacule_node *se) -+{ -+ unsigned int score_se; -+ int diff; -+ -+ score_se = calc_interactivity(now, se); -+ diff = score_se - score_curr; -+ -+ if (diff <= 0) -+ return 1; -+ -+ return -1; -+} -+ -+/* -+ * Does se have lower interactivity score value (i.e. interactive) than curr? If yes, return 1, -+ * otherwise return -1 -+ * se is before curr if se has lower interactivity score value -+ * the lower score, the more interactive -+ */ -+static inline int -+entity_before(u64 now, struct cacule_node *curr, struct cacule_node *se) -+{ -+ unsigned int score_curr, score_se; -+ int diff; -+ -+ score_curr = calc_interactivity(now, curr); -+ score_se = calc_interactivity(now, se); -+ -+ diff = score_se - score_curr; -+ -+ if (diff < 0) -+ return 1; -+ -+ return -1; -+} -+ -+/* -+ * Enqueue an entity -+ */ -+static void __enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *_se) -+{ -+ struct cacule_node *se = &(_se->cacule_node); -+ struct cacule_node *iter, *next = NULL; -+ u64 now = sched_clock(); -+ unsigned int score_se = calc_interactivity(now, se); -+ -+ se->next = NULL; -+ se->prev = NULL; -+ -+ if (likely(cfs_rq->head)) { -+ -+ // start from tail -+ iter = cfs_rq->tail; -+ -+ // does se have higher IS than iter? -+ while (iter && entity_before_cached(now, score_se, iter) == -1) { -+ next = iter; -+ iter = iter->prev; -+ } -+ -+ // se in tail position -+ if (iter == cfs_rq->tail) { -+ cfs_rq->tail->next = se; -+ se->prev = cfs_rq->tail; -+ -+ cfs_rq->tail = se; -+ } -+ // else if not head no tail, insert se after iter -+ else if (iter) { -+ se->next = next; -+ se->prev = iter; -+ -+ iter->next = se; -+ next->prev = se; -+ } -+ // insert se at head -+ else { -+ se->next = cfs_rq->head; -+ cfs_rq->head->prev = se; -+ -+ // lastly reset the head -+ cfs_rq->head = se; -+ } -+ } else { -+ // if empty rq -+ cfs_rq->head = se; -+ cfs_rq->tail = se; -+ } -+} -+ -+static void __dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *_se) -+{ -+ struct cacule_node *se = &(_se->cacule_node); -+ -+ // if only one se in rq -+ if (cfs_rq->head == cfs_rq->tail) { -+ cfs_rq->head = NULL; -+ cfs_rq->tail = NULL; -+ -+ } else if (se == cfs_rq->head) { -+ // if it is the head -+ cfs_rq->head = cfs_rq->head->next; -+ cfs_rq->head->prev = NULL; -+ } else if (se == cfs_rq->tail) { -+ // if it is the tail -+ cfs_rq->tail = cfs_rq->tail->prev; -+ cfs_rq->tail->next = NULL; -+ } else { -+ // if in the middle -+ struct cacule_node *prev = se->prev; -+ struct cacule_node *next = se->next; -+ -+ prev->next = next; -+ -+ if (next) -+ next->prev = prev; -+ } -+} - -+struct sched_entity *__pick_first_entity(struct cfs_rq *cfs_rq) -+{ -+ return se_of(cfs_rq->head); -+} -+#else - /* - * Enqueue an entity into the rb-tree: - */ -@@ -626,16 +805,29 @@ static struct sched_entity *__pick_next_entity(struct sched_entity *se) - - return rb_entry(next, struct sched_entity, run_node); - } -+#endif /* CONFIG_CACULE_SCHED */ - - #ifdef CONFIG_SCHED_DEBUG - struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq) - { -+#ifdef CONFIG_CACULE_SCHED -+ struct cacule_node *cn = cfs_rq->head; -+ -+ if (!cn) -+ return NULL; -+ -+ while (cn->next) -+ cn = cn->next; -+ -+ return se_of(cn); -+#else - struct rb_node *last = rb_last(&cfs_rq->tasks_timeline.rb_root); - - if (!last) - return NULL; - - return rb_entry(last, struct sched_entity, run_node); -+#endif /* CONFIG_CACULE_SCHED */ - } - - /************************************************************** -@@ -720,6 +912,7 @@ static u64 sched_slice(struct cfs_rq *cfs_rq, struct sched_entity *se) - return slice; - } - -+#if !defined(CONFIG_CACULE_SCHED) - /* - * We calculate the vruntime slice of a to-be-inserted task. - * -@@ -729,6 +922,7 @@ static u64 sched_vslice(struct cfs_rq *cfs_rq, struct sched_entity *se) - { - return calc_delta_fair(sched_slice(cfs_rq, se), se); - } -+#endif /* CONFIG_CACULE_SCHED */ - - #include "pelt.h" - #ifdef CONFIG_SMP -@@ -836,13 +1030,49 @@ static void update_tg_load_avg(struct cfs_rq *cfs_rq) - } - #endif /* CONFIG_SMP */ - -+#ifdef CONFIG_CACULE_SCHED -+static void normalize_lifetime(u64 now, struct sched_entity *se) -+{ -+ struct cacule_node *cn; -+ u64 max_life_ns, life_time; -+ s64 diff; -+ -+ /* -+ * left shift 20 bits is approximately = * 1000000 -+ * we don't need the precision of life time -+ * Ex. for 30s, with left shift (20bits) == 31.457s -+ */ -+ max_life_ns = ((u64) cacule_max_lifetime) << 20; -+ -+ for_each_sched_entity(se) { -+ cn = &se->cacule_node; -+ life_time = now - cn->cacule_start_time; -+ diff = life_time - max_life_ns; -+ -+ if (unlikely(diff > 0)) { -+ // multiply life_time by 8 for more precision -+ u64 old_hrrn_x8 = life_time / ((cn->vruntime >> 3) | 1); -+ -+ // reset life to half max_life (i.e ~15s) -+ cn->cacule_start_time = now - (max_life_ns >> 1); -+ -+ // avoid division by zero -+ if (old_hrrn_x8 == 0) old_hrrn_x8 = 1; -+ -+ // reset vruntime based on old hrrn ratio -+ cn->vruntime = (max_life_ns << 2) / old_hrrn_x8; -+ } -+ } -+} -+#endif /* CONFIG_CACULE_SCHED */ -+ - /* - * Update the current task's runtime statistics. - */ - static void update_curr(struct cfs_rq *cfs_rq) - { - struct sched_entity *curr = cfs_rq->curr; -- u64 now = rq_clock_task(rq_of(cfs_rq)); -+ u64 now = sched_clock(); - u64 delta_exec; - - if (unlikely(!curr)) -@@ -860,13 +1090,22 @@ static void update_curr(struct cfs_rq *cfs_rq) - curr->sum_exec_runtime += delta_exec; - schedstat_add(cfs_rq->exec_clock, delta_exec); - -+#ifdef CONFIG_CACULE_SCHED -+ curr->cacule_node.vruntime += calc_delta_fair(delta_exec, curr); -+ normalize_lifetime(now, curr); -+#else - curr->vruntime += calc_delta_fair(delta_exec, curr); - update_min_vruntime(cfs_rq); -+#endif - - if (entity_is_task(curr)) { - struct task_struct *curtask = task_of(curr); - -+#ifdef CONFIG_CACULE_SCHED -+ trace_sched_stat_runtime(curtask, delta_exec, curr->cacule_node.vruntime); -+#else - trace_sched_stat_runtime(curtask, delta_exec, curr->vruntime); -+#endif - cgroup_account_cputime(curtask, delta_exec); - account_group_exec_runtime(curtask, delta_exec); - } -@@ -1020,7 +1259,6 @@ update_stats_enqueue(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) - static inline void - update_stats_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) - { -- - if (!schedstat_enabled()) - return; - -@@ -1052,7 +1290,7 @@ update_stats_curr_start(struct cfs_rq *cfs_rq, struct sched_entity *se) - /* - * We are starting a new run period: - */ -- se->exec_start = rq_clock_task(rq_of(cfs_rq)); -+ se->exec_start = sched_clock(); - } - - /************************************************** -@@ -4104,7 +4342,7 @@ static inline void update_misfit_status(struct task_struct *p, struct rq *rq) {} - - static void check_spread(struct cfs_rq *cfs_rq, struct sched_entity *se) - { --#ifdef CONFIG_SCHED_DEBUG -+#if defined(CONFIG_SCHED_DEBUG) && !defined(CONFIG_CACULE_SCHED) - s64 d = se->vruntime - cfs_rq->min_vruntime; - - if (d < 0) -@@ -4115,6 +4353,7 @@ static void check_spread(struct cfs_rq *cfs_rq, struct sched_entity *se) - #endif - } - -+#if !defined(CONFIG_CACULE_SCHED) - static void - place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial) - { -@@ -4146,6 +4385,7 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial) - /* ensure we never gain time by being placed backwards. */ - se->vruntime = max_vruntime(se->vruntime, vruntime); - } -+#endif /* CONFIG_CACULE_SCHED */ - - static void check_enqueue_throttle(struct cfs_rq *cfs_rq); - -@@ -4204,18 +4444,23 @@ static inline bool cfs_bandwidth_used(void); - static void - enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) - { -+#if !defined(CONFIG_CACULE_SCHED) - bool renorm = !(flags & ENQUEUE_WAKEUP) || (flags & ENQUEUE_MIGRATED); -+#endif - bool curr = cfs_rq->curr == se; - -+#if !defined(CONFIG_CACULE_SCHED) - /* - * If we're the current task, we must renormalise before calling - * update_curr(). - */ - if (renorm && curr) - se->vruntime += cfs_rq->min_vruntime; -+#endif - - update_curr(cfs_rq); - -+#if !defined(CONFIG_CACULE_SCHED) - /* - * Otherwise, renormalise after, such that we're placed at the current - * moment in time, instead of some random moment in the past. Being -@@ -4224,6 +4469,7 @@ enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) - */ - if (renorm && !curr) - se->vruntime += cfs_rq->min_vruntime; -+#endif - - /* - * When enqueuing a sched_entity, we must: -@@ -4238,8 +4484,10 @@ enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) - update_cfs_group(se); - account_entity_enqueue(cfs_rq, se); - -+#if !defined(CONFIG_CACULE_SCHED) - if (flags & ENQUEUE_WAKEUP) - place_entity(cfs_rq, se, 0); -+#endif - - check_schedstat_required(); - update_stats_enqueue(cfs_rq, se, flags); -@@ -4260,6 +4508,7 @@ enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) - check_enqueue_throttle(cfs_rq); - } - -+#if !defined(CONFIG_CACULE_SCHED) - static void __clear_buddies_last(struct sched_entity *se) - { - for_each_sched_entity(se) { -@@ -4304,6 +4553,7 @@ static void clear_buddies(struct cfs_rq *cfs_rq, struct sched_entity *se) - if (cfs_rq->skip == se) - __clear_buddies_skip(se); - } -+#endif /* !CONFIG_CACULE_SCHED */ - - static __always_inline void return_cfs_rq_runtime(struct cfs_rq *cfs_rq); - -@@ -4328,13 +4578,16 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) - - update_stats_dequeue(cfs_rq, se, flags); - -+#if !defined(CONFIG_CACULE_SCHED) - clear_buddies(cfs_rq, se); -+#endif - - if (se != cfs_rq->curr) - __dequeue_entity(cfs_rq, se); - se->on_rq = 0; - account_entity_dequeue(cfs_rq, se); - -+#if !defined(CONFIG_CACULE_SCHED) - /* - * Normalize after update_curr(); which will also have moved - * min_vruntime if @se is the one holding it back. But before doing -@@ -4343,12 +4596,14 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) - */ - if (!(flags & DEQUEUE_SLEEP)) - se->vruntime -= cfs_rq->min_vruntime; -+#endif - - /* return excess runtime on last dequeue */ - return_cfs_rq_runtime(cfs_rq); - - update_cfs_group(se); - -+#if !defined(CONFIG_CACULE_SCHED) - /* - * Now advance min_vruntime if @se was the entity holding it back, - * except when: DEQUEUE_SAVE && !DEQUEUE_MOVE, in this case we'll be -@@ -4357,8 +4612,23 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) - */ - if ((flags & (DEQUEUE_SAVE | DEQUEUE_MOVE)) != DEQUEUE_SAVE) - update_min_vruntime(cfs_rq); -+#endif - } - -+#ifdef CONFIG_CACULE_SCHED -+/* -+ * Preempt the current task with a newly woken task if needed: -+ */ -+static void -+check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) -+{ -+ u64 now = sched_clock(); -+ -+ // does head have higher IS than curr -+ if (entity_before(now, &curr->cacule_node, cfs_rq->head) == 1) -+ resched_curr(rq_of(cfs_rq)); -+} -+#else - /* - * Preempt the current task with a newly woken task if needed: - */ -@@ -4398,6 +4668,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) - if (delta > ideal_runtime) - resched_curr(rq_of(cfs_rq)); - } -+#endif /* CONFIG_CACULE_SCHED */ - - static void - set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se) -@@ -4432,6 +4703,21 @@ set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se) - se->prev_sum_exec_runtime = se->sum_exec_runtime; - } - -+#ifdef CONFIG_CACULE_SCHED -+static struct sched_entity * -+pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr) -+{ -+ struct cacule_node *se = cfs_rq->head; -+ -+ if (unlikely(!se)) -+ se = &curr->cacule_node; -+ else if (unlikely(curr -+ && entity_before(sched_clock(), se, &curr->cacule_node) == 1)) -+ se = &curr->cacule_node; -+ -+ return se_of(se); -+} -+#else - static int - wakeup_preempt_entity(struct sched_entity *curr, struct sched_entity *se); - -@@ -4492,6 +4778,7 @@ pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr) - - return se; - } -+#endif /* CONFIG_CACULE_SCHED */ - - static bool check_cfs_rq_runtime(struct cfs_rq *cfs_rq); - -@@ -5585,7 +5872,9 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags) - hrtick_update(rq); - } - -+#if !defined(CONFIG_CACULE_SCHED) - static void set_next_buddy(struct sched_entity *se); -+#endif - - /* - * The dequeue_task method is called before nr_running is -@@ -5617,12 +5906,14 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags) - if (cfs_rq->load.weight) { - /* Avoid re-evaluating load for this entity: */ - se = parent_entity(se); -+#if !defined(CONFIG_CACULE_SCHED) - /* - * Bias pick_next to pick a task from this cfs_rq, as - * p is sleeping when it is within its sched_slice. - */ - if (task_sleep && se && !throttled_hierarchy(cfs_rq)) - set_next_buddy(se); -+#endif - break; - } - flags |= DEQUEUE_SLEEP; -@@ -5738,6 +6029,7 @@ static unsigned long capacity_of(int cpu) - return cpu_rq(cpu)->cpu_capacity; - } - -+#if !defined(CONFIG_CACULE_SCHED) - static void record_wakee(struct task_struct *p) - { - /* -@@ -5784,6 +6076,7 @@ static int wake_wide(struct task_struct *p) - return 0; - return 1; - } -+#endif - - /* - * The purpose of wake_affine() is to quickly determine on which CPU we can run -@@ -6460,6 +6753,7 @@ static unsigned long cpu_util_without(int cpu, struct task_struct *p) - return min_t(unsigned long, util, capacity_orig_of(cpu)); - } - -+#if !defined(CONFIG_CACULE_SCHED) - /* - * Predicts what cpu_util(@cpu) would return if @p was migrated (and enqueued) - * to @dst_cpu. -@@ -6693,6 +6987,57 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu) - - return -1; - } -+#endif /* CONFIG_CACULE_SCHED */ -+ -+#ifdef CONFIG_CACULE_SCHED -+static int -+find_least_IS_cpu(struct task_struct *p) -+{ -+ struct cfs_rq *cfs_rq; -+ unsigned int max_IS = 0; -+ unsigned int IS, IS_c, IS_h; -+ struct sched_entity *curr_se; -+ struct cacule_node *cn, *head; -+ int cpu_i; -+ int new_cpu = -1; -+ -+ for_each_online_cpu(cpu_i) { -+ if (!cpumask_test_cpu(cpu_i, p->cpus_ptr)) -+ continue; -+ -+ cn = NULL; -+ cfs_rq = &cpu_rq(cpu_i)->cfs; -+ -+ curr_se = cfs_rq->curr; -+ head = cfs_rq->head; -+ -+ if (!curr_se && head) -+ cn = head; -+ else if (curr_se && !head) -+ cn = &curr_se->cacule_node; -+ else if (curr_se && head) { -+ IS_c = calc_interactivity(sched_clock(), &curr_se->cacule_node); -+ IS_h = calc_interactivity(sched_clock(), head); -+ -+ IS = IS_c > IS_h? IS_c : IS_h; -+ goto compare; -+ } -+ -+ if (!cn) -+ return cpu_i; -+ -+ IS = calc_interactivity(sched_clock(), cn); -+ -+compare: -+ if (IS > max_IS) { -+ max_IS = IS; -+ new_cpu = cpu_i; -+ } -+ } -+ -+ return new_cpu; -+} -+#endif - - /* - * select_task_rq_fair: Select target runqueue for the waking task in domains -@@ -6715,6 +7060,25 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f - int want_affine = 0; - int sync = (wake_flags & WF_SYNC) && !(current->flags & PF_EXITING); - -+#ifdef CONFIG_CACULE_SCHED -+ struct sched_entity *se = &p->se; -+ unsigned int autogroup_enabled = 0; -+ -+#ifdef CONFIG_SCHED_AUTOGROUP -+ autogroup_enabled = sysctl_sched_autogroup_enabled; -+#endif -+ -+ if (autogroup_enabled || !is_interactive(&se->cacule_node)) -+ goto cfs_way; -+ -+ new_cpu = find_least_IS_cpu(p); -+ -+ if (likely(new_cpu != -1)) -+ return new_cpu; -+ -+ new_cpu = prev_cpu; -+cfs_way: -+#else - if (sd_flag & SD_BALANCE_WAKE) { - record_wakee(p); - -@@ -6727,6 +7091,7 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f - - want_affine = !wake_wide(p) && cpumask_test_cpu(cpu, p->cpus_ptr); - } -+#endif /* CONFIG_CACULE_SCHED */ - - rcu_read_lock(); - for_each_domain(cpu, tmp) { -@@ -6774,6 +7139,7 @@ static void detach_entity_cfs_rq(struct sched_entity *se); - */ - static void migrate_task_rq_fair(struct task_struct *p, int new_cpu) - { -+#if !defined(CONFIG_CACULE_SCHED) - /* - * As blocked tasks retain absolute vruntime the migration needs to - * deal with this by subtracting the old and adding the new -@@ -6799,6 +7165,7 @@ static void migrate_task_rq_fair(struct task_struct *p, int new_cpu) - - se->vruntime -= min_vruntime; - } -+#endif /* CONFIG_CACULE_SCHED */ - - if (p->on_rq == TASK_ON_RQ_MIGRATING) { - /* -@@ -6844,6 +7211,7 @@ balance_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf) - } - #endif /* CONFIG_SMP */ - -+#if !defined(CONFIG_CACULE_SCHED) - static unsigned long wakeup_gran(struct sched_entity *se) - { - unsigned long gran = sysctl_sched_wakeup_granularity; -@@ -6922,6 +7290,7 @@ static void set_skip_buddy(struct sched_entity *se) - for_each_sched_entity(se) - cfs_rq_of(se)->skip = se; - } -+#endif /* CONFIG_CACULE_SCHED */ - - /* - * Preempt the current task with a newly woken task if needed: -@@ -6930,9 +7299,12 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ - { - struct task_struct *curr = rq->curr; - struct sched_entity *se = &curr->se, *pse = &p->se; -+ -+#if !defined(CONFIG_CACULE_SCHED) - struct cfs_rq *cfs_rq = task_cfs_rq(curr); - int scale = cfs_rq->nr_running >= sched_nr_latency; - int next_buddy_marked = 0; -+#endif /* CONFIG_CACULE_SCHED */ - - if (unlikely(se == pse)) - return; -@@ -6946,10 +7318,12 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ - if (unlikely(throttled_hierarchy(cfs_rq_of(pse)))) - return; - -+#if !defined(CONFIG_CACULE_SCHED) - if (sched_feat(NEXT_BUDDY) && scale && !(wake_flags & WF_FORK)) { - set_next_buddy(pse); - next_buddy_marked = 1; - } -+#endif /* CONFIG_CACULE_SCHED */ - - /* - * We can come here with TIF_NEED_RESCHED already set from new task -@@ -6979,6 +7353,11 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ - find_matching_se(&se, &pse); - update_curr(cfs_rq_of(se)); - BUG_ON(!pse); -+ -+#ifdef CONFIG_CACULE_SCHED -+ if (entity_before(sched_clock(), &se->cacule_node, &pse->cacule_node) == 1) -+ goto preempt; -+#else - if (wakeup_preempt_entity(se, pse) == 1) { - /* - * Bias pick_next to pick the sched entity that is -@@ -6988,11 +7367,14 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ - set_next_buddy(pse); - goto preempt; - } -+#endif /* CONFIG_CACULE_SCHED */ - - return; - - preempt: - resched_curr(rq); -+ -+#if !defined(CONFIG_CACULE_SCHED) - /* - * Only set the backward buddy when the current task is still - * on the rq. This can happen when a wakeup gets interleaved -@@ -7007,6 +7389,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ - - if (sched_feat(LAST_BUDDY) && scale && entity_is_task(se)) - set_last_buddy(se); -+#endif /* CONFIG_CACULE_SCHED */ - } - - struct task_struct * -@@ -7181,7 +7564,10 @@ static void yield_task_fair(struct rq *rq) - { - struct task_struct *curr = rq->curr; - struct cfs_rq *cfs_rq = task_cfs_rq(curr); -+ -+#if !defined(CONFIG_CACULE_SCHED) - struct sched_entity *se = &curr->se; -+#endif - - /* - * Are we the only task in the tree? -@@ -7189,7 +7575,9 @@ static void yield_task_fair(struct rq *rq) - if (unlikely(rq->nr_running == 1)) - return; - -+#if !defined(CONFIG_CACULE_SCHED) - clear_buddies(cfs_rq, se); -+#endif - - if (curr->policy != SCHED_BATCH) { - update_rq_clock(rq); -@@ -7205,7 +7593,9 @@ static void yield_task_fair(struct rq *rq) - rq_clock_skip_update(rq); - } - -+#if !defined(CONFIG_CACULE_SCHED) - set_skip_buddy(se); -+#endif - } - - static bool yield_to_task_fair(struct rq *rq, struct task_struct *p) -@@ -7216,8 +7606,10 @@ static bool yield_to_task_fair(struct rq *rq, struct task_struct *p) - if (!se->on_rq || throttled_hierarchy(cfs_rq_of(se))) - return false; - -+#if !defined(CONFIG_CACULE_SCHED) - /* Tell the scheduler that we'd really like pse to run next. */ - set_next_buddy(se); -+#endif - - yield_task_fair(rq); - -@@ -7445,6 +7837,7 @@ static int task_hot(struct task_struct *p, struct lb_env *env) - if (env->sd->flags & SD_SHARE_CPUCAPACITY) - return 0; - -+#if !defined(CONFIG_CACULE_SCHED) - /* - * Buddy candidates are cache hot: - */ -@@ -7452,6 +7845,7 @@ static int task_hot(struct task_struct *p, struct lb_env *env) - (&p->se == cfs_rq_of(&p->se)->next || - &p->se == cfs_rq_of(&p->se)->last)) - return 1; -+#endif - - if (sysctl_sched_migration_cost == -1) - return 1; -@@ -10720,11 +11114,30 @@ static void task_tick_fair(struct rq *rq, struct task_struct *curr, int queued) - update_overutilized_status(task_rq(curr)); - } - -+#ifdef CONFIG_CACULE_SCHED - /* - * called on fork with the child task as argument from the parent's context - * - child not yet on the tasklist - * - preemption disabled - */ -+ static void task_fork_fair(struct task_struct *p) -+{ -+ struct cfs_rq *cfs_rq; -+ struct sched_entity *curr; -+ struct rq *rq = this_rq(); -+ struct rq_flags rf; -+ -+ rq_lock(rq, &rf); -+ update_rq_clock(rq); -+ -+ cfs_rq = task_cfs_rq(current); -+ curr = cfs_rq->curr; -+ if (curr) -+ update_curr(cfs_rq); -+ -+ rq_unlock(rq, &rf); -+} -+#else - static void task_fork_fair(struct task_struct *p) - { - struct cfs_rq *cfs_rq; -@@ -10755,6 +11168,7 @@ static void task_fork_fair(struct task_struct *p) - se->vruntime -= cfs_rq->min_vruntime; - rq_unlock(rq, &rf); - } -+#endif /* CONFIG_CACULE_SCHED */ - - /* - * Priority of the task has changed. Check to see if we preempt -@@ -10867,6 +11281,8 @@ static void attach_entity_cfs_rq(struct sched_entity *se) - static void detach_task_cfs_rq(struct task_struct *p) - { - struct sched_entity *se = &p->se; -+ -+#if !defined(CONFIG_CACULE_SCHED) - struct cfs_rq *cfs_rq = cfs_rq_of(se); - - if (!vruntime_normalized(p)) { -@@ -10877,6 +11293,7 @@ static void detach_task_cfs_rq(struct task_struct *p) - place_entity(cfs_rq, se, 0); - se->vruntime -= cfs_rq->min_vruntime; - } -+#endif - - detach_entity_cfs_rq(se); - } -@@ -10884,12 +11301,17 @@ static void detach_task_cfs_rq(struct task_struct *p) - static void attach_task_cfs_rq(struct task_struct *p) - { - struct sched_entity *se = &p->se; -+ -+#if !defined(CONFIG_CACULE_SCHED) - struct cfs_rq *cfs_rq = cfs_rq_of(se); -+#endif - - attach_entity_cfs_rq(se); - -+#if !defined(CONFIG_CACULE_SCHED) - if (!vruntime_normalized(p)) - se->vruntime += cfs_rq->min_vruntime; -+#endif - } - - static void switched_from_fair(struct rq *rq, struct task_struct *p) -@@ -10945,13 +11367,22 @@ static void set_next_task_fair(struct rq *rq, struct task_struct *p, bool first) - void init_cfs_rq(struct cfs_rq *cfs_rq) - { - cfs_rq->tasks_timeline = RB_ROOT_CACHED; -+ -+#if !defined(CONFIG_CACULE_SCHED) - cfs_rq->min_vruntime = (u64)(-(1LL << 20)); - #ifndef CONFIG_64BIT - cfs_rq->min_vruntime_copy = cfs_rq->min_vruntime; - #endif -+#endif /* CONFIG_CACULE_SCHED */ -+ - #ifdef CONFIG_SMP - raw_spin_lock_init(&cfs_rq->removed.lock); - #endif -+ -+#ifdef CONFIG_CACULE_SCHED -+ cfs_rq->head = NULL; -+ cfs_rq->tail = NULL; -+#endif - } - - #ifdef CONFIG_FAIR_GROUP_SCHED -diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index fac1b121d113..7d9d59cee2d2 100644 ---- a/kernel/sched/sched.h -+++ b/kernel/sched/sched.h -@@ -517,10 +517,13 @@ struct cfs_rq { - unsigned int idle_h_nr_running; /* SCHED_IDLE */ - - u64 exec_clock; -+ -+#if !defined(CONFIG_CACULE_SCHED) - u64 min_vruntime; - #ifndef CONFIG_64BIT - u64 min_vruntime_copy; - #endif -+#endif /* CONFIG_CACULE_SCHED */ - - struct rb_root_cached tasks_timeline; - -@@ -529,9 +532,15 @@ struct cfs_rq { - * It is set to NULL otherwise (i.e when none are currently running). - */ - struct sched_entity *curr; -+#ifdef CONFIG_CACULE_SCHED -+ struct cacule_node *head; -+ struct cacule_node *tail; -+ -+#else - struct sched_entity *next; - struct sched_entity *last; - struct sched_entity *skip; -+#endif // CONFIG_CACULE_SCHED - - #ifdef CONFIG_SCHED_DEBUG - unsigned int nr_spread_over; -diff --git a/kernel/sysctl.c b/kernel/sysctl.c -index b9306d2bb426..8b3c772eb458 100644 ---- a/kernel/sysctl.c -+++ b/kernel/sysctl.c -@@ -1659,6 +1659,29 @@ static struct ctl_table kern_table[] = { - .mode = 0644, - .proc_handler = proc_dointvec, - }, -+#ifdef CONFIG_CACULE_SCHED -+ { -+ .procname = "sched_interactivity_factor", -+ .data = &interactivity_factor, -+ .maxlen = sizeof(int), -+ .mode = 0644, -+ .proc_handler = proc_dointvec, -+ }, -+ { -+ .procname = "sched_interactivity_threshold", -+ .data = &interactivity_threshold, -+ .maxlen = sizeof(unsigned int), -+ .mode = 0644, -+ .proc_handler = proc_dointvec, -+ }, -+ { -+ .procname = "sched_max_lifetime_ms", -+ .data = &cacule_max_lifetime, -+ .maxlen = sizeof(int), -+ .mode = 0644, -+ .proc_handler = proc_dointvec, -+ }, -+#endif - #ifdef CONFIG_SCHED_DEBUG - { - .procname = "sched_min_granularity_ns", + + + + + + +<!DOCTYPE html> +<html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"> + <head> + <meta charset="utf-8"> + <link rel="dns-prefetch" href="https://github.githubassets.com"> + <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> + <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> + <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> + + + + <link crossorigin="anonymous" media="all" integrity="sha512-sf1Ppoo8CVx+YA47iIi2IUMYtjH17Errad0dPA+lo7DVd6VW1Mdy+TBcpD06Z6FN8MKI7TH5fpYU33+DhP25kg==" rel="stylesheet" href="https://github.githubassets.com/assets/frameworks-b1fd4fa68a3c095c7e600e3b8888b621.css" /> + <link crossorigin="anonymous" media="all" integrity="sha512-2LVpqXS9z+KrlHLZzMsvC6qnP0II4eScPyK8KYx6GCAQ/flbvb6qMDt0Bpm8/baIc9rCILWGRclwA2qLY6yNQg==" rel="stylesheet" href="https://github.githubassets.com/assets/behaviors-d8b569a974bdcfe2ab9472d9cccb2f0b.css" /> + + + + <link crossorigin="anonymous" media="all" integrity="sha512-N50Q6xl11D1w6mNDZkUhBVhZuxYaKWF+5v9HffuWBlZC5L5xIPlIASbSgCw5DofX5wj4yulh6hhZKapeuvjc7A==" rel="stylesheet" href="https://github.githubassets.com/assets/github-379d10eb1975d43d70ea634366452105.css" /> + + <script crossorigin="anonymous" defer="defer" integrity="sha512-CzeY4A6TiG4fGZSWZU8FxmzFFmcQFoPpArF0hkH0/J/S7UL4eed/LKEXMQXfTwiG5yEJBI+9BdKG8KQJNbhcIQ==" type="application/javascript" src="https://github.githubassets.com/assets/environment-0b3798e0.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-hpBaZBu8ZI84w5yC/WkJUwLtN94LNqeD8LSEq2Wwj72tXtw+lYX5bdfVO4d6acwX0RzPuZDOx60a1mqGK2pYSw==" type="application/javascript" src="https://github.githubassets.com/assets/chunk-frameworks-86905a64.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-yakjM7b2IGtqO51Ujy99D+xFW4sBud72051Q569rNIrcKwPuO7bjJfmfBVvUGTQlvn9PHHxmlwcGC2dx3eKKbA==" type="application/javascript" src="https://github.githubassets.com/assets/chunk-vendor-c9a92333.js"></script> + + <script crossorigin="anonymous" defer="defer" integrity="sha512-7sHLSdErxvBmD4WOjRh+BgPpVz950bby/QtjdCdke+Ibo81kWcVwPKaNeNS5hkY4rnoITK9x5Yx4Jl0ph2RMcg==" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-eec1cb49.js"></script> + + <script crossorigin="anonymous" defer="defer" integrity="sha512-tjuNQcwhEIXGvVIG4XM/Aj4z+Od+NBRkbgWNwEMjGL3nsnAmdoBdbzsn/WTvl3hk+TPt1D0BvBLHLBPgiwvT2w==" type="application/javascript" data-module-id="./chunk-animate-on-scroll.js" data-src="https://github.githubassets.com/assets/chunk-animate-on-scroll-b63b8d41.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-+BKEtK9JkmJ52jKSoX6+SBrGV6kJxB8J/iAPkFQ/oeq8YekNcz7IZlJgM5Tddyx1RrkL3+sdG0tAy3YuFbYqfA==" type="application/javascript" data-module-id="./chunk-codemirror.js" data-src="https://github.githubassets.com/assets/chunk-codemirror-f81284b4.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-EKOvqJ9uTatAt87WxU+OSS4mi7gMUszFbGo4aPErQkjpWLXnrPSeZvK5ngU8OYoIoiVOq+v8dA3C6MF/z2d/kA==" type="application/javascript" data-module-id="./chunk-color-modes.js" data-src="https://github.githubassets.com/assets/chunk-color-modes-10a3afa8.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-zkYZSjUFqSifB+Lt76jclFMrfqpcPqevT801RZcoBNCZHRTBKcFrW9OyJoPOzKFv+fZVDRnqdqGsuIv5KOIgZg==" type="application/javascript" data-module-id="./chunk-contributions-spider-graph.js" data-src="https://github.githubassets.com/assets/chunk-contributions-spider-graph-ce46194a.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-6j/oSF+kbW+yetNPvI684VzAu9pzug6Vj2h+3u1LdCuRhR4jnuiHZfeQKls3nxcT/S3H+oIt7FtigE/aeoj+gg==" type="application/javascript" data-module-id="./chunk-drag-drop.js" data-src="https://github.githubassets.com/assets/chunk-drag-drop-ea3fe848.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-VSSd+Yzi2iMS+pibY6hD/WdypxAEdob5F2RMKxuKcAHS2EpFYJPeTXoVxt0NXg03tfj2dka2mEtHS+vjpYSaDw==" type="application/javascript" data-module-id="./chunk-edit-hook-secret-element.js" data-src="https://github.githubassets.com/assets/chunk-edit-hook-secret-element-55249df9.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-N+ziqJjVMfWiqeVHdayDHpNRlG5HsF+cgV+pFnMDoTJuvBzgw+ndsepe4NcKAxIS3WMvzMaQcYmd2vrIaoAJVg==" type="application/javascript" data-module-id="./chunk-edit.js" data-src="https://github.githubassets.com/assets/chunk-edit-37ece2a8.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-aiqMIGGZGo8AQMjcoImKPMTsZVVRl6htCSY7BpRmpGPG/AF+Wq+P/Oj/dthWQOIk9cCNMPEas7O2zAR6oqn0tA==" type="application/javascript" data-module-id="./chunk-emoji-picker-element.js" data-src="https://github.githubassets.com/assets/chunk-emoji-picker-element-6a2a8c20.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-7o8WoXZcP71e0YBbF1az3Rj9iGr3Irk3kb7Yq1/ZQETySta8pQLfupQJ7yiswg+sN1HTqszDMbp1vcPHFgp7gw==" type="application/javascript" data-module-id="./chunk-filter-input.js" data-src="https://github.githubassets.com/assets/chunk-filter-input-ee8f16a1.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-XwuQdORq1W9Z+a/i72pH+NfR1rhwlGdxIlaIBbTciscGc/+McxMNLixGBp8e6Td4W1zzHvQ1Jyryl5gUfEr76g==" type="application/javascript" data-module-id="./chunk-insights-graph.js" data-src="https://github.githubassets.com/assets/chunk-insights-graph-5f0b9074.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-Y+VVFzGHo9J5bf4Mrn+RGrh1+IExdybA3C1QqPha3UwkV9RZ75jZgV4DsujViAF0iT9OrLYYHvPk9V6QiXjp3g==" type="application/javascript" data-module-id="./chunk-invitations.js" data-src="https://github.githubassets.com/assets/chunk-invitations-63e55517.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-mMOvER8Uml4WMYbXv8BaahVq9eF1v5Hu7M9/3oPlOFPmTJGH+TmvcRPt8fddj86urb+Ri+vlqotFspA/4STDsQ==" type="application/javascript" data-module-id="./chunk-jump-to.js" data-src="https://github.githubassets.com/assets/chunk-jump-to-98c3af11.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-supZkxo+OPYLNtLXxI+e1dkCqVySu4FOWX1fiVVFs2ZggygppNsEz4F9wVp4YtH2TjFsZW8r/75uDUhPneO2sA==" type="application/javascript" data-module-id="./chunk-notification-list-focus.js" data-src="https://github.githubassets.com/assets/chunk-notification-list-focus-b2ea5993.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-ma0OOy3nj0c1cqBx0BkcmIFsLqcSZ+MIukQxyEFM/OWTzZpG+QMgOoWPAHZz43M6fyjAUG1jH6c/6LPiiKPCyw==" type="application/javascript" data-module-id="./chunk-profile-pins-element.js" data-src="https://github.githubassets.com/assets/chunk-profile-pins-element-99ad0e3b.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-zh+tYYvd4W00us1O4PkhmKsl/CzInIyrdoMqV2xqC7XPu06UEHfEMJfOiwidJ5f80SwrdGWogWFuJzLHwRbRgA==" type="application/javascript" data-module-id="./chunk-ref-selector.js" data-src="https://github.githubassets.com/assets/chunk-ref-selector-ce1fad61.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-Zii9oRdZ6q2QDNjL5A+me7jwJjMLvs1NiQNHmajUZnn4t9shcBDb4F8l/PQZW26eYfe5065oM7lIOSmbMinA7Q==" type="application/javascript" data-module-id="./chunk-responsive-underlinenav.js" data-src="https://github.githubassets.com/assets/chunk-responsive-underlinenav-6628bda1.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-9WNXtB07IyWypiPmkuucspwog4mme9q5GKGMSgd7FI0DPimmg/pEw+aaAofFV1vuWMt9I8H5QpsVtlbHGg1YBA==" type="application/javascript" data-module-id="./chunk-runner-groups.js" data-src="https://github.githubassets.com/assets/chunk-runner-groups-f56357b4.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-fIq9Mn7jY/bHQXnsmh+VejpDnaO+d/FDxsp+4CuZtdNLrLuO+dQCjh+m6Yd8GCYD2Cy6DWbCEyM+mH2dkB2H9A==" type="application/javascript" data-module-id="./chunk-sortable-behavior.js" data-src="https://github.githubassets.com/assets/chunk-sortable-behavior-7c8abd32.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-WK8VXw3lfUQ/VRW0zlgKPhcMUqH0uTnB/KzePUPdZhCm/HpxfXXHKTGvj5C0Oex7+zbIM2ECzULbtTCT4ug3yg==" type="application/javascript" data-module-id="./chunk-toast.js" data-src="https://github.githubassets.com/assets/chunk-toast-58af155f.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-vgHJEmEJxNmHucGbVY8bEUoOYo5/ZwpQ69rU8Dld89daWJ54uad9lNptxq32F8pnbHhdngw9lohNEbMbjmj5AQ==" type="application/javascript" data-module-id="./chunk-tweetsodium.js" data-src="https://github.githubassets.com/assets/chunk-tweetsodium-be01c912.js"></script> + <script crossorigin="anonymous" defer="defer" integrity="sha512-aSxfTHAZj9wv7n08DxgAKkNg7jhiTo4yKKbDqLGxcDxUk/al571Y2ZSsOmLJ0Vh8cuAL8tW+JgX1t0JeKfyfaA==" type="application/javascript" data-module-id="./chunk-user-status-submit.js" data-src="https://github.githubassets.com/assets/chunk-user-status-submit-692c5f4c.js"></script> + + <script crossorigin="anonymous" defer="defer" integrity="sha512-/8DIYpYCJFF0xg5QFDVdVJdBQfagC8hDC0Bi5TnoOpswGkZt/Byv4P8wmMYm3r4m6eB8WzeGngZvzA30b8kxiw==" type="application/javascript" src="https://github.githubassets.com/assets/repositories-ffc0c862.js"></script> +<script crossorigin="anonymous" defer="defer" integrity="sha512-Pys3rKYv3EaZzoJva7EwZEs3F5PFdG9Thh6xqUyTJ9vOMg21/X4hIct7fcWUf7kVx3fywJ1oU35nHjKChtK9Cw==" type="application/javascript" src="https://github.githubassets.com/assets/diffs-3f2b37ac.js"></script> + + <meta name="viewport" content="width=device-width"> + + <title>cacule-cpu-scheduler/cacule-5.10.patch at master · hamadmarri/cacule-cpu-scheduler · GitHub</title> + <meta name="description" content="The CacULE CPU scheduler is based on interactivity score mechanism. The interactivity score is inspired by the ULE scheduler (FreeBSD scheduler). - hamadmarri/cacule-cpu-scheduler"> + <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> + <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> + <meta property="fb:app_id" content="1401488693436528"> + <meta name="apple-itunes-app" content="app-id=1477376905" /> + <meta name="twitter:image:src" content="https://opengraph.githubassets.com/abcef74adaf9bf53e46eaacbb3c0c2d95d3ded9558a45966f09d115a32291f01/hamadmarri/cacule-cpu-scheduler" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="hamadmarri/cacule-cpu-scheduler" /><meta name="twitter:description" content="The CacULE CPU scheduler is based on interactivity score mechanism. The interactivity score is inspired by the ULE scheduler (FreeBSD scheduler). - hamadmarri/cacule-cpu-scheduler" /> + <meta property="og:image" content="https://opengraph.githubassets.com/abcef74adaf9bf53e46eaacbb3c0c2d95d3ded9558a45966f09d115a32291f01/hamadmarri/cacule-cpu-scheduler" /><meta property="og:image:alt" content="The CacULE CPU scheduler is based on interactivity score mechanism. The interactivity score is inspired by the ULE scheduler (FreeBSD scheduler). - hamadmarri/cacule-cpu-scheduler" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="hamadmarri/cacule-cpu-scheduler" /><meta property="og:url" content="https://github.com/hamadmarri/cacule-cpu-scheduler" /><meta property="og:description" content="The CacULE CPU scheduler is based on interactivity score mechanism. The interactivity score is inspired by the ULE scheduler (FreeBSD scheduler). - hamadmarri/cacule-cpu-scheduler" /> + + + + + + <link rel="assets" href="https://github.githubassets.com/"> + + + <meta name="request-id" content="EC68:342A:119F183:12336D3:609533EE" data-pjax-transient="true"/><meta name="html-safe-nonce" content="ab278b88563907af5729a7795ee6e902323a6fabc587c539180aa80ff7a6a043" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFQzY4OjM0MkE6MTE5RjE4MzoxMjMzNkQzOjYwOTUzM0VFIiwidmlzaXRvcl9pZCI6IjE3ODgyOTE2NDc3MTA1MDgwMTQiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="bf532db18d4d14ee8d469a338067430a2d9a614057b90427a4fb8d43f9cde5de" data-pjax-transient="true"/> + + <meta name="hovercard-subject-tag" content="repository:282162283" data-pjax-transient> + + + <meta name="github-keyboard-shortcuts" content="repository,source-code" data-pjax-transient="true" /> + + + + <meta name="selected-link" value="repo_source" data-pjax-transient> + + <meta name="google-site-verification" content="c1kuD-K2HIVF635lypcsWPoD4kilo5-jA_wBFyT4uMY"> + <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU"> + <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA"> + <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc"> + + <meta name="octolytics-host" content="collector.githubapp.com" /><meta name="octolytics-app-id" content="github" /><meta name="octolytics-event-url" content="https://collector.githubapp.com/github-external/browser_event" /> + + <meta name="analytics-location" content="/<user-name>/<repo-name>/blob/show" data-pjax-transient="true" /> + + + + + + <meta name="optimizely-datafile" content="{"version": "4", "rollouts": [], "typedAudiences": [], "anonymizeIP": true, "projectId": "16737760170", "variables": [], "featureFlags": [], "experiments": [{"status": "Running", "audienceIds": [], "variations": [{"variables": [], "id": "20106410318", "key": "en"}, {"variables": [], "id": "20122000362", "key": "ko"}], "id": "20121990335", "key": "ko_homepage_translation", "layerId": "20100420349", "trafficAllocation": [{"entityId": "20106410318", "endOfRange": 5000}, {"entityId": "20122000362", "endOfRange": 10000}], "forcedVariations": {}}, {"status": "Running", "audienceIds": [], "variations": [{"variables": [], "id": "20236992340", "key": "usd"}, {"variables": [], "id": "20184442182", "key": "localized_currency"}], "id": "20233233507", "key": "local_currency_pricing", "layerId": "20212472765", "trafficAllocation": [{"entityId": "20184442182", "endOfRange": 5000}, {"entityId": "20236992340", "endOfRange": 10000}], "forcedVariations": {"667685045.1617740930": "localized_currency"}}], "audiences": [{"conditions": "[\"or\", {\"match\": \"exact\", \"name\": \"$opt_dummy_attribute\", \"type\": \"custom_attribute\", \"value\": \"$opt_dummy_value\"}]", "id": "$opt_dummy_audience", "name": "Optimizely-Generated Audience for Backwards Compatibility"}], "groups": [], "attributes": [{"id": "16822470375", "key": "user_id"}, {"id": "17143601254", "key": "spammy"}, {"id": "18175660309", "key": "organization_plan"}, {"id": "18813001570", "key": "is_logged_in"}, {"id": "19073851829", "key": "geo"}, {"id": "20175462351", "key": "requestedCurrency"}], "botFiltering": false, "accountId": "16737760170", "events": [{"experimentIds": [], "id": "17911811441", "key": "hydro_click.dashboard.teacher_toolbox_cta"}, {"experimentIds": [], "id": "18124116703", "key": "submit.organizations.complete_sign_up"}, {"experimentIds": [], "id": "18145892387", "key": "no_metric.tracked_outside_of_optimizely"}, {"experimentIds": [], "id": "18178755568", "key": "click.org_onboarding_checklist.add_repo"}, {"experimentIds": [], "id": "18180553241", "key": "submit.repository_imports.create"}, {"experimentIds": [], "id": "18186103728", "key": "click.help.learn_more_about_repository_creation"}, {"experimentIds": [], "id": "18188530140", "key": "test_event.do_not_use_in_production"}, {"experimentIds": [], "id": "18191963644", "key": "click.empty_org_repo_cta.transfer_repository"}, {"experimentIds": [], "id": "18195612788", "key": "click.empty_org_repo_cta.import_repository"}, {"experimentIds": [], "id": "18210945499", "key": "click.org_onboarding_checklist.invite_members"}, {"experimentIds": [], "id": "18211063248", "key": "click.empty_org_repo_cta.create_repository"}, {"experimentIds": [], "id": "18215721889", "key": "click.org_onboarding_checklist.update_profile"}, {"experimentIds": [], "id": "18224360785", "key": "click.org_onboarding_checklist.dismiss"}, {"experimentIds": [], "id": "18234832286", "key": "submit.organization_activation.complete"}, {"experimentIds": [], "id": "18252392383", "key": "submit.org_repository.create"}, {"experimentIds": [], "id": "18257551537", "key": "submit.org_member_invitation.create"}, {"experimentIds": [], "id": "18259522260", "key": "submit.organization_profile.update"}, {"experimentIds": [], "id": "18564603625", "key": "view.classroom_select_organization"}, {"experimentIds": [], "id": "18568612016", "key": "click.classroom_sign_in_click"}, {"experimentIds": [], "id": "18572592540", "key": "view.classroom_name"}, {"experimentIds": [], "id": "18574203855", "key": "click.classroom_create_organization"}, {"experimentIds": [], "id": "18582053415", "key": "click.classroom_select_organization"}, {"experimentIds": [], "id": "18589463420", "key": "click.classroom_create_classroom"}, {"experimentIds": [], "id": "18591323364", "key": "click.classroom_create_first_classroom"}, {"experimentIds": [], "id": "18591652321", "key": "click.classroom_grant_access"}, {"experimentIds": [], "id": "18607131425", "key": "view.classroom_creation"}, {"experimentIds": [], "id": "18831680583", "key": "upgrade_account_plan"}, {"experimentIds": [], "id": "19064064515", "key": "click.signup"}, {"experimentIds": [], "id": "19075373687", "key": "click.view_account_billing_page"}, {"experimentIds": [], "id": "19077355841", "key": "click.dismiss_signup_prompt"}, {"experimentIds": [], "id": "19079713938", "key": "click.contact_sales"}, {"experimentIds": [], "id": "19120963070", "key": "click.compare_account_plans"}, {"experimentIds": ["20233233507"], "id": "19151690317", "key": "click.upgrade_account_cta"}, {"experimentIds": [], "id": "19424193129", "key": "click.open_account_switcher"}, {"experimentIds": [], "id": "19520330825", "key": "click.visit_account_profile"}, {"experimentIds": [], "id": "19540970635", "key": "click.switch_account_context"}, {"experimentIds": ["20121990335"], "id": "19730198868", "key": "submit.homepage_signup"}, {"experimentIds": ["20121990335"], "id": "19820830627", "key": "click.homepage_signup"}, {"experimentIds": [], "id": "19988571001", "key": "click.create_enterprise_trial"}, {"experimentIds": ["20233233507"], "id": "20036538294", "key": "click.create_organization_team"}, {"experimentIds": [], "id": "20040653299", "key": "click.input_enterprise_trial_form"}, {"experimentIds": ["20233233507"], "id": "20062030003", "key": "click.continue_with_team"}, {"experimentIds": [], "id": "20068947153", "key": "click.create_organization_free"}, {"experimentIds": [], "id": "20086636658", "key": "click.signup_continue.username"}, {"experimentIds": [], "id": "20091648988", "key": "click.signup_continue.create_account"}, {"experimentIds": [], "id": "20103637615", "key": "click.signup_continue.email"}, {"experimentIds": [], "id": "20111574253", "key": "click.signup_continue.password"}, {"experimentIds": ["20233233507"], "id": "20120044111", "key": "view.pricing_page"}, {"experimentIds": ["20121990335", "20233233507"], "id": "20152062109", "key": "submit.create_account"}, {"experimentIds": ["20233233507"], "id": "20165800992", "key": "submit.upgrade_payment_form"}, {"experimentIds": ["20233233507"], "id": "20171520319", "key": "submit.create_organization"}, {"experimentIds": [], "id": "20227443657", "key": "submit.verify_primary_user_email"}], "revision": "657"}" /> + <!-- To prevent page flashing, the optimizely JS needs to be loaded in the + <head> tag before the DOM renders --> + <script crossorigin="anonymous" defer="defer" integrity="sha512-iCkknYkfhfX5AL85QP1h4McLyzQ6On/gB7DDFkRchozeHyXKOTtsa6E1yCkQyQQIKDb4522VwMY7I3H1SWVzlg==" type="application/javascript" src="https://github.githubassets.com/assets/optimizely-8829249d.js"></script> + + + + + + <meta name="hostname" content="github.com"> + <meta name="user-login" content=""> + + + <meta name="expected-hostname" content="github.com"> + + + <meta name="enabled-features" content="MARKETPLACE_PENDING_INSTALLATIONS,AUTOCOMPLETE_EMOJIS_IN_MARKDOWN_EDITOR,ACTIONS_CONCURRENCY_UI"> + + <meta http-equiv="x-pjax-version" content="b2b363d131e32f31414adaf2ac305062484fcb1127e71ed230871aea74796953"> + + + + <meta name="go-import" content="github.com/hamadmarri/cacule-cpu-scheduler git https://github.com/hamadmarri/cacule-cpu-scheduler.git"> + + <meta name="octolytics-dimension-user_id" content="3954563" /><meta name="octolytics-dimension-user_login" content="hamadmarri" /><meta name="octolytics-dimension-repository_id" content="282162283" /><meta name="octolytics-dimension-repository_nwo" content="hamadmarri/cacule-cpu-scheduler" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="282162283" /><meta name="octolytics-dimension-repository_network_root_nwo" content="hamadmarri/cacule-cpu-scheduler" /> + + + + <link rel="canonical" href="https://github.com/hamadmarri/cacule-cpu-scheduler/blob/master/patches/CacULE/v5.10/cacule-5.10.patch" data-pjax-transient> + + + <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> + + <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> + + <meta name="browser-optimizely-client-errors-url" content="https://api.github.com/_private/browser/optimizely_client/errors"> + + <link rel="mask-icon" href="https://github.githubassets.com/pinned-octocat.svg" color="#000000"> + <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> + <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg"> + +<meta name="theme-color" content="#1e2327"> +<meta name="color-scheme" content="light dark" /> + + + <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> + +<meta name="enabled-homepage-translation-languages" content="ko"> + + </head> + + <body class="logged-out env-production page-responsive page-blob" style="word-wrap: break-word;"> + + + <div class="position-relative js-header-wrapper "> + <a href="#start-of-content" class="px-2 py-4 color-bg-info-inverse color-text-white show-on-focus js-skip-to-content">Skip to content</a> + <span class="progress-pjax-loader width-full js-pjax-loader-bar Progress position-fixed"> + <span style="background-color: #79b8ff;width: 0%;" class="Progress-item progress-pjax-loader-bar "></span> +</span> + + + + <header class="Header-old header-logged-out js-details-container Details position-relative f4 py-2" role="banner"> + <div class="container-xl d-lg-flex flex-items-center p-responsive"> + <div class="d-flex flex-justify-between flex-items-center"> + <a class="mr-4" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark"> + <svg height="32" class="octicon octicon-mark-github color-text-white" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> + </a> + + <div class="d-lg-none css-truncate css-truncate-target width-fit p-2"> + + + </div> + + <div class="d-flex flex-items-center"> + <nux-signup-candidates + data-attribute-name="href" + data-candidate-url="/join_next?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&source=header-repo" + data-action="loaded:nux-signup-candidates#determineSignupAction" + + > + <a href="/join?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&source=header-repo" + class="d-inline-block d-lg-none f5 color-text-white no-underline border color-border-tertiary rounded-2 px-2 py-1 mr-3 mr-sm-5" + data-target="nux-signup-candidates.signupAction" + data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/hamadmarri/cacule-cpu-scheduler/blob/master/patches/CacULE/v5.10/cacule-5.10.patch","user_id":null}}" data-hydro-click-hmac="ed1fd134eb031dcf59df03875f60aa0bf950ada8a5b4cc944375c2f24ec05017" + > + Sign up + </a> + </nux-signup-candidates> + + <button class="btn-link d-lg-none mt-1 js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false"> + <svg height="24" class="octicon octicon-three-bars color-text-white" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"></path></svg> + </button> + </div> + </div> + + <div class="HeaderMenu HeaderMenu--logged-out position-fixed top-0 right-0 bottom-0 height-fit position-lg-relative d-lg-flex flex-justify-between flex-items-center flex-auto"> + <div class="d-flex d-lg-none flex-justify-end border-bottom color-bg-secondary p-3"> + <button class="btn-link js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false"> + <svg height="24" class="octicon octicon-x color-text-secondary" viewBox="0 0 24 24" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M5.72 5.72a.75.75 0 011.06 0L12 10.94l5.22-5.22a.75.75 0 111.06 1.06L13.06 12l5.22 5.22a.75.75 0 11-1.06 1.06L12 13.06l-5.22 5.22a.75.75 0 01-1.06-1.06L10.94 12 5.72 6.78a.75.75 0 010-1.06z"></path></svg> + </button> + </div> + + <nav class="mt-0 px-3 px-lg-0 mb-5 mb-lg-0" aria-label="Global"> + <ul class="d-lg-flex list-style-none"> + <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center "> + <details class="HeaderMenu-details details-overlay details-reset width-full"> + <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block"> + Why GitHub? + <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative"> + <path d="M1,1l6.2,6L13,1"></path> + </svg> + </summary> + <div class="dropdown-menu flex-auto rounded px-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4"> + <a href="/features" class="py-2 lh-condensed-ultra d-block Link--primary no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Features">Features <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a> + <ul class="list-style-none f5 pb-3"> + <li class="edge-item-fix"><a href="/mobile" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Mobile <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="/features/actions" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Actions <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="/features/codespaces" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Codespaces <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="/features/packages" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Packages <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="/features/security" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Security <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="/features/code-review/" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Code review <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="/features/project-management/" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Project management <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="/features/integrations" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Integrations <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + </ul> + + <ul class="list-style-none mb-0 border-lg-top pt-lg-3"> + <li class="edge-item-fix"><a href="/sponsors" class="py-2 lh-condensed-ultra d-block no-underline Link--primary no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Sponsors">GitHub Sponsors <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="/customer-stories" class="py-2 lh-condensed-ultra d-block no-underline Link--primary no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Customer stories">Customer stories<span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + </ul> + </div> + </details> + </li> + <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3"> + <a href="/team" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Team">Team</a> + </li> + <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3"> + <a href="/enterprise" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Enterprise">Enterprise</a> + </li> + + <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center "> + <details class="HeaderMenu-details details-overlay details-reset width-full"> + <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block"> + Explore + <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative"> + <path d="M1,1l6.2,6L13,1"></path> + </svg> + </summary> + + <div class="dropdown-menu flex-auto rounded px-0 pt-2 pb-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4"> + <ul class="list-style-none mb-3"> + <li class="edge-item-fix"><a href="/explore" class="py-2 lh-condensed-ultra d-block Link--primary no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Explore">Explore GitHub <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + </ul> + + <h4 class="color-text-tertiary text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Learn and contribute</h4> + <ul class="list-style-none mb-3"> + <li class="edge-item-fix"><a href="/topics" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Topics">Topics <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="/collections" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Collections">Collections <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="/trending" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Trending">Trending <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="https://lab.github.com/" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Learning lab">Learning Lab <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="https://opensource.guide" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Open source guides">Open source guides <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + </ul> + + <h4 class="color-text-tertiary text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Connect with others</h4> + <ul class="list-style-none mb-0"> + <li class="edge-item-fix"><a href="https://github.com/readme" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">The ReadME Project <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="https://github.com/events" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Events">Events <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="https://github.community" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Community forum">Community forum <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to GitHub Education">GitHub Education <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="https://stars.github.com" class="py-2 pb-0 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to GitHub Stars Program">GitHub Stars program <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + </ul> + </div> + </details> + </li> + + <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3"> + <a href="/marketplace" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Marketplace">Marketplace</a> + </li> + + <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center "> + <details class="HeaderMenu-details details-overlay details-reset width-full"> + <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block"> + Pricing + <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative"> + <path d="M1,1l6.2,6L13,1"></path> + </svg> + </summary> + + <div class="dropdown-menu flex-auto rounded px-0 pt-2 pb-4 mt-0 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4"> + <a href="/pricing" class="pb-2 lh-condensed-ultra d-block Link--primary no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Pricing">Plans <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a> + + <ul class="list-style-none mb-3"> + <li class="edge-item-fix"><a href="/pricing#feature-comparison" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Compare plans">Compare plans <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + <li class="edge-item-fix"><a href="https://enterprise.github.com/contact" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Contact Sales">Contact Sales <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + </ul> + + <ul class="list-style-none mb-0 border-lg-top pt-lg-3"> + <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 pb-0 lh-condensed-ultra d-block no-underline Link--primary no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Education">Education <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">→</span></a></li> + </ul> + </div> + </details> + </li> + </ul> + </nav> + + <div class="d-lg-flex flex-items-center px-3 px-lg-0 text-center text-lg-left"> + <div class="d-lg-flex min-width-0 mb-3 mb-lg-0"> + <div class="header-search flex-auto js-site-search position-relative flex-self-stretch flex-md-self-auto mb-3 mb-md-0 mr-0 mr-md-3 scoped-search site-scoped-search js-jump-to" + role="combobox" + aria-owns="jump-to-results" + aria-label="Search or jump to" + aria-haspopup="listbox" + aria-expanded="false" +> + <div class="position-relative"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" role="search" aria-label="Site" data-scope-type="Repository" data-scope-id="282162283" data-scoped-search-url="/hamadmarri/cacule-cpu-scheduler/search" data-owner-scoped-search-url="/users/hamadmarri/search" data-unscoped-search-url="/search" action="/hamadmarri/cacule-cpu-scheduler/search" accept-charset="UTF-8" method="get"> + <label class="form-control input-sm header-search-wrapper p-0 js-chromeless-input-container header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center"> + <input type="text" + class="form-control input-sm header-search-input jump-to-field js-jump-to-field js-site-search-focus js-site-search-field is-clearable" + data-hotkey="s,/" + name="q" + value="" + placeholder="Search" + data-unscoped-placeholder="Search GitHub" + data-scoped-placeholder="Search" + autocapitalize="off" + aria-autocomplete="list" + aria-controls="jump-to-results" + aria-label="Search" + data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" + spellcheck="false" + autocomplete="off" + > + <input type="hidden" data-csrf="true" class="js-data-jump-to-suggestions-path-csrf" value="2p8dSdDRKw0s0wXu92+Re/nseEiFbNX2vumUgcKyALyDbR8DbesjcoRCZSwYEDvyhr4jdd1OdK7XHgfVDVtO1Q==" /> + <input type="hidden" class="js-site-search-type-field" name="type" > + <img src="https://github.githubassets.com/images/search-key-slash.svg" alt="" class="mr-2 header-search-key-slash"> + + <div class="Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container"> + +<ul class="d-none js-jump-to-suggestions-template-container"> + + +<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion" role="option"> + <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="suggestion"> + <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none"> + <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg> + <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg> + <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg> + </div> + + <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28"> + + <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"> + </div> + + <div class="border rounded-1 flex-shrink-0 color-bg-tertiary px-1 color-text-tertiary ml-1 f6 d-none js-jump-to-badge-search"> + <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository"> + In this repository + </span> + <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub"> + All GitHub + </span> + <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + + <div aria-hidden="true" class="border rounded-1 flex-shrink-0 color-bg-tertiary px-1 color-text-tertiary ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump"> + Jump to + <span class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + </a> +</li> + +</ul> + +<ul class="d-none js-jump-to-no-results-template-container"> + <li class="d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2"> + <span class="color-text-secondary">No suggested jump to results</span> + </li> +</ul> + +<ul id="jump-to-results" role="listbox" class="p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container"> + + +<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none" role="option"> + <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="scoped_search"> + <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none"> + <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg> + <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg> + <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg> + </div> + + <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28"> + + <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"> + </div> + + <div class="border rounded-1 flex-shrink-0 color-bg-tertiary px-1 color-text-tertiary ml-1 f6 d-none js-jump-to-badge-search"> + <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository"> + In this repository + </span> + <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub"> + All GitHub + </span> + <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + + <div aria-hidden="true" class="border rounded-1 flex-shrink-0 color-bg-tertiary px-1 color-text-tertiary ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump"> + Jump to + <span class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + </a> +</li> + + + +<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-owner-scoped-search d-none" role="option"> + <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="owner_scoped_search"> + <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none"> + <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg> + <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg> + <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg> + </div> + + <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28"> + + <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"> + </div> + + <div class="border rounded-1 flex-shrink-0 color-bg-tertiary px-1 color-text-tertiary ml-1 f6 d-none js-jump-to-badge-search"> + <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this user"> + In this user + </span> + <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub"> + All GitHub + </span> + <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + + <div aria-hidden="true" class="border rounded-1 flex-shrink-0 color-bg-tertiary px-1 color-text-tertiary ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump"> + Jump to + <span class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + </a> +</li> + + + +<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none" role="option"> + <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="global_search"> + <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none"> + <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg> + <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg> + <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg> + </div> + + <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28"> + + <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"> + </div> + + <div class="border rounded-1 flex-shrink-0 color-bg-tertiary px-1 color-text-tertiary ml-1 f6 d-none js-jump-to-badge-search"> + <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository"> + In this repository + </span> + <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub"> + All GitHub + </span> + <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + + <div aria-hidden="true" class="border rounded-1 flex-shrink-0 color-bg-tertiary px-1 color-text-tertiary ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump"> + Jump to + <span class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + </a> +</li> + + +</ul> + + </div> + </label> +</form> </div> +</div> + + </div> + + <a href="/login?return_to=%2Fhamadmarri%2Fcacule-cpu-scheduler%2Fblob%2Fmaster%2Fpatches%2FCacULE%2Fv5.10%2Fcacule-5.10.patch" + class="HeaderMenu-link flex-shrink-0 no-underline mr-3" + data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/hamadmarri/cacule-cpu-scheduler/blob/master/patches/CacULE/v5.10/cacule-5.10.patch","user_id":null}}" data-hydro-click-hmac="56ff55d7dbff6785edafb3630621f83b857681c69c2c60c4079d72c0efcb8439" + data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in"> + Sign in + </a> + <nux-signup-candidates + data-attribute-name="href" + data-candidate-url="/join_next?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&source=header-repo&source_repo=hamadmarri%2Fcacule-cpu-scheduler" + data-action="loaded:nux-signup-candidates#determineSignupAction" + + > + <a href="/join?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&source=header-repo&source_repo=hamadmarri%2Fcacule-cpu-scheduler" + class="HeaderMenu-link flex-shrink-0 d-inline-block no-underline border color-border-tertiary rounded px-2 py-1" + data-target="nux-signup-candidates.signupAction" + data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/hamadmarri/cacule-cpu-scheduler/blob/master/patches/CacULE/v5.10/cacule-5.10.patch","user_id":null}}" data-hydro-click-hmac="56ff55d7dbff6785edafb3630621f83b857681c69c2c60c4079d72c0efcb8439" + data-hydro-click="{"event_type":"analytics.event","payload":{"category":"Sign up","action":"click to sign up for account","label":"ref_page:/<user-name>/<repo-name>/blob/show;ref_cta:Sign up;ref_loc:header logged out","originating_url":"https://github.com/hamadmarri/cacule-cpu-scheduler/blob/master/patches/CacULE/v5.10/cacule-5.10.patch","user_id":null}}" data-hydro-click-hmac="6c9a12aeb0b17f0599a896c1f8174516e22a8c23255477cd16dd7ea2ac5c6cfd" + > + Sign up + </a> + </nux-signup-candidates> + </div> + </div> + </div> +</header> + + </div> + + <div id="start-of-content" class="show-on-focus"></div> + + + + + + <div data-pjax-replace id="js-flash-container"> + + + <template class="js-flash-template"> + <div class="flash flash-full {{ className }}"> + <div class=" px-2" > + <button class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> + <svg class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg> + </button> + + <div>{{ message }}</div> + + </div> +</div> + </template> +</div> + + + + + <include-fragment class="js-notification-shelf-include-fragment" data-base-src="https://github.com/notifications/beta/shelf"></include-fragment> + + + + + <div + class="application-main " + data-commit-hovercards-enabled + data-discussion-hovercards-enabled + data-issue-and-pr-hovercards-enabled + > + <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> + <main id="js-repo-pjax-container" data-pjax-container > + + + + + + + + + + + <div class="color-bg-secondary pt-3 hide-full-screen mb-5"> + + <div class="d-flex mb-3 px-3 px-md-4 px-lg-5"> + + <div class="flex-auto min-width-0 width-fit mr-3"> + <h1 class=" d-flex flex-wrap flex-items-center break-word f3 text-normal"> + <svg class="octicon octicon-repo color-text-secondary mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg> + <span class="author flex-self-stretch" itemprop="author"> + <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/hamadmarri/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/hamadmarri">hamadmarri</a> + </span> + <span class="mx-1 flex-self-stretch color-text-secondary">/</span> + <strong itemprop="name" class="mr-2 flex-self-stretch"> + <a data-pjax="#js-repo-pjax-container" href="/hamadmarri/cacule-cpu-scheduler">cacule-cpu-scheduler</a> + </strong> + +</h1> + + + </div> + + <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;"> + + <li> + <a class="tooltipped tooltipped-s btn btn-sm" aria-label="You must be signed in to change notification settings" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"notification subscription menu watch","repository_id":null,"auth_type":"LOG_IN","originating_url":"https://github.com/hamadmarri/cacule-cpu-scheduler/blob/master/patches/CacULE/v5.10/cacule-5.10.patch","user_id":null}}" data-hydro-click-hmac="bc8c3d47e2418472c0a1bde055e19298ac1836aa1e933d88ca2da0e8273c3aa9" href="/login?return_to=%2Fhamadmarri%2Fcacule-cpu-scheduler"> + <svg class="octicon octicon-bell" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path d="M8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path><path fill-rule="evenodd" d="M8 1.5A3.5 3.5 0 004.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01l.001.006c0 .002.002.004.004.006a.017.017 0 00.006.004l.007.001h10.964l.007-.001a.016.016 0 00.006-.004.016.016 0 00.004-.006l.001-.007a.017.017 0 00-.003-.01l-1.703-2.554a1.75 1.75 0 01-.294-.97V5A3.5 3.5 0 008 1.5zM3 5a5 5 0 0110 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.518 1.518 0 0113.482 13H2.518a1.518 1.518 0 01-1.263-2.36l1.703-2.554A.25.25 0 003 7.947V5z"></path></svg> + Notifications +</a> + </li> + + <li> + <a class="btn btn-sm btn-with-count tooltipped tooltipped-s" aria-label="You must be signed in to star a repository" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"star button","repository_id":282162283,"auth_type":"LOG_IN","originating_url":"https://github.com/hamadmarri/cacule-cpu-scheduler/blob/master/patches/CacULE/v5.10/cacule-5.10.patch","user_id":null}}" data-hydro-click-hmac="6379610652b6bfabef232de749cf2181863650b8976253191c0bff2bb7166084" href="/login?return_to=%2Fhamadmarri%2Fcacule-cpu-scheduler"> + <svg class="octicon octicon-star v-align-text-bottom mr-1" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path></svg> + <span> + Star +</span></a> + <a class="social-count js-social-count" href="/hamadmarri/cacule-cpu-scheduler/stargazers" + aria-label="199 users starred this repository"> + 199 + </a> + + </li> + + <li> + <a class="btn btn-sm btn-with-count tooltipped tooltipped-s" aria-label="You must be signed in to fork a repository" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"repo details fork button","repository_id":282162283,"auth_type":"LOG_IN","originating_url":"https://github.com/hamadmarri/cacule-cpu-scheduler/blob/master/patches/CacULE/v5.10/cacule-5.10.patch","user_id":null}}" data-hydro-click-hmac="c58b960d32500d6db2d374b3b18c406d5da9406215532815c4cfc0e45a9dd966" href="/login?return_to=%2Fhamadmarri%2Fcacule-cpu-scheduler"> + <svg class="octicon octicon-repo-forked" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path></svg> + Fork +</a> + <a href="/hamadmarri/cacule-cpu-scheduler/network/members" class="social-count" + aria-label="11 users forked this repository"> + 11 + </a> + </li> +</ul> + + </div> + + + <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5 color-bg-secondary"> + + <ul class="UnderlineNav-body list-style-none "> + <li class="d-flex"> + <a href="/hamadmarri/cacule-cpu-scheduler" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /hamadmarri/cacule-cpu-scheduler" data-hotkey="g c" data-ga-click="Repository, Navigation click, Code tab" aria-current="page" class="UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item selected "> + + <svg class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"></path></svg> + <span data-content="Code">Code</span> + <span title="Not available" class="Counter "></span> + + +</a></li> + <li class="d-flex"> + <a href="/hamadmarri/cacule-cpu-scheduler/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /hamadmarri/cacule-cpu-scheduler/issues" data-hotkey="g i" data-ga-click="Repository, Navigation click, Issues tab" class="UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item "> + + <svg class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"></path></svg> + <span data-content="Issues">Issues</span> + <span title="1" class="Counter ">1</span> + + +</a></li> + <li class="d-flex"> + <a href="/hamadmarri/cacule-cpu-scheduler/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /hamadmarri/cacule-cpu-scheduler/pulls" data-hotkey="g p" data-ga-click="Repository, Navigation click, Pull requests tab" class="UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item "> + + <svg class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z"></path></svg> + <span data-content="Pull requests">Pull requests</span> + <span title="0" hidden="hidden" class="Counter ">0</span> + + +</a></li> + <li class="d-flex"> + <a href="/hamadmarri/cacule-cpu-scheduler/discussions" data-tab-item="i3discussions-tab" data-selected-links="repo_discussions /hamadmarri/cacule-cpu-scheduler/discussions" data-hotkey="g g" data-ga-click="Repository, Navigation click, Discussions tab" class="UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item "> + + <svg class="octicon octicon-comment-discussion UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 2.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v5.5a.25.25 0 01-.25.25h-3.5a.75.75 0 00-.53.22L3.5 11.44V9.25a.75.75 0 00-.75-.75h-1a.25.25 0 01-.25-.25v-5.5zM1.75 1A1.75 1.75 0 000 2.75v5.5C0 9.216.784 10 1.75 10H2v1.543a1.457 1.457 0 002.487 1.03L7.061 10h3.189A1.75 1.75 0 0012 8.25v-5.5A1.75 1.75 0 0010.25 1h-8.5zM14.5 4.75a.25.25 0 00-.25-.25h-.5a.75.75 0 110-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0114.25 12H14v1.543a1.457 1.457 0 01-2.487 1.03L9.22 12.28a.75.75 0 111.06-1.06l2.22 2.22v-2.19a.75.75 0 01.75-.75h1a.25.25 0 00.25-.25v-5.5z"></path></svg> + <span data-content="Discussions">Discussions</span> + <span title="Not available" class="Counter "></span> + + +</a></li> + <li class="d-flex"> + <a href="/hamadmarri/cacule-cpu-scheduler/actions" data-tab-item="i4actions-tab" data-selected-links="repo_actions /hamadmarri/cacule-cpu-scheduler/actions" data-hotkey="g a" data-ga-click="Repository, Navigation click, Actions tab" class="UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item "> + + <svg class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"></path></svg> + <span data-content="Actions">Actions</span> + <span title="Not available" class="Counter "></span> + + +</a></li> + <li class="d-flex"> + <a href="/hamadmarri/cacule-cpu-scheduler/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /hamadmarri/cacule-cpu-scheduler/security" data-hotkey="g s" data-ga-click="Repository, Navigation click, Security tab" class="UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item "> + + <svg class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.467.133a1.75 1.75 0 011.066 0l5.25 1.68A1.75 1.75 0 0115 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.7 1.7 0 01-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 011.217-1.667l5.25-1.68zm.61 1.429a.25.25 0 00-.153 0l-5.25 1.68a.25.25 0 00-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.2.2 0 00.154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.25.25 0 00-.174-.237l-5.25-1.68zM9 10.5a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.75a.75.75 0 10-1.5 0v3a.75.75 0 001.5 0v-3z"></path></svg> + <span data-content="Security">Security</span> + <include-fragment src="/hamadmarri/cacule-cpu-scheduler/security/overall-count" accept="text/fragment+html"></include-fragment> + + +</a></li> + <li class="d-flex"> + <a href="/hamadmarri/cacule-cpu-scheduler/pulse" data-tab-item="i6insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /hamadmarri/cacule-cpu-scheduler/pulse" data-ga-click="Repository, Navigation click, Insights tab" class="UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item "> + + <svg class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 1.75a.75.75 0 00-1.5 0v12.5c0 .414.336.75.75.75h14.5a.75.75 0 000-1.5H1.5V1.75zm14.28 2.53a.75.75 0 00-1.06-1.06L10 7.94 7.53 5.47a.75.75 0 00-1.06 0L3.22 8.72a.75.75 0 001.06 1.06L7 7.06l2.47 2.47a.75.75 0 001.06 0l5.25-5.25z"></path></svg> + <span data-content="Insights">Insights</span> + <span title="Not available" class="Counter "></span> + + +</a></li> +</ul> + <div style="visibility:hidden;" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <details class="details-overlay details-reset position-relative"> + <summary role="button"> <div class="UnderlineNav-item mr-0 border-0"> + <svg class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg> + <span class="sr-only">More</span> + </div> +</summary> + <div> <details-menu role="menu" class="dropdown-menu dropdown-menu-sw "> + + <ul> + <li data-menu-item="i0code-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /hamadmarri/cacule-cpu-scheduler" href="/hamadmarri/cacule-cpu-scheduler"> + Code +</a> </li> + <li data-menu-item="i1issues-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /hamadmarri/cacule-cpu-scheduler/issues" href="/hamadmarri/cacule-cpu-scheduler/issues"> + Issues +</a> </li> + <li data-menu-item="i2pull-requests-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /hamadmarri/cacule-cpu-scheduler/pulls" href="/hamadmarri/cacule-cpu-scheduler/pulls"> + Pull requests +</a> </li> + <li data-menu-item="i3discussions-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /hamadmarri/cacule-cpu-scheduler/discussions" href="/hamadmarri/cacule-cpu-scheduler/discussions"> + Discussions +</a> </li> + <li data-menu-item="i4actions-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /hamadmarri/cacule-cpu-scheduler/actions" href="/hamadmarri/cacule-cpu-scheduler/actions"> + Actions +</a> </li> + <li data-menu-item="i5security-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /hamadmarri/cacule-cpu-scheduler/security" href="/hamadmarri/cacule-cpu-scheduler/security"> + Security +</a> </li> + <li data-menu-item="i6insights-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /hamadmarri/cacule-cpu-scheduler/pulse" href="/hamadmarri/cacule-cpu-scheduler/pulse"> + Insights +</a> </li> + </ul> + +</details-menu></div> +</details></div> +</nav> + + </div> + + +<div class="container-xl clearfix new-discussion-timeline px-3 px-md-4 px-lg-5"> + <div id="repo-content-pjax-container" class="repository-content " > + + + + +<div> + + + + <a class="d-none js-permalink-shortcut" data-hotkey="y" href="/hamadmarri/cacule-cpu-scheduler/blob/ce27d217b2762598faca57a631ca2b02023c539d/patches/CacULE/v5.10/cacule-5.10.patch">Permalink</a> + + <!-- blob contrib key: blob_contributors:v22:12d1e2dd9f6c609ccaaf643567b680f12f7cc25c444c2b6e62b1489d52ad6639 --> + + <div class="d-flex flex-items-start flex-shrink-0 pb-3 flex-wrap flex-md-nowrap flex-justify-between flex-md-justify-start"> + +<div class="position-relative"> + <details class="details-reset details-overlay mr-0 mb-0 " id="branch-select-menu"> + <summary class="btn css-truncate" + data-hotkey="w" + title="Switch branches or tags"> + <svg class="octicon octicon-git-branch text-gray" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path></svg> + <span class="css-truncate-target" data-menu-button>master</span> + <span class="dropdown-caret"></span> + </summary> + + +<div class="SelectMenu"> + <div class="SelectMenu-modal"> + <header class="SelectMenu-header"> + <span class="SelectMenu-title">Switch branches/tags</span> + <button class="SelectMenu-closeButton" type="button" data-toggle-for="branch-select-menu"><svg aria-label="Close menu" aria-hidden="false" class="octicon octicon-x" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg></button> + </header> + + <input-demux data-action="tab-container-change:input-demux#storeInput tab-container-changed:input-demux#updateInput"> + <tab-container class="d-flex flex-column js-branches-tags-tabs" style="min-height: 0;"> + <div class="SelectMenu-filter"> + <input data-target="input-demux.source" + id="context-commitish-filter-field" + class="SelectMenu-input form-control" + aria-owns="ref-list-branches" + data-controls-ref-menu-id="ref-list-branches" + autofocus + autocomplete="off" + aria-label="Filter branches/tags" + placeholder="Filter branches/tags" + type="text" + > + </div> + + <div class="SelectMenu-tabs" role="tablist" data-target="input-demux.control" > + <button class="SelectMenu-tab" type="button" role="tab" aria-selected="true">Branches</button> + <button class="SelectMenu-tab" type="button" role="tab">Tags</button> + </div> + + <div role="tabpanel" id="ref-list-branches" data-filter-placeholder="Filter branches/tags" class="d-flex flex-column flex-auto overflow-auto" tabindex=""> + <ref-selector + type="branch" + data-targets="input-demux.sinks" + data-action=" + input-entered:ref-selector#inputEntered + tab-selected:ref-selector#tabSelected + focus-list:ref-selector#focusFirstListMember + " + query-endpoint="/hamadmarri/cacule-cpu-scheduler/refs" + + cache-key="v0:1602639965.0" + current-committish="bWFzdGVy" + default-branch="bWFzdGVy" + name-with-owner="aGFtYWRtYXJyaS9jYWN1bGUtY3B1LXNjaGVkdWxlcg==" + > + + <template data-target="ref-selector.noMatchTemplate"> + <div class="SelectMenu-message">Nothing to show</div> +</template> + + + <!-- TODO: this max-height is necessary or else the branch list won't scroll. why? --> + <div data-target="ref-selector.listContainer" role="menu" class="SelectMenu-list " style="max-height: 330px"> + <div class="SelectMenu-loading pt-3 pb-0" aria-label="Menu is loading"> + <svg style="box-sizing: content-box; color: var(--color-icon-primary);" viewBox="0 0 16 16" fill="none" width="32" height="32" class="anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> + </div> + </div> + + <template data-target="ref-selector.itemTemplate"> + <a href="https://github.com/hamadmarri/cacule-cpu-scheduler/blob/{{ urlEncodedRefName }}/patches/CacULE/v5.10/cacule-5.10.patch" class="SelectMenu-item" role="menuitemradio" rel="nofollow" aria-checked="{{ isCurrent }}" data-index="{{ index }}"> + <svg class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg> + <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span> + <span hidden="{{ isNotDefault }}" class="Label Label--secondary flex-self-start">default</span> + </a> +</template> + + + <footer class="SelectMenu-footer"><a href="/hamadmarri/cacule-cpu-scheduler/branches">View all branches</a></footer> + </ref-selector> + + </div> + + <div role="tabpanel" id="tags-menu" data-filter-placeholder="Find a tag" class="d-flex flex-column flex-auto overflow-auto" tabindex="" hidden> + <ref-selector + type="tag" + data-action=" + input-entered:ref-selector#inputEntered + tab-selected:ref-selector#tabSelected + focus-list:ref-selector#focusFirstListMember + " + data-targets="input-demux.sinks" + query-endpoint="/hamadmarri/cacule-cpu-scheduler/refs" + cache-key="v0:1602639965.0" + current-committish="bWFzdGVy" + default-branch="bWFzdGVy" + name-with-owner="aGFtYWRtYXJyaS9jYWN1bGUtY3B1LXNjaGVkdWxlcg==" + > + + <template data-target="ref-selector.noMatchTemplate"> + <div class="SelectMenu-message" data-index="{{ index }}">Nothing to show</div> + </template> + + <template data-target="ref-selector.itemTemplate"> + <a href="https://github.com/hamadmarri/cacule-cpu-scheduler/blob/{{ urlEncodedRefName }}/patches/CacULE/v5.10/cacule-5.10.patch" class="SelectMenu-item" role="menuitemradio" rel="nofollow" aria-checked="{{ isCurrent }}" data-index="{{ index }}"> + <svg class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg> + <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span> + <span hidden="{{ isNotDefault }}" class="Label Label--secondary flex-self-start">default</span> + </a> +</template> + + + <div data-target="ref-selector.listContainer" role="menu" class="SelectMenu-list" style="max-height: 330px"> + <div class="SelectMenu-loading pt-3 pb-0" aria-label="Menu is loading"> + <svg style="box-sizing: content-box; color: var(--color-icon-primary);" viewBox="0 0 16 16" fill="none" width="32" height="32" class="anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> + </div> + </div> + <footer class="SelectMenu-footer"><a href="/hamadmarri/cacule-cpu-scheduler/tags">View all tags</a></footer> + </ref-selector> + </div> + </tab-container> + </input-demux> + </div> +</div> + + </details> + +</div> + + <h2 id="blob-path" class="breadcrumb flex-auto flex-self-center min-width-0 text-normal mx-2 width-full width-md-auto flex-order-1 flex-md-order-none mt-3 mt-md-0"> + <span class="js-repo-root text-bold"><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/hamadmarri/cacule-cpu-scheduler"><span>cacule-cpu-scheduler</span></a></span></span><span class="separator">/</span><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/hamadmarri/cacule-cpu-scheduler/tree/master/patches"><span>patches</span></a></span><span class="separator">/</span><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/hamadmarri/cacule-cpu-scheduler/tree/master/patches/CacULE"><span>CacULE</span></a></span><span class="separator">/</span><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/hamadmarri/cacule-cpu-scheduler/tree/master/patches/CacULE/v5.10"><span>v5.10</span></a></span><span class="separator">/</span><strong class="final-path">cacule-5.10.patch</strong> + </h2> + <a href="/hamadmarri/cacule-cpu-scheduler/find/master" + class="js-pjax-capture-input btn mr-2 d-none d-md-block" + data-pjax + data-hotkey="t"> + Go to file + </a> + + <details id="blob-more-options-details" class="details-overlay details-reset position-relative"> + <summary role="button" class="btn "> <svg aria-label="More options" class="octicon octicon-kebab-horizontal" height="16" viewBox="0 0 16 16" version="1.1" width="16" role="img"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg> +</summary> + <div> <ul class="dropdown-menu dropdown-menu-sw"> + <li class="d-block d-md-none"> + <a class="dropdown-item d-flex flex-items-baseline" data-hydro-click="{"event_type":"repository.click","payload":{"target":"FIND_FILE_BUTTON","repository_id":282162283,"originating_url":"https://github.com/hamadmarri/cacule-cpu-scheduler/blob/master/patches/CacULE/v5.10/cacule-5.10.patch","user_id":null}}" data-hydro-click-hmac="e45a87f6aa20c4be438721f653159969f98a20c42944d9e91bf93d6cbd07dc42" data-ga-click="Repository, find file, location:repo overview" data-hotkey="t" data-pjax="true" href="/hamadmarri/cacule-cpu-scheduler/find/master"> + <span class="flex-auto">Go to file</span> + <span class="text-small color-text-secondary" aria-hidden="true">T</span> +</a> </li> + <li data-toggle-for="blob-more-options-details"> + <button type="button" data-toggle-for="jumpto-line-details-dialog" class="btn-link dropdown-item"> + <span class="d-flex flex-items-baseline"> + <span class="flex-auto">Go to line</span> + <span class="text-small color-text-secondary" aria-hidden="true">L</span> + </span> + </button> + </li> + <li class="dropdown-divider" role="none"></li> + <li> + <clipboard-copy value="patches/CacULE/v5.10/cacule-5.10.patch" class="dropdown-item cursor-pointer" data-toggle-for="blob-more-options-details"> + Copy path + </clipboard-copy> + </li> + <li> + <clipboard-copy value="https://github.com/hamadmarri/cacule-cpu-scheduler/blob/ce27d217b2762598faca57a631ca2b02023c539d/patches/CacULE/v5.10/cacule-5.10.patch" class="dropdown-item cursor-pointer" data-toggle-for="blob-more-options-details" > + <span class="d-flex flex-items-baseline"> + <span class="flex-auto">Copy permalink</span> + </span> + </clipboard-copy> + </li> + </ul> +</div> +</details> </div> + + + + <div class="Box d-flex flex-column flex-shrink-0 mb-3"> + <include-fragment src="/hamadmarri/cacule-cpu-scheduler/contributors/master/patches/CacULE/v5.10/cacule-5.10.patch" class="commit-loader"> + <div class="Box-header Box-header--blue d-flex flex-items-center"> + <div class="Skeleton avatar avatar-user flex-shrink-0 ml-n1 mr-n1 mt-n1 mb-n1" style="width:24px;height:24px;"></div> + <div class="Skeleton Skeleton--text col-5 ml-2"> </div> + </div> + + <div class="Box-body d-flex flex-items-center" > + <div class="Skeleton Skeleton--text col-1"> </div> + <span class="color-text-danger h6 loader-error">Cannot retrieve contributors at this time</span> + </div> +</include-fragment> </div> + + + + + + + + + + <div data-target="readme-toc.content" class="Box mt-3 position-relative + "> + + <div + class="Box-header py-2 pr-2 d-flex flex-shrink-0 flex-md-row flex-items-center" + + > + + + <div class="text-mono f6 flex-auto pr-3 flex-order-2 flex-md-order-1"> + + 1250 lines (1145 sloc) + <span class="file-info-divider"></span> + 34.6 KB + </div> + + <div class="d-flex py-1 py-md-0 flex-auto flex-order-1 flex-md-order-2 flex-sm-grow-0 flex-justify-between hide-sm hide-md"> + + <div class="BtnGroup"> + <a href="/hamadmarri/cacule-cpu-scheduler/raw/master/patches/CacULE/v5.10/cacule-5.10.patch" id="raw-url" role="button" class="btn-sm btn BtnGroup-item ">Raw</a> + <a href="/hamadmarri/cacule-cpu-scheduler/blame/master/patches/CacULE/v5.10/cacule-5.10.patch" data-hotkey="b" role="button" class="js-update-url-with-hash btn-sm btn BtnGroup-item ">Blame</a> + </div> + + <div> + <a class="btn-octicon tooltipped tooltipped-nw js-remove-unless-platform" + data-platforms="windows,mac" + href="https://desktop.github.com" + aria-label="Open this file in GitHub Desktop" + data-ga-click="Repository, open with desktop"> + <svg class="octicon octicon-device-desktop" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.75 2.5h12.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25zM14.25 1H1.75A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z"></path></svg> + </a> + + <a href="/login?return_to=%2Fhamadmarri%2Fcacule-cpu-scheduler%2Fblob%2Fmaster%2Fpatches%2FCacULE%2Fv5.10%2Fcacule-5.10.patch" class="btn-octicon disabled tooltipped tooltipped-nw" + aria-label="You must be signed in to make or propose changes"> + <svg class="octicon octicon-pencil" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path></svg> + </a> + <a href="/login?return_to=%2Fhamadmarri%2Fcacule-cpu-scheduler%2Fblob%2Fmaster%2Fpatches%2FCacULE%2Fv5.10%2Fcacule-5.10.patch" class="btn-octicon btn-octicon-danger disabled tooltipped tooltipped-nw" + aria-label="You must be signed in to make or propose changes"> + <svg class="octicon octicon-trash" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path></svg> + </a> + </div> + </div> + + <div class="d-flex hide-lg hide-xl flex-order-2 flex-grow-0"> + <details class="dropdown details-reset details-overlay d-inline-block"> + <summary class="btn-octicon" aria-haspopup="true" aria-label="possible actions"> + <svg height="16" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg> + </summary> + + <ul class="dropdown-menu dropdown-menu-sw"> + <li> + <a class="dropdown-item tooltipped tooltipped-nw js-remove-unless-platform" + data-platforms="windows,mac" + href="https://desktop.github.com" + data-ga-click="Repository, open with desktop"> + Open with Desktop + </a> + </li> + <li> + <a class="dropdown-item" href="/hamadmarri/cacule-cpu-scheduler/raw/master/patches/CacULE/v5.10/cacule-5.10.patch"> + View raw + </a> + </li> + <li> + <a class="dropdown-item" href="/hamadmarri/cacule-cpu-scheduler/blame/master/patches/CacULE/v5.10/cacule-5.10.patch"> + View blame + </a> + </li> + + </ul> + </details> + </div> +</div> + + + + <div itemprop="text" class="Box-body p-0 blob-wrapper data type-diff gist-border-0"> + +<table class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip> + <tr> + <td id="L1" class="blob-num js-line-number" data-line-number="1"></td> + <td id="LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst</span></td> + </tr> + <tr> + <td id="L2" class="blob-num js-line-number" data-line-number="2"></td> + <td id="LC2" class="blob-code blob-code-inner js-file-line">index d4b32cc32bb7..2788c5bbd870 100644</td> + </tr> + <tr> + <td id="L3" class="blob-num js-line-number" data-line-number="3"></td> + <td id="LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- a/Documentation/admin-guide/sysctl/kernel.rst</span></td> + </tr> + <tr> + <td id="L4" class="blob-num js-line-number" data-line-number="4"></td> + <td id="LC4" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ b/Documentation/admin-guide/sysctl/kernel.rst</span></td> + </tr> + <tr> + <td id="L5" class="blob-num js-line-number" data-line-number="5"></td> + <td id="LC5" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -1087,6 +1087,10 @@</span> Model available). If your platform happens to meet the</td> + </tr> + <tr> + <td id="L6" class="blob-num js-line-number" data-line-number="6"></td> + <td id="LC6" class="blob-code blob-code-inner js-file-line"> requirements for EAS but you do not want to use it, change</td> + </tr> + <tr> + <td id="L7" class="blob-num js-line-number" data-line-number="7"></td> + <td id="LC7" class="blob-code blob-code-inner js-file-line"> this value to 0.</td> + </tr> + <tr> + <td id="L8" class="blob-num js-line-number" data-line-number="8"></td> + <td id="LC8" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L9" class="blob-num js-line-number" data-line-number="9"></td> + <td id="LC9" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>sched_interactivity_factor (CacULE scheduler only)</span></td> + </tr> + <tr> + <td id="L10" class="blob-num js-line-number" data-line-number="10"></td> + <td id="LC10" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>==================================================</span></td> + </tr> + <tr> + <td id="L11" class="blob-num js-line-number" data-line-number="11"></td> + <td id="LC11" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>Sets the value *m* for interactivity score calculations. See</span></td> + </tr> + <tr> + <td id="L12" class="blob-num js-line-number" data-line-number="12"></td> + <td id="LC12" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>Figure 1 in https://web.cs.ucdavis.edu/~roper/ecs150/ULE.pdf</span></td> + </tr> + <tr> + <td id="L13" class="blob-num js-line-number" data-line-number="13"></td> + <td id="LC13" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L14" class="blob-num js-line-number" data-line-number="14"></td> + <td id="LC14" class="blob-code blob-code-inner js-file-line"> sched_schedstats</td> + </tr> + <tr> + <td id="L15" class="blob-num js-line-number" data-line-number="15"></td> + <td id="LC15" class="blob-code blob-code-inner js-file-line"> ================</td> + </tr> + <tr> + <td id="L16" class="blob-num js-line-number" data-line-number="16"></td> + <td id="LC16" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">diff --git a/Documentation/scheduler/sched-CacULE.rst b/Documentation/scheduler/sched-CacULE.rst</span></td> + </tr> + <tr> + <td id="L17" class="blob-num js-line-number" data-line-number="17"></td> + <td id="LC17" class="blob-code blob-code-inner js-file-line">new file mode 100644</td> + </tr> + <tr> + <td id="L18" class="blob-num js-line-number" data-line-number="18"></td> + <td id="LC18" class="blob-code blob-code-inner js-file-line">index 000000000000..82b0847c468a</td> + </tr> + <tr> + <td id="L19" class="blob-num js-line-number" data-line-number="19"></td> + <td id="LC19" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- /dev/null</span></td> + </tr> + <tr> + <td id="L20" class="blob-num js-line-number" data-line-number="20"></td> + <td id="LC20" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ b/Documentation/scheduler/sched-CacULE.rst</span></td> + </tr> + <tr> + <td id="L21" class="blob-num js-line-number" data-line-number="21"></td> + <td id="LC21" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -0,0 +1,76 @@</span></td> + </tr> + <tr> + <td id="L22" class="blob-num js-line-number" data-line-number="22"></td> + <td id="LC22" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>======================================</span></td> + </tr> + <tr> + <td id="L23" class="blob-num js-line-number" data-line-number="23"></td> + <td id="LC23" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>The CacULE Scheduler by Hamad Al Marri.</span></td> + </tr> + <tr> + <td id="L24" class="blob-num js-line-number" data-line-number="24"></td> + <td id="LC24" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>======================================</span></td> + </tr> + <tr> + <td id="L25" class="blob-num js-line-number" data-line-number="25"></td> + <td id="LC25" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L26" class="blob-num js-line-number" data-line-number="26"></td> + <td id="LC26" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>1. Overview</span></td> + </tr> + <tr> + <td id="L27" class="blob-num js-line-number" data-line-number="27"></td> + <td id="LC27" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>=============</span></td> + </tr> + <tr> + <td id="L28" class="blob-num js-line-number" data-line-number="28"></td> + <td id="LC28" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L29" class="blob-num js-line-number" data-line-number="29"></td> + <td id="LC29" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>The CacULE CPU scheduler is based on interactivity score mechanism.</span></td> + </tr> + <tr> + <td id="L30" class="blob-num js-line-number" data-line-number="30"></td> + <td id="LC30" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>The interactivity score is inspired by the ULE scheduler (FreeBSD</span></td> + </tr> + <tr> + <td id="L31" class="blob-num js-line-number" data-line-number="31"></td> + <td id="LC31" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>scheduler).</span></td> + </tr> + <tr> + <td id="L32" class="blob-num js-line-number" data-line-number="32"></td> + <td id="LC32" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L33" class="blob-num js-line-number" data-line-number="33"></td> + <td id="LC33" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>1.1 About CacULE Scheduler</span></td> + </tr> + <tr> + <td id="L34" class="blob-num js-line-number" data-line-number="34"></td> + <td id="LC34" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>--------------------------</span></td> + </tr> + <tr> + <td id="L35" class="blob-num js-line-number" data-line-number="35"></td> + <td id="LC35" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L36" class="blob-num js-line-number" data-line-number="36"></td> + <td id="LC36" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> - Each CPU has its own runqueue.</span></td> + </tr> + <tr> + <td id="L37" class="blob-num js-line-number" data-line-number="37"></td> + <td id="LC37" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L38" class="blob-num js-line-number" data-line-number="38"></td> + <td id="LC38" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> - NORMAL runqueue is a linked list of sched_entities (instead of RB-Tree).</span></td> + </tr> + <tr> + <td id="L39" class="blob-num js-line-number" data-line-number="39"></td> + <td id="LC39" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L40" class="blob-num js-line-number" data-line-number="40"></td> + <td id="LC40" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> - RT and other runqueues are just the same as the CFS's.</span></td> + </tr> + <tr> + <td id="L41" class="blob-num js-line-number" data-line-number="41"></td> + <td id="LC41" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L42" class="blob-num js-line-number" data-line-number="42"></td> + <td id="LC42" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> - Wake up tasks preempt currently running tasks if its interactivity score value</span></td> + </tr> + <tr> + <td id="L43" class="blob-num js-line-number" data-line-number="43"></td> + <td id="LC43" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> is higher.</span></td> + </tr> + <tr> + <td id="L44" class="blob-num js-line-number" data-line-number="44"></td> + <td id="LC44" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L45" class="blob-num js-line-number" data-line-number="45"></td> + <td id="LC45" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L46" class="blob-num js-line-number" data-line-number="46"></td> + <td id="LC46" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>1.2. Complexity</span></td> + </tr> + <tr> + <td id="L47" class="blob-num js-line-number" data-line-number="47"></td> + <td id="LC47" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>----------------</span></td> + </tr> + <tr> + <td id="L48" class="blob-num js-line-number" data-line-number="48"></td> + <td id="LC48" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L49" class="blob-num js-line-number" data-line-number="49"></td> + <td id="LC49" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>The complexity of Enqueue and Dequeue a task is O(1).</span></td> + </tr> + <tr> + <td id="L50" class="blob-num js-line-number" data-line-number="50"></td> + <td id="LC50" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L51" class="blob-num js-line-number" data-line-number="51"></td> + <td id="LC51" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>The complexity of pick the next task is in O(n), where n is the number of tasks</span></td> + </tr> + <tr> + <td id="L52" class="blob-num js-line-number" data-line-number="52"></td> + <td id="LC52" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>in a runqueue (each CPU has its own runqueue).</span></td> + </tr> + <tr> + <td id="L53" class="blob-num js-line-number" data-line-number="53"></td> + <td id="LC53" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L54" class="blob-num js-line-number" data-line-number="54"></td> + <td id="LC54" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>Note: O(n) sounds scary, but usually for a machine with 4 CPUS where it is used</span></td> + </tr> + <tr> + <td id="L55" class="blob-num js-line-number" data-line-number="55"></td> + <td id="LC55" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>for desktop or mobile jobs, the maximum number of runnable tasks might not</span></td> + </tr> + <tr> + <td id="L56" class="blob-num js-line-number" data-line-number="56"></td> + <td id="LC56" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>exceeds 10 (at the pick next run time) - the idle tasks are excluded since they</span></td> + </tr> + <tr> + <td id="L57" class="blob-num js-line-number" data-line-number="57"></td> + <td id="LC57" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>are dequeued when sleeping and enqueued when they wake up.</span></td> + </tr> + <tr> + <td id="L58" class="blob-num js-line-number" data-line-number="58"></td> + <td id="LC58" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L59" class="blob-num js-line-number" data-line-number="59"></td> + <td id="LC59" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L60" class="blob-num js-line-number" data-line-number="60"></td> + <td id="LC60" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>2. The CacULE Interactivity Score</span></td> + </tr> + <tr> + <td id="L61" class="blob-num js-line-number" data-line-number="61"></td> + <td id="LC61" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>=======================================================</span></td> + </tr> + <tr> + <td id="L62" class="blob-num js-line-number" data-line-number="62"></td> + <td id="LC62" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L63" class="blob-num js-line-number" data-line-number="63"></td> + <td id="LC63" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>The interactivity score is inspired by the ULE scheduler (FreeBSD scheduler).</span></td> + </tr> + <tr> + <td id="L64" class="blob-num js-line-number" data-line-number="64"></td> + <td id="LC64" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>For more information see: https://web.cs.ucdavis.edu/~roper/ecs150/ULE.pdf</span></td> + </tr> + <tr> + <td id="L65" class="blob-num js-line-number" data-line-number="65"></td> + <td id="LC65" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>CacULE doesn't replace CFS with ULE, it only changes the CFS' pick next task</span></td> + </tr> + <tr> + <td id="L66" class="blob-num js-line-number" data-line-number="66"></td> + <td id="LC66" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>mechanism to ULE's interactivity score mechanism for picking next task to run.</span></td> + </tr> + <tr> + <td id="L67" class="blob-num js-line-number" data-line-number="67"></td> + <td id="LC67" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L68" class="blob-num js-line-number" data-line-number="68"></td> + <td id="LC68" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L69" class="blob-num js-line-number" data-line-number="69"></td> + <td id="LC69" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>2.3 sched_interactivity_factor</span></td> + </tr> + <tr> + <td id="L70" class="blob-num js-line-number" data-line-number="70"></td> + <td id="LC70" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>=================</span></td> + </tr> + <tr> + <td id="L71" class="blob-num js-line-number" data-line-number="71"></td> + <td id="LC71" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>Sets the value *m* for interactivity score calculations. See Figure 1 in</span></td> + </tr> + <tr> + <td id="L72" class="blob-num js-line-number" data-line-number="72"></td> + <td id="LC72" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>https://web.cs.ucdavis.edu/~roper/ecs150/ULE.pdf</span></td> + </tr> + <tr> + <td id="L73" class="blob-num js-line-number" data-line-number="73"></td> + <td id="LC73" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>The default value of in CacULE is 10 which means that the Maximum Interactive</span></td> + </tr> + <tr> + <td id="L74" class="blob-num js-line-number" data-line-number="74"></td> + <td id="LC74" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>Score is 20 (since m = Maximum Interactive Score / 2).</span></td> + </tr> + <tr> + <td id="L75" class="blob-num js-line-number" data-line-number="75"></td> + <td id="LC75" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>You can tune sched_interactivity_factor with sysctl command:</span></td> + </tr> + <tr> + <td id="L76" class="blob-num js-line-number" data-line-number="76"></td> + <td id="LC76" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L77" class="blob-num js-line-number" data-line-number="77"></td> + <td id="LC77" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> sysctl kernel.sched_interactivity_factor=50</span></td> + </tr> + <tr> + <td id="L78" class="blob-num js-line-number" data-line-number="78"></td> + <td id="LC78" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L79" class="blob-num js-line-number" data-line-number="79"></td> + <td id="LC79" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>This command changes the sched_interactivity_factor from 10 to 50.</span></td> + </tr> + <tr> + <td id="L80" class="blob-num js-line-number" data-line-number="80"></td> + <td id="LC80" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L81" class="blob-num js-line-number" data-line-number="81"></td> + <td id="LC81" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L82" class="blob-num js-line-number" data-line-number="82"></td> + <td id="LC82" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>3. Scheduling policies</span></td> + </tr> + <tr> + <td id="L83" class="blob-num js-line-number" data-line-number="83"></td> + <td id="LC83" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>=======================</span></td> + </tr> + <tr> + <td id="L84" class="blob-num js-line-number" data-line-number="84"></td> + <td id="LC84" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L85" class="blob-num js-line-number" data-line-number="85"></td> + <td id="LC85" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>CacULE some CFS, implements three scheduling policies:</span></td> + </tr> + <tr> + <td id="L86" class="blob-num js-line-number" data-line-number="86"></td> + <td id="LC86" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L87" class="blob-num js-line-number" data-line-number="87"></td> + <td id="LC87" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> - SCHED_NORMAL (traditionally called SCHED_OTHER): The scheduling</span></td> + </tr> + <tr> + <td id="L88" class="blob-num js-line-number" data-line-number="88"></td> + <td id="LC88" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> policy that is used for regular tasks.</span></td> + </tr> + <tr> + <td id="L89" class="blob-num js-line-number" data-line-number="89"></td> + <td id="LC89" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L90" class="blob-num js-line-number" data-line-number="90"></td> + <td id="LC90" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> - SCHED_BATCH: Does not preempt nearly as often as regular tasks</span></td> + </tr> + <tr> + <td id="L91" class="blob-num js-line-number" data-line-number="91"></td> + <td id="LC91" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> would, thereby allowing tasks to run longer and make better use of</span></td> + </tr> + <tr> + <td id="L92" class="blob-num js-line-number" data-line-number="92"></td> + <td id="LC92" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> caches but at the cost of interactivity. This is well suited for</span></td> + </tr> + <tr> + <td id="L93" class="blob-num js-line-number" data-line-number="93"></td> + <td id="LC93" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> batch jobs.</span></td> + </tr> + <tr> + <td id="L94" class="blob-num js-line-number" data-line-number="94"></td> + <td id="LC94" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L95" class="blob-num js-line-number" data-line-number="95"></td> + <td id="LC95" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> - SCHED_IDLE: This is even weaker than nice 19, but its not a true</span></td> + </tr> + <tr> + <td id="L96" class="blob-num js-line-number" data-line-number="96"></td> + <td id="LC96" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> idle timer scheduler in order to avoid to get into priority</span></td> + </tr> + <tr> + <td id="L97" class="blob-num js-line-number" data-line-number="97"></td> + <td id="LC97" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> inversion problems which would deadlock the machine.</span></td> + </tr> + <tr> + <td id="L98" class="blob-num js-line-number" data-line-number="98"></td> + <td id="LC98" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">diff --git a/include/linux/sched.h b/include/linux/sched.h</span></td> + </tr> + <tr> + <td id="L99" class="blob-num js-line-number" data-line-number="99"></td> + <td id="LC99" class="blob-code blob-code-inner js-file-line">index 76cd21fa5501..0abad9f1247a 100644</td> + </tr> + <tr> + <td id="L100" class="blob-num js-line-number" data-line-number="100"></td> + <td id="LC100" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- a/include/linux/sched.h</span></td> + </tr> + <tr> + <td id="L101" class="blob-num js-line-number" data-line-number="101"></td> + <td id="LC101" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ b/include/linux/sched.h</span></td> + </tr> + <tr> + <td id="L102" class="blob-num js-line-number" data-line-number="102"></td> + <td id="LC102" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -448,10 +448,22 @@</span> struct sched_statistics {</td> + </tr> + <tr> + <td id="L103" class="blob-num js-line-number" data-line-number="103"></td> + <td id="LC103" class="blob-code blob-code-inner js-file-line"> #endif</td> + </tr> + <tr> + <td id="L104" class="blob-num js-line-number" data-line-number="104"></td> + <td id="LC104" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L105" class="blob-num js-line-number" data-line-number="105"></td> + <td id="LC105" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L106" class="blob-num js-line-number" data-line-number="106"></td> + <td id="LC106" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L107" class="blob-num js-line-number" data-line-number="107"></td> + <td id="LC107" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>struct cacule_node {</span></td> + </tr> + <tr> + <td id="L108" class="blob-num js-line-number" data-line-number="108"></td> + <td id="LC108" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node* next;</span></td> + </tr> + <tr> + <td id="L109" class="blob-num js-line-number" data-line-number="109"></td> + <td id="LC109" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node* prev;</span></td> + </tr> + <tr> + <td id="L110" class="blob-num js-line-number" data-line-number="110"></td> + <td id="LC110" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> u64 cacule_start_time;</span></td> + </tr> + <tr> + <td id="L111" class="blob-num js-line-number" data-line-number="111"></td> + <td id="LC111" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> u64 vruntime;</span></td> + </tr> + <tr> + <td id="L112" class="blob-num js-line-number" data-line-number="112"></td> + <td id="LC112" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>};</span></td> + </tr> + <tr> + <td id="L113" class="blob-num js-line-number" data-line-number="113"></td> + <td id="LC113" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L114" class="blob-num js-line-number" data-line-number="114"></td> + <td id="LC114" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L115" class="blob-num js-line-number" data-line-number="115"></td> + <td id="LC115" class="blob-code blob-code-inner js-file-line"> struct sched_entity {</td> + </tr> + <tr> + <td id="L116" class="blob-num js-line-number" data-line-number="116"></td> + <td id="LC116" class="blob-code blob-code-inner js-file-line"> /* For load-balancing: */</td> + </tr> + <tr> + <td id="L117" class="blob-num js-line-number" data-line-number="117"></td> + <td id="LC117" class="blob-code blob-code-inner js-file-line"> struct load_weight load;</td> + </tr> + <tr> + <td id="L118" class="blob-num js-line-number" data-line-number="118"></td> + <td id="LC118" class="blob-code blob-code-inner js-file-line"> struct rb_node run_node;</td> + </tr> + <tr> + <td id="L119" class="blob-num js-line-number" data-line-number="119"></td> + <td id="LC119" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L120" class="blob-num js-line-number" data-line-number="120"></td> + <td id="LC120" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node cacule_node;</span></td> + </tr> + <tr> + <td id="L121" class="blob-num js-line-number" data-line-number="121"></td> + <td id="LC121" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L122" class="blob-num js-line-number" data-line-number="122"></td> + <td id="LC122" class="blob-code blob-code-inner js-file-line"> struct list_head group_node;</td> + </tr> + <tr> + <td id="L123" class="blob-num js-line-number" data-line-number="123"></td> + <td id="LC123" class="blob-code blob-code-inner js-file-line"> unsigned int on_rq;</td> + </tr> + <tr> + <td id="L124" class="blob-num js-line-number" data-line-number="124"></td> + <td id="LC124" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L125" class="blob-num js-line-number" data-line-number="125"></td> + <td id="LC125" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h</span></td> + </tr> + <tr> + <td id="L126" class="blob-num js-line-number" data-line-number="126"></td> + <td id="LC126" class="blob-code blob-code-inner js-file-line">index 3c31ba88aca5..cb819c3d86f3 100644</td> + </tr> + <tr> + <td id="L127" class="blob-num js-line-number" data-line-number="127"></td> + <td id="LC127" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- a/include/linux/sched/sysctl.h</span></td> + </tr> + <tr> + <td id="L128" class="blob-num js-line-number" data-line-number="128"></td> + <td id="LC128" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ b/include/linux/sched/sysctl.h</span></td> + </tr> + <tr> + <td id="L129" class="blob-num js-line-number" data-line-number="129"></td> + <td id="LC129" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -31,6 +31,12 @@</span> extern unsigned int sysctl_sched_min_granularity;</td> + </tr> + <tr> + <td id="L130" class="blob-num js-line-number" data-line-number="130"></td> + <td id="LC130" class="blob-code blob-code-inner js-file-line"> extern unsigned int sysctl_sched_wakeup_granularity;</td> + </tr> + <tr> + <td id="L131" class="blob-num js-line-number" data-line-number="131"></td> + <td id="LC131" class="blob-code blob-code-inner js-file-line"> extern unsigned int sysctl_sched_child_runs_first;</td> + </tr> + <tr> + <td id="L132" class="blob-num js-line-number" data-line-number="132"></td> + <td id="LC132" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L133" class="blob-num js-line-number" data-line-number="133"></td> + <td id="LC133" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L134" class="blob-num js-line-number" data-line-number="134"></td> + <td id="LC134" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>extern int interactivity_factor;</span></td> + </tr> + <tr> + <td id="L135" class="blob-num js-line-number" data-line-number="135"></td> + <td id="LC135" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>extern unsigned int interactivity_threshold;</span></td> + </tr> + <tr> + <td id="L136" class="blob-num js-line-number" data-line-number="136"></td> + <td id="LC136" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>extern int cacule_max_lifetime;</span></td> + </tr> + <tr> + <td id="L137" class="blob-num js-line-number" data-line-number="137"></td> + <td id="LC137" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L138" class="blob-num js-line-number" data-line-number="138"></td> + <td id="LC138" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L139" class="blob-num js-line-number" data-line-number="139"></td> + <td id="LC139" class="blob-code blob-code-inner js-file-line"> enum sched_tunable_scaling {</td> + </tr> + <tr> + <td id="L140" class="blob-num js-line-number" data-line-number="140"></td> + <td id="LC140" class="blob-code blob-code-inner js-file-line"> SCHED_TUNABLESCALING_NONE,</td> + </tr> + <tr> + <td id="L141" class="blob-num js-line-number" data-line-number="141"></td> + <td id="LC141" class="blob-code blob-code-inner js-file-line"> SCHED_TUNABLESCALING_LOG,</td> + </tr> + <tr> + <td id="L142" class="blob-num js-line-number" data-line-number="142"></td> + <td id="LC142" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">diff --git a/init/Kconfig b/init/Kconfig</span></td> + </tr> + <tr> + <td id="L143" class="blob-num js-line-number" data-line-number="143"></td> + <td id="LC143" class="blob-code blob-code-inner js-file-line">index fc4c9f416fad..16676cfd11d7 100644</td> + </tr> + <tr> + <td id="L144" class="blob-num js-line-number" data-line-number="144"></td> + <td id="LC144" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- a/init/Kconfig</span></td> + </tr> + <tr> + <td id="L145" class="blob-num js-line-number" data-line-number="145"></td> + <td id="LC145" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ b/init/Kconfig</span></td> + </tr> + <tr> + <td id="L146" class="blob-num js-line-number" data-line-number="146"></td> + <td id="LC146" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -825,6 +825,17 @@</span> config UCLAMP_BUCKETS_COUNT</td> + </tr> + <tr> + <td id="L147" class="blob-num js-line-number" data-line-number="147"></td> + <td id="LC147" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L148" class="blob-num js-line-number" data-line-number="148"></td> + <td id="LC148" class="blob-code blob-code-inner js-file-line"> endmenu</td> + </tr> + <tr> + <td id="L149" class="blob-num js-line-number" data-line-number="149"></td> + <td id="LC149" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L150" class="blob-num js-line-number" data-line-number="150"></td> + <td id="LC150" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>config CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L151" class="blob-num js-line-number" data-line-number="151"></td> + <td id="LC151" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> bool "CacULE CPU scheduler"</span></td> + </tr> + <tr> + <td id="L152" class="blob-num js-line-number" data-line-number="152"></td> + <td id="LC152" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> default y</span></td> + </tr> + <tr> + <td id="L153" class="blob-num js-line-number" data-line-number="153"></td> + <td id="LC153" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> help</span></td> + </tr> + <tr> + <td id="L154" class="blob-num js-line-number" data-line-number="154"></td> + <td id="LC154" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> The CacULE CPU scheduler is based on interactivity score mechanism.</span></td> + </tr> + <tr> + <td id="L155" class="blob-num js-line-number" data-line-number="155"></td> + <td id="LC155" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> The interactivity score is inspired by the ULE scheduler (FreeBSD</span></td> + </tr> + <tr> + <td id="L156" class="blob-num js-line-number" data-line-number="156"></td> + <td id="LC156" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> scheduler).</span></td> + </tr> + <tr> + <td id="L157" class="blob-num js-line-number" data-line-number="157"></td> + <td id="LC157" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L158" class="blob-num js-line-number" data-line-number="158"></td> + <td id="LC158" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> If unsure, say Y here.</span></td> + </tr> + <tr> + <td id="L159" class="blob-num js-line-number" data-line-number="159"></td> + <td id="LC159" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L160" class="blob-num js-line-number" data-line-number="160"></td> + <td id="LC160" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L161" class="blob-num js-line-number" data-line-number="161"></td> + <td id="LC161" class="blob-code blob-code-inner js-file-line"> #</td> + </tr> + <tr> + <td id="L162" class="blob-num js-line-number" data-line-number="162"></td> + <td id="LC162" class="blob-code blob-code-inner js-file-line"> # For architectures that want to enable the support for NUMA-affine scheduler</td> + </tr> + <tr> + <td id="L163" class="blob-num js-line-number" data-line-number="163"></td> + <td id="LC163" class="blob-code blob-code-inner js-file-line"> # balancing logic:</td> + </tr> + <tr> + <td id="L164" class="blob-num js-line-number" data-line-number="164"></td> + <td id="LC164" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -1208,6 +1219,7 @@</span> config SCHED_AUTOGROUP</td> + </tr> + <tr> + <td id="L165" class="blob-num js-line-number" data-line-number="165"></td> + <td id="LC165" class="blob-code blob-code-inner js-file-line"> select CGROUPS</td> + </tr> + <tr> + <td id="L166" class="blob-num js-line-number" data-line-number="166"></td> + <td id="LC166" class="blob-code blob-code-inner js-file-line"> select CGROUP_SCHED</td> + </tr> + <tr> + <td id="L167" class="blob-num js-line-number" data-line-number="167"></td> + <td id="LC167" class="blob-code blob-code-inner js-file-line"> select FAIR_GROUP_SCHED</td> + </tr> + <tr> + <td id="L168" class="blob-num js-line-number" data-line-number="168"></td> + <td id="LC168" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> default y</span></td> + </tr> + <tr> + <td id="L169" class="blob-num js-line-number" data-line-number="169"></td> + <td id="LC169" class="blob-code blob-code-inner js-file-line"> help</td> + </tr> + <tr> + <td id="L170" class="blob-num js-line-number" data-line-number="170"></td> + <td id="LC170" class="blob-code blob-code-inner js-file-line"> This option optimizes the scheduler for common desktop workloads by</td> + </tr> + <tr> + <td id="L171" class="blob-num js-line-number" data-line-number="171"></td> + <td id="LC171" class="blob-code blob-code-inner js-file-line"> automatically creating and populating task groups. This separation</td> + </tr> + <tr> + <td id="L172" class="blob-num js-line-number" data-line-number="172"></td> + <td id="LC172" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz</span></td> + </tr> + <tr> + <td id="L173" class="blob-num js-line-number" data-line-number="173"></td> + <td id="LC173" class="blob-code blob-code-inner js-file-line">index 38ef6d06888e..c8cf984c294e 100644</td> + </tr> + <tr> + <td id="L174" class="blob-num js-line-number" data-line-number="174"></td> + <td id="LC174" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- a/kernel/Kconfig.hz</span></td> + </tr> + <tr> + <td id="L175" class="blob-num js-line-number" data-line-number="175"></td> + <td id="LC175" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ b/kernel/Kconfig.hz</span></td> + </tr> + <tr> + <td id="L176" class="blob-num js-line-number" data-line-number="176"></td> + <td id="LC176" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -46,6 +46,9 @@</span> choice</td> + </tr> + <tr> + <td id="L177" class="blob-num js-line-number" data-line-number="177"></td> + <td id="LC177" class="blob-code blob-code-inner js-file-line"> 1000 Hz is the preferred choice for desktop systems and other</td> + </tr> + <tr> + <td id="L178" class="blob-num js-line-number" data-line-number="178"></td> + <td id="LC178" class="blob-code blob-code-inner js-file-line"> systems requiring fast interactive responses to events.</td> + </tr> + <tr> + <td id="L179" class="blob-num js-line-number" data-line-number="179"></td> + <td id="LC179" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L180" class="blob-num js-line-number" data-line-number="180"></td> + <td id="LC180" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> config HZ_2000</span></td> + </tr> + <tr> + <td id="L181" class="blob-num js-line-number" data-line-number="181"></td> + <td id="LC181" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> bool "2000 HZ"</span></td> + </tr> + <tr> + <td id="L182" class="blob-num js-line-number" data-line-number="182"></td> + <td id="LC182" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L183" class="blob-num js-line-number" data-line-number="183"></td> + <td id="LC183" class="blob-code blob-code-inner js-file-line"> endchoice</td> + </tr> + <tr> + <td id="L184" class="blob-num js-line-number" data-line-number="184"></td> + <td id="LC184" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L185" class="blob-num js-line-number" data-line-number="185"></td> + <td id="LC185" class="blob-code blob-code-inner js-file-line"> config HZ</td> + </tr> + <tr> + <td id="L186" class="blob-num js-line-number" data-line-number="186"></td> + <td id="LC186" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -54,6 +57,7 @@</span> config HZ</td> + </tr> + <tr> + <td id="L187" class="blob-num js-line-number" data-line-number="187"></td> + <td id="LC187" class="blob-code blob-code-inner js-file-line"> default 250 if HZ_250</td> + </tr> + <tr> + <td id="L188" class="blob-num js-line-number" data-line-number="188"></td> + <td id="LC188" class="blob-code blob-code-inner js-file-line"> default 300 if HZ_300</td> + </tr> + <tr> + <td id="L189" class="blob-num js-line-number" data-line-number="189"></td> + <td id="LC189" class="blob-code blob-code-inner js-file-line"> default 1000 if HZ_1000</td> + </tr> + <tr> + <td id="L190" class="blob-num js-line-number" data-line-number="190"></td> + <td id="LC190" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> default 2000 if HZ_2000</span></td> + </tr> + <tr> + <td id="L191" class="blob-num js-line-number" data-line-number="191"></td> + <td id="LC191" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L192" class="blob-num js-line-number" data-line-number="192"></td> + <td id="LC192" class="blob-code blob-code-inner js-file-line"> config SCHED_HRTICK</td> + </tr> + <tr> + <td id="L193" class="blob-num js-line-number" data-line-number="193"></td> + <td id="LC193" class="blob-code blob-code-inner js-file-line"> def_bool HIGH_RES_TIMERS</td> + </tr> + <tr> + <td id="L194" class="blob-num js-line-number" data-line-number="194"></td> + <td id="LC194" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">diff --git a/kernel/sched/core.c b/kernel/sched/core.c</span></td> + </tr> + <tr> + <td id="L195" class="blob-num js-line-number" data-line-number="195"></td> + <td id="LC195" class="blob-code blob-code-inner js-file-line">index 3a150445e0cb..75f80beab9b7 100644</td> + </tr> + <tr> + <td id="L196" class="blob-num js-line-number" data-line-number="196"></td> + <td id="LC196" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- a/kernel/sched/core.c</span></td> + </tr> + <tr> + <td id="L197" class="blob-num js-line-number" data-line-number="197"></td> + <td id="LC197" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ b/kernel/sched/core.c</span></td> + </tr> + <tr> + <td id="L198" class="blob-num js-line-number" data-line-number="198"></td> + <td id="LC198" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -3067,7 +3067,13 @@</span> static void __sched_fork(unsigned long clone_flags, struct task_struct *p)</td> + </tr> + <tr> + <td id="L199" class="blob-num js-line-number" data-line-number="199"></td> + <td id="LC199" class="blob-code blob-code-inner js-file-line"> p->se.sum_exec_runtime = 0;</td> + </tr> + <tr> + <td id="L200" class="blob-num js-line-number" data-line-number="200"></td> + <td id="LC200" class="blob-code blob-code-inner js-file-line"> p->se.prev_sum_exec_runtime = 0;</td> + </tr> + <tr> + <td id="L201" class="blob-num js-line-number" data-line-number="201"></td> + <td id="LC201" class="blob-code blob-code-inner js-file-line"> p->se.nr_migrations = 0;</td> + </tr> + <tr> + <td id="L202" class="blob-num js-line-number" data-line-number="202"></td> + <td id="LC202" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L203" class="blob-num js-line-number" data-line-number="203"></td> + <td id="LC203" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L204" class="blob-num js-line-number" data-line-number="204"></td> + <td id="LC204" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> p->se.cacule_node.vruntime = 0;</span></td> + </tr> + <tr> + <td id="L205" class="blob-num js-line-number" data-line-number="205"></td> + <td id="LC205" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#else</span></td> + </tr> + <tr> + <td id="L206" class="blob-num js-line-number" data-line-number="206"></td> + <td id="LC206" class="blob-code blob-code-inner js-file-line"> p->se.vruntime = 0;</td> + </tr> + <tr> + <td id="L207" class="blob-num js-line-number" data-line-number="207"></td> + <td id="LC207" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L208" class="blob-num js-line-number" data-line-number="208"></td> + <td id="LC208" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L209" class="blob-num js-line-number" data-line-number="209"></td> + <td id="LC209" class="blob-code blob-code-inner js-file-line"> INIT_LIST_HEAD(&p->se.group_node);</td> + </tr> + <tr> + <td id="L210" class="blob-num js-line-number" data-line-number="210"></td> + <td id="LC210" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L211" class="blob-num js-line-number" data-line-number="211"></td> + <td id="LC211" class="blob-code blob-code-inner js-file-line"> #ifdef CONFIG_FAIR_GROUP_SCHED</td> + </tr> + <tr> + <td id="L212" class="blob-num js-line-number" data-line-number="212"></td> + <td id="LC212" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -3352,6 +3358,10 @@</span> void wake_up_new_task(struct task_struct *p)</td> + </tr> + <tr> + <td id="L213" class="blob-num js-line-number" data-line-number="213"></td> + <td id="LC213" class="blob-code blob-code-inner js-file-line"> update_rq_clock(rq);</td> + </tr> + <tr> + <td id="L214" class="blob-num js-line-number" data-line-number="214"></td> + <td id="LC214" class="blob-code blob-code-inner js-file-line"> post_init_entity_util_avg(p);</td> + </tr> + <tr> + <td id="L215" class="blob-num js-line-number" data-line-number="215"></td> + <td id="LC215" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L216" class="blob-num js-line-number" data-line-number="216"></td> + <td id="LC216" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L217" class="blob-num js-line-number" data-line-number="217"></td> + <td id="LC217" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> p->se.cacule_node.cacule_start_time = sched_clock();</span></td> + </tr> + <tr> + <td id="L218" class="blob-num js-line-number" data-line-number="218"></td> + <td id="LC218" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L219" class="blob-num js-line-number" data-line-number="219"></td> + <td id="LC219" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L220" class="blob-num js-line-number" data-line-number="220"></td> + <td id="LC220" class="blob-code blob-code-inner js-file-line"> activate_task(rq, p, ENQUEUE_NOCLOCK);</td> + </tr> + <tr> + <td id="L221" class="blob-num js-line-number" data-line-number="221"></td> + <td id="LC221" class="blob-code blob-code-inner js-file-line"> trace_sched_wakeup_new(p);</td> + </tr> + <tr> + <td id="L222" class="blob-num js-line-number" data-line-number="222"></td> + <td id="LC222" class="blob-code blob-code-inner js-file-line"> check_preempt_curr(rq, p, WF_FORK);</td> + </tr> + <tr> + <td id="L223" class="blob-num js-line-number" data-line-number="223"></td> + <td id="LC223" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -7066,6 +7076,10 @@</span> void __init sched_init(void)</td> + </tr> + <tr> + <td id="L224" class="blob-num js-line-number" data-line-number="224"></td> + <td id="LC224" class="blob-code blob-code-inner js-file-line"> BUG_ON(&dl_sched_class + 1 != &stop_sched_class);</td> + </tr> + <tr> + <td id="L225" class="blob-num js-line-number" data-line-number="225"></td> + <td id="LC225" class="blob-code blob-code-inner js-file-line"> #endif</td> + </tr> + <tr> + <td id="L226" class="blob-num js-line-number" data-line-number="226"></td> + <td id="LC226" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L227" class="blob-num js-line-number" data-line-number="227"></td> + <td id="LC227" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L228" class="blob-num js-line-number" data-line-number="228"></td> + <td id="LC228" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> printk(KERN_INFO "CacULE CPU scheduler v5.10 by Hamad Al Marri.");</span></td> + </tr> + <tr> + <td id="L229" class="blob-num js-line-number" data-line-number="229"></td> + <td id="LC229" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L230" class="blob-num js-line-number" data-line-number="230"></td> + <td id="LC230" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L231" class="blob-num js-line-number" data-line-number="231"></td> + <td id="LC231" class="blob-code blob-code-inner js-file-line"> wait_bit_init();</td> + </tr> + <tr> + <td id="L232" class="blob-num js-line-number" data-line-number="232"></td> + <td id="LC232" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L233" class="blob-num js-line-number" data-line-number="233"></td> + <td id="LC233" class="blob-code blob-code-inner js-file-line"> #ifdef CONFIG_FAIR_GROUP_SCHED</td> + </tr> + <tr> + <td id="L234" class="blob-num js-line-number" data-line-number="234"></td> + <td id="LC234" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c</span></td> + </tr> + <tr> + <td id="L235" class="blob-num js-line-number" data-line-number="235"></td> + <td id="LC235" class="blob-code blob-code-inner js-file-line">index 2357921580f9..ac08a7ced508 100644</td> + </tr> + <tr> + <td id="L236" class="blob-num js-line-number" data-line-number="236"></td> + <td id="LC236" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- a/kernel/sched/debug.c</span></td> + </tr> + <tr> + <td id="L237" class="blob-num js-line-number" data-line-number="237"></td> + <td id="LC237" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ b/kernel/sched/debug.c</span></td> + </tr> + <tr> + <td id="L238" class="blob-num js-line-number" data-line-number="238"></td> + <td id="LC238" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -557,21 +557,27 @@</span> void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)</td> + </tr> + <tr> + <td id="L239" class="blob-num js-line-number" data-line-number="239"></td> + <td id="LC239" class="blob-code blob-code-inner js-file-line"> last = __pick_last_entity(cfs_rq);</td> + </tr> + <tr> + <td id="L240" class="blob-num js-line-number" data-line-number="240"></td> + <td id="LC240" class="blob-code blob-code-inner js-file-line"> if (last)</td> + </tr> + <tr> + <td id="L241" class="blob-num js-line-number" data-line-number="241"></td> + <td id="LC241" class="blob-code blob-code-inner js-file-line"> max_vruntime = last->vruntime;</td> + </tr> + <tr> + <td id="L242" class="blob-num js-line-number" data-line-number="242"></td> + <td id="LC242" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L243" class="blob-num js-line-number" data-line-number="243"></td> + <td id="LC243" class="blob-code blob-code-inner js-file-line"> min_vruntime = cfs_rq->min_vruntime;</td> + </tr> + <tr> + <td id="L244" class="blob-num js-line-number" data-line-number="244"></td> + <td id="LC244" class="blob-code blob-code-inner js-file-line"> rq0_min_vruntime = cpu_rq(0)->cfs.min_vruntime;</td> + </tr> + <tr> + <td id="L245" class="blob-num js-line-number" data-line-number="245"></td> + <td id="LC245" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L246" class="blob-num js-line-number" data-line-number="246"></td> + <td id="LC246" class="blob-code blob-code-inner js-file-line"> raw_spin_unlock_irqrestore(&rq->lock, flags);</td> + </tr> + <tr> + <td id="L247" class="blob-num js-line-number" data-line-number="247"></td> + <td id="LC247" class="blob-code blob-code-inner js-file-line"> SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "MIN_vruntime",</td> + </tr> + <tr> + <td id="L248" class="blob-num js-line-number" data-line-number="248"></td> + <td id="LC248" class="blob-code blob-code-inner js-file-line"> SPLIT_NS(MIN_vruntime));</td> + </tr> + <tr> + <td id="L249" class="blob-num js-line-number" data-line-number="249"></td> + <td id="LC249" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L250" class="blob-num js-line-number" data-line-number="250"></td> + <td id="LC250" class="blob-code blob-code-inner js-file-line"> SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "min_vruntime",</td> + </tr> + <tr> + <td id="L251" class="blob-num js-line-number" data-line-number="251"></td> + <td id="LC251" class="blob-code blob-code-inner js-file-line"> SPLIT_NS(min_vruntime));</td> + </tr> + <tr> + <td id="L252" class="blob-num js-line-number" data-line-number="252"></td> + <td id="LC252" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L253" class="blob-num js-line-number" data-line-number="253"></td> + <td id="LC253" class="blob-code blob-code-inner js-file-line"> SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "max_vruntime",</td> + </tr> + <tr> + <td id="L254" class="blob-num js-line-number" data-line-number="254"></td> + <td id="LC254" class="blob-code blob-code-inner js-file-line"> SPLIT_NS(max_vruntime));</td> + </tr> + <tr> + <td id="L255" class="blob-num js-line-number" data-line-number="255"></td> + <td id="LC255" class="blob-code blob-code-inner js-file-line"> spread = max_vruntime - MIN_vruntime;</td> + </tr> + <tr> + <td id="L256" class="blob-num js-line-number" data-line-number="256"></td> + <td id="LC256" class="blob-code blob-code-inner js-file-line"> SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "spread",</td> + </tr> + <tr> + <td id="L257" class="blob-num js-line-number" data-line-number="257"></td> + <td id="LC257" class="blob-code blob-code-inner js-file-line"> SPLIT_NS(spread));</td> + </tr> + <tr> + <td id="L258" class="blob-num js-line-number" data-line-number="258"></td> + <td id="LC258" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L259" class="blob-num js-line-number" data-line-number="259"></td> + <td id="LC259" class="blob-code blob-code-inner js-file-line"> spread0 = min_vruntime - rq0_min_vruntime;</td> + </tr> + <tr> + <td id="L260" class="blob-num js-line-number" data-line-number="260"></td> + <td id="LC260" class="blob-code blob-code-inner js-file-line"> SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "spread0",</td> + </tr> + <tr> + <td id="L261" class="blob-num js-line-number" data-line-number="261"></td> + <td id="LC261" class="blob-code blob-code-inner js-file-line"> SPLIT_NS(spread0));</td> + </tr> + <tr> + <td id="L262" class="blob-num js-line-number" data-line-number="262"></td> + <td id="LC262" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L263" class="blob-num js-line-number" data-line-number="263"></td> + <td id="LC263" class="blob-code blob-code-inner js-file-line"> SEQ_printf(m, " .%-30s: %d\n", "nr_spread_over",</td> + </tr> + <tr> + <td id="L264" class="blob-num js-line-number" data-line-number="264"></td> + <td id="LC264" class="blob-code blob-code-inner js-file-line"> cfs_rq->nr_spread_over);</td> + </tr> + <tr> + <td id="L265" class="blob-num js-line-number" data-line-number="265"></td> + <td id="LC265" class="blob-code blob-code-inner js-file-line"> SEQ_printf(m, " .%-30s: %d\n", "nr_running", cfs_rq->nr_running);</td> + </tr> + <tr> + <td id="L266" class="blob-num js-line-number" data-line-number="266"></td> + <td id="LC266" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c</span></td> + </tr> + <tr> + <td id="L267" class="blob-num js-line-number" data-line-number="267"></td> + <td id="LC267" class="blob-code blob-code-inner js-file-line">index 348605306027..e9681f0fb831 100644</td> + </tr> + <tr> + <td id="L268" class="blob-num js-line-number" data-line-number="268"></td> + <td id="LC268" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- a/kernel/sched/fair.c</span></td> + </tr> + <tr> + <td id="L269" class="blob-num js-line-number" data-line-number="269"></td> + <td id="LC269" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ b/kernel/sched/fair.c</span></td> + </tr> + <tr> + <td id="L270" class="blob-num js-line-number" data-line-number="270"></td> + <td id="LC270" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -19,6 +19,10 @@</span></td> + </tr> + <tr> + <td id="L271" class="blob-num js-line-number" data-line-number="271"></td> + <td id="LC271" class="blob-code blob-code-inner js-file-line"> *</td> + </tr> + <tr> + <td id="L272" class="blob-num js-line-number" data-line-number="272"></td> + <td id="LC272" class="blob-code blob-code-inner js-file-line"> * Adaptive scheduling granularity, math enhancements by Peter Zijlstra</td> + </tr> + <tr> + <td id="L273" class="blob-num js-line-number" data-line-number="273"></td> + <td id="LC273" class="blob-code blob-code-inner js-file-line"> * Copyright (C) 2007 Red Hat, Inc., Peter Zijlstra</td> + </tr> + <tr> + <td id="L274" class="blob-num js-line-number" data-line-number="274"></td> + <td id="LC274" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> *</span></td> + </tr> + <tr> + <td id="L275" class="blob-num js-line-number" data-line-number="275"></td> + <td id="LC275" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * CacULE enhancements CPU cache and scheduler based on</span></td> + </tr> + <tr> + <td id="L276" class="blob-num js-line-number" data-line-number="276"></td> + <td id="LC276" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * Interactivity Score.</span></td> + </tr> + <tr> + <td id="L277" class="blob-num js-line-number" data-line-number="277"></td> + <td id="LC277" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * (C) 2020 Hamad Al Marri <hamad.s.almarri@gmail.com></span></td> + </tr> + <tr> + <td id="L278" class="blob-num js-line-number" data-line-number="278"></td> + <td id="LC278" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L279" class="blob-num js-line-number" data-line-number="279"></td> + <td id="LC279" class="blob-code blob-code-inner js-file-line"> #include "sched.h"</td> + </tr> + <tr> + <td id="L280" class="blob-num js-line-number" data-line-number="280"></td> + <td id="LC280" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L281" class="blob-num js-line-number" data-line-number="281"></td> + <td id="LC281" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -113,6 +117,11 @@</span> int __weak arch_asym_cpu_priority(int cpu)</td> + </tr> + <tr> + <td id="L282" class="blob-num js-line-number" data-line-number="282"></td> + <td id="LC282" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L283" class="blob-num js-line-number" data-line-number="283"></td> + <td id="LC283" class="blob-code blob-code-inner js-file-line"> #define fits_capacity(cap, max) ((cap) * 1280 < (max) * 1024)</td> + </tr> + <tr> + <td id="L284" class="blob-num js-line-number" data-line-number="284"></td> + <td id="LC284" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L285" class="blob-num js-line-number" data-line-number="285"></td> + <td id="LC285" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L286" class="blob-num js-line-number" data-line-number="286"></td> + <td id="LC286" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L287" class="blob-num js-line-number" data-line-number="287"></td> + <td id="LC287" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>int __read_mostly cacule_max_lifetime = 22000; // in ms</span></td> + </tr> + <tr> + <td id="L288" class="blob-num js-line-number" data-line-number="288"></td> + <td id="LC288" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>int __read_mostly interactivity_factor = 32768;</span></td> + </tr> + <tr> + <td id="L289" class="blob-num js-line-number" data-line-number="289"></td> + <td id="LC289" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>unsigned int __read_mostly interactivity_threshold = 20480;</span></td> + </tr> + <tr> + <td id="L290" class="blob-num js-line-number" data-line-number="290"></td> + <td id="LC290" class="blob-code blob-code-inner js-file-line"> #endif</td> + </tr> + <tr> + <td id="L291" class="blob-num js-line-number" data-line-number="291"></td> + <td id="LC291" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L292" class="blob-num js-line-number" data-line-number="292"></td> + <td id="LC292" class="blob-code blob-code-inner js-file-line"> #ifdef CONFIG_CFS_BANDWIDTH</td> + </tr> + <tr> + <td id="L293" class="blob-num js-line-number" data-line-number="293"></td> + <td id="LC293" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -253,6 +262,14 @@</span> static u64 __calc_delta(u64 delta_exec, unsigned long weight, struct load_weight</td> + </tr> + <tr> + <td id="L294" class="blob-num js-line-number" data-line-number="294"></td> + <td id="LC294" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L295" class="blob-num js-line-number" data-line-number="295"></td> + <td id="LC295" class="blob-code blob-code-inner js-file-line"> const struct sched_class fair_sched_class;</td> + </tr> + <tr> + <td id="L296" class="blob-num js-line-number" data-line-number="296"></td> + <td id="LC296" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L297" class="blob-num js-line-number" data-line-number="297"></td> + <td id="LC297" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L298" class="blob-num js-line-number" data-line-number="298"></td> + <td id="LC298" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L299" class="blob-num js-line-number" data-line-number="299"></td> + <td id="LC299" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>static inline struct sched_entity *se_of(struct cacule_node *cn)</span></td> + </tr> + <tr> + <td id="L300" class="blob-num js-line-number" data-line-number="300"></td> + <td id="LC300" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L301" class="blob-num js-line-number" data-line-number="301"></td> + <td id="LC301" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return container_of(cn, struct sched_entity, cacule_node);</span></td> + </tr> + <tr> + <td id="L302" class="blob-num js-line-number" data-line-number="302"></td> + <td id="LC302" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L303" class="blob-num js-line-number" data-line-number="303"></td> + <td id="LC303" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L304" class="blob-num js-line-number" data-line-number="304"></td> + <td id="LC304" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L305" class="blob-num js-line-number" data-line-number="305"></td> + <td id="LC305" class="blob-code blob-code-inner js-file-line"> /**************************************************************</td> + </tr> + <tr> + <td id="L306" class="blob-num js-line-number" data-line-number="306"></td> + <td id="LC306" class="blob-code blob-code-inner js-file-line"> * CFS operations on generic schedulable entities:</td> + </tr> + <tr> + <td id="L307" class="blob-num js-line-number" data-line-number="307"></td> + <td id="LC307" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L308" class="blob-num js-line-number" data-line-number="308"></td> + <td id="LC308" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -512,7 +529,7 @@</span> void account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec);</td> + </tr> + <tr> + <td id="L309" class="blob-num js-line-number" data-line-number="309"></td> + <td id="LC309" class="blob-code blob-code-inner js-file-line"> /**************************************************************</td> + </tr> + <tr> + <td id="L310" class="blob-num js-line-number" data-line-number="310"></td> + <td id="LC310" class="blob-code blob-code-inner js-file-line"> * Scheduling class tree data structure manipulation methods:</td> + </tr> + <tr> + <td id="L311" class="blob-num js-line-number" data-line-number="311"></td> + <td id="LC311" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L312" class="blob-num js-line-number" data-line-number="312"></td> + <td id="LC312" class="blob-code blob-code-inner js-file-line"><span class="pl-md"><span class="pl-md">-</span></span></td> + </tr> + <tr> + <td id="L313" class="blob-num js-line-number" data-line-number="313"></td> + <td id="LC313" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L314" class="blob-num js-line-number" data-line-number="314"></td> + <td id="LC314" class="blob-code blob-code-inner js-file-line"> static inline u64 max_vruntime(u64 max_vruntime, u64 vruntime)</td> + </tr> + <tr> + <td id="L315" class="blob-num js-line-number" data-line-number="315"></td> + <td id="LC315" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L316" class="blob-num js-line-number" data-line-number="316"></td> + <td id="LC316" class="blob-code blob-code-inner js-file-line"> s64 delta = (s64)(vruntime - max_vruntime);</td> + </tr> + <tr> + <td id="L317" class="blob-num js-line-number" data-line-number="317"></td> + <td id="LC317" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -568,7 +585,169 @@</span> static void update_min_vruntime(struct cfs_rq *cfs_rq)</td> + </tr> + <tr> + <td id="L318" class="blob-num js-line-number" data-line-number="318"></td> + <td id="LC318" class="blob-code blob-code-inner js-file-line"> cfs_rq->min_vruntime_copy = cfs_rq->min_vruntime;</td> + </tr> + <tr> + <td id="L319" class="blob-num js-line-number" data-line-number="319"></td> + <td id="LC319" class="blob-code blob-code-inner js-file-line"> #endif</td> + </tr> + <tr> + <td id="L320" class="blob-num js-line-number" data-line-number="320"></td> + <td id="LC320" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L321" class="blob-num js-line-number" data-line-number="321"></td> + <td id="LC321" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L322" class="blob-num js-line-number" data-line-number="322"></td> + <td id="LC322" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L323" class="blob-num js-line-number" data-line-number="323"></td> + <td id="LC323" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L324" class="blob-num js-line-number" data-line-number="324"></td> + <td id="LC324" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>static unsigned int</span></td> + </tr> + <tr> + <td id="L325" class="blob-num js-line-number" data-line-number="325"></td> + <td id="LC325" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>calc_interactivity(u64 now, struct cacule_node *se)</span></td> + </tr> + <tr> + <td id="L326" class="blob-num js-line-number" data-line-number="326"></td> + <td id="LC326" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L327" class="blob-num js-line-number" data-line-number="327"></td> + <td id="LC327" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> u64 l_se, vr_se, sleep_se = 1ULL, u64_factor;</span></td> + </tr> + <tr> + <td id="L328" class="blob-num js-line-number" data-line-number="328"></td> + <td id="LC328" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> unsigned int score_se;</span></td> + </tr> + <tr> + <td id="L329" class="blob-num js-line-number" data-line-number="329"></td> + <td id="LC329" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L330" class="blob-num js-line-number" data-line-number="330"></td> + <td id="LC330" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> /*</span></td> + </tr> + <tr> + <td id="L331" class="blob-num js-line-number" data-line-number="331"></td> + <td id="LC331" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * in case of vruntime==0, logical OR with 1 would</span></td> + </tr> + <tr> + <td id="L332" class="blob-num js-line-number" data-line-number="332"></td> + <td id="LC332" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * make sure that the least sig. bit is 1</span></td> + </tr> + <tr> + <td id="L333" class="blob-num js-line-number" data-line-number="333"></td> + <td id="LC333" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> */</span></td> + </tr> + <tr> + <td id="L334" class="blob-num js-line-number" data-line-number="334"></td> + <td id="LC334" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> l_se = now - se->cacule_start_time;</span></td> + </tr> + <tr> + <td id="L335" class="blob-num js-line-number" data-line-number="335"></td> + <td id="LC335" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> vr_se = se->vruntime | 1;</span></td> + </tr> + <tr> + <td id="L336" class="blob-num js-line-number" data-line-number="336"></td> + <td id="LC336" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> u64_factor = interactivity_factor;</span></td> + </tr> + <tr> + <td id="L337" class="blob-num js-line-number" data-line-number="337"></td> + <td id="LC337" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L338" class="blob-num js-line-number" data-line-number="338"></td> + <td id="LC338" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> /* safety check */</span></td> + </tr> + <tr> + <td id="L339" class="blob-num js-line-number" data-line-number="339"></td> + <td id="LC339" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (likely(l_se > vr_se))</span></td> + </tr> + <tr> + <td id="L340" class="blob-num js-line-number" data-line-number="340"></td> + <td id="LC340" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> sleep_se = (l_se - vr_se) | 1;</span></td> + </tr> + <tr> + <td id="L341" class="blob-num js-line-number" data-line-number="341"></td> + <td id="LC341" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L342" class="blob-num js-line-number" data-line-number="342"></td> + <td id="LC342" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (sleep_se >= vr_se)</span></td> + </tr> + <tr> + <td id="L343" class="blob-num js-line-number" data-line-number="343"></td> + <td id="LC343" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> score_se = u64_factor / (sleep_se / vr_se);</span></td> + </tr> + <tr> + <td id="L344" class="blob-num js-line-number" data-line-number="344"></td> + <td id="LC344" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> else</span></td> + </tr> + <tr> + <td id="L345" class="blob-num js-line-number" data-line-number="345"></td> + <td id="LC345" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> score_se = (u64_factor << 1) - (u64_factor / (vr_se / sleep_se));</span></td> + </tr> + <tr> + <td id="L346" class="blob-num js-line-number" data-line-number="346"></td> + <td id="LC346" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L347" class="blob-num js-line-number" data-line-number="347"></td> + <td id="LC347" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return score_se;</span></td> + </tr> + <tr> + <td id="L348" class="blob-num js-line-number" data-line-number="348"></td> + <td id="LC348" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L349" class="blob-num js-line-number" data-line-number="349"></td> + <td id="LC349" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L350" class="blob-num js-line-number" data-line-number="350"></td> + <td id="LC350" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>static inline int is_interactive(struct cacule_node *cn)</span></td> + </tr> + <tr> + <td id="L351" class="blob-num js-line-number" data-line-number="351"></td> + <td id="LC351" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L352" class="blob-num js-line-number" data-line-number="352"></td> + <td id="LC352" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (se_of(cn)->vruntime == 0)</span></td> + </tr> + <tr> + <td id="L353" class="blob-num js-line-number" data-line-number="353"></td> + <td id="LC353" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return 0;</span></td> + </tr> + <tr> + <td id="L354" class="blob-num js-line-number" data-line-number="354"></td> + <td id="LC354" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L355" class="blob-num js-line-number" data-line-number="355"></td> + <td id="LC355" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return calc_interactivity(sched_clock(), cn) < interactivity_threshold;</span></td> + </tr> + <tr> + <td id="L356" class="blob-num js-line-number" data-line-number="356"></td> + <td id="LC356" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L357" class="blob-num js-line-number" data-line-number="357"></td> + <td id="LC357" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L358" class="blob-num js-line-number" data-line-number="358"></td> + <td id="LC358" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>static inline int</span></td> + </tr> + <tr> + <td id="L359" class="blob-num js-line-number" data-line-number="359"></td> + <td id="LC359" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>entity_before_cached(u64 now, unsigned int score_curr, struct cacule_node *se)</span></td> + </tr> + <tr> + <td id="L360" class="blob-num js-line-number" data-line-number="360"></td> + <td id="LC360" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L361" class="blob-num js-line-number" data-line-number="361"></td> + <td id="LC361" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> unsigned int score_se;</span></td> + </tr> + <tr> + <td id="L362" class="blob-num js-line-number" data-line-number="362"></td> + <td id="LC362" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> int diff;</span></td> + </tr> + <tr> + <td id="L363" class="blob-num js-line-number" data-line-number="363"></td> + <td id="LC363" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L364" class="blob-num js-line-number" data-line-number="364"></td> + <td id="LC364" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> score_se = calc_interactivity(now, se);</span></td> + </tr> + <tr> + <td id="L365" class="blob-num js-line-number" data-line-number="365"></td> + <td id="LC365" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> diff = score_se - score_curr;</span></td> + </tr> + <tr> + <td id="L366" class="blob-num js-line-number" data-line-number="366"></td> + <td id="LC366" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L367" class="blob-num js-line-number" data-line-number="367"></td> + <td id="LC367" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (diff <= 0)</span></td> + </tr> + <tr> + <td id="L368" class="blob-num js-line-number" data-line-number="368"></td> + <td id="LC368" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return 1;</span></td> + </tr> + <tr> + <td id="L369" class="blob-num js-line-number" data-line-number="369"></td> + <td id="LC369" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L370" class="blob-num js-line-number" data-line-number="370"></td> + <td id="LC370" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return -1;</span></td> + </tr> + <tr> + <td id="L371" class="blob-num js-line-number" data-line-number="371"></td> + <td id="LC371" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L372" class="blob-num js-line-number" data-line-number="372"></td> + <td id="LC372" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L373" class="blob-num js-line-number" data-line-number="373"></td> + <td id="LC373" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>/*</span></td> + </tr> + <tr> + <td id="L374" class="blob-num js-line-number" data-line-number="374"></td> + <td id="LC374" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * Does se have lower interactivity score value (i.e. interactive) than curr? If yes, return 1,</span></td> + </tr> + <tr> + <td id="L375" class="blob-num js-line-number" data-line-number="375"></td> + <td id="LC375" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * otherwise return -1</span></td> + </tr> + <tr> + <td id="L376" class="blob-num js-line-number" data-line-number="376"></td> + <td id="LC376" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * se is before curr if se has lower interactivity score value</span></td> + </tr> + <tr> + <td id="L377" class="blob-num js-line-number" data-line-number="377"></td> + <td id="LC377" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * the lower score, the more interactive</span></td> + </tr> + <tr> + <td id="L378" class="blob-num js-line-number" data-line-number="378"></td> + <td id="LC378" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> */</span></td> + </tr> + <tr> + <td id="L379" class="blob-num js-line-number" data-line-number="379"></td> + <td id="LC379" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>static inline int</span></td> + </tr> + <tr> + <td id="L380" class="blob-num js-line-number" data-line-number="380"></td> + <td id="LC380" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>entity_before(u64 now, struct cacule_node *curr, struct cacule_node *se)</span></td> + </tr> + <tr> + <td id="L381" class="blob-num js-line-number" data-line-number="381"></td> + <td id="LC381" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L382" class="blob-num js-line-number" data-line-number="382"></td> + <td id="LC382" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> unsigned int score_curr, score_se;</span></td> + </tr> + <tr> + <td id="L383" class="blob-num js-line-number" data-line-number="383"></td> + <td id="LC383" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> int diff;</span></td> + </tr> + <tr> + <td id="L384" class="blob-num js-line-number" data-line-number="384"></td> + <td id="LC384" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L385" class="blob-num js-line-number" data-line-number="385"></td> + <td id="LC385" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> score_curr = calc_interactivity(now, curr);</span></td> + </tr> + <tr> + <td id="L386" class="blob-num js-line-number" data-line-number="386"></td> + <td id="LC386" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> score_se = calc_interactivity(now, se);</span></td> + </tr> + <tr> + <td id="L387" class="blob-num js-line-number" data-line-number="387"></td> + <td id="LC387" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L388" class="blob-num js-line-number" data-line-number="388"></td> + <td id="LC388" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> diff = score_se - score_curr;</span></td> + </tr> + <tr> + <td id="L389" class="blob-num js-line-number" data-line-number="389"></td> + <td id="LC389" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L390" class="blob-num js-line-number" data-line-number="390"></td> + <td id="LC390" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (diff < 0)</span></td> + </tr> + <tr> + <td id="L391" class="blob-num js-line-number" data-line-number="391"></td> + <td id="LC391" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return 1;</span></td> + </tr> + <tr> + <td id="L392" class="blob-num js-line-number" data-line-number="392"></td> + <td id="LC392" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L393" class="blob-num js-line-number" data-line-number="393"></td> + <td id="LC393" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return -1;</span></td> + </tr> + <tr> + <td id="L394" class="blob-num js-line-number" data-line-number="394"></td> + <td id="LC394" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L395" class="blob-num js-line-number" data-line-number="395"></td> + <td id="LC395" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L396" class="blob-num js-line-number" data-line-number="396"></td> + <td id="LC396" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>/*</span></td> + </tr> + <tr> + <td id="L397" class="blob-num js-line-number" data-line-number="397"></td> + <td id="LC397" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * Enqueue an entity</span></td> + </tr> + <tr> + <td id="L398" class="blob-num js-line-number" data-line-number="398"></td> + <td id="LC398" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> */</span></td> + </tr> + <tr> + <td id="L399" class="blob-num js-line-number" data-line-number="399"></td> + <td id="LC399" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>static void __enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *_se)</span></td> + </tr> + <tr> + <td id="L400" class="blob-num js-line-number" data-line-number="400"></td> + <td id="LC400" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L401" class="blob-num js-line-number" data-line-number="401"></td> + <td id="LC401" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node *se = &(_se->cacule_node);</span></td> + </tr> + <tr> + <td id="L402" class="blob-num js-line-number" data-line-number="402"></td> + <td id="LC402" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node *iter, *next = NULL;</span></td> + </tr> + <tr> + <td id="L403" class="blob-num js-line-number" data-line-number="403"></td> + <td id="LC403" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> u64 now = sched_clock();</span></td> + </tr> + <tr> + <td id="L404" class="blob-num js-line-number" data-line-number="404"></td> + <td id="LC404" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> unsigned int score_se = calc_interactivity(now, se);</span></td> + </tr> + <tr> + <td id="L405" class="blob-num js-line-number" data-line-number="405"></td> + <td id="LC405" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L406" class="blob-num js-line-number" data-line-number="406"></td> + <td id="LC406" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> se->next = NULL;</span></td> + </tr> + <tr> + <td id="L407" class="blob-num js-line-number" data-line-number="407"></td> + <td id="LC407" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> se->prev = NULL;</span></td> + </tr> + <tr> + <td id="L408" class="blob-num js-line-number" data-line-number="408"></td> + <td id="LC408" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L409" class="blob-num js-line-number" data-line-number="409"></td> + <td id="LC409" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (likely(cfs_rq->head)) {</span></td> + </tr> + <tr> + <td id="L410" class="blob-num js-line-number" data-line-number="410"></td> + <td id="LC410" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L411" class="blob-num js-line-number" data-line-number="411"></td> + <td id="LC411" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // start from tail</span></td> + </tr> + <tr> + <td id="L412" class="blob-num js-line-number" data-line-number="412"></td> + <td id="LC412" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> iter = cfs_rq->tail;</span></td> + </tr> + <tr> + <td id="L413" class="blob-num js-line-number" data-line-number="413"></td> + <td id="LC413" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L414" class="blob-num js-line-number" data-line-number="414"></td> + <td id="LC414" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // does se have higher IS than iter?</span></td> + </tr> + <tr> + <td id="L415" class="blob-num js-line-number" data-line-number="415"></td> + <td id="LC415" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> while (iter && entity_before_cached(now, score_se, iter) == -1) {</span></td> + </tr> + <tr> + <td id="L416" class="blob-num js-line-number" data-line-number="416"></td> + <td id="LC416" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> next = iter;</span></td> + </tr> + <tr> + <td id="L417" class="blob-num js-line-number" data-line-number="417"></td> + <td id="LC417" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> iter = iter->prev;</span></td> + </tr> + <tr> + <td id="L418" class="blob-num js-line-number" data-line-number="418"></td> + <td id="LC418" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> }</span></td> + </tr> + <tr> + <td id="L419" class="blob-num js-line-number" data-line-number="419"></td> + <td id="LC419" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L420" class="blob-num js-line-number" data-line-number="420"></td> + <td id="LC420" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // se in tail position</span></td> + </tr> + <tr> + <td id="L421" class="blob-num js-line-number" data-line-number="421"></td> + <td id="LC421" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (iter == cfs_rq->tail) {</span></td> + </tr> + <tr> + <td id="L422" class="blob-num js-line-number" data-line-number="422"></td> + <td id="LC422" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->tail->next = se;</span></td> + </tr> + <tr> + <td id="L423" class="blob-num js-line-number" data-line-number="423"></td> + <td id="LC423" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> se->prev = cfs_rq->tail;</span></td> + </tr> + <tr> + <td id="L424" class="blob-num js-line-number" data-line-number="424"></td> + <td id="LC424" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L425" class="blob-num js-line-number" data-line-number="425"></td> + <td id="LC425" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->tail = se;</span></td> + </tr> + <tr> + <td id="L426" class="blob-num js-line-number" data-line-number="426"></td> + <td id="LC426" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> }</span></td> + </tr> + <tr> + <td id="L427" class="blob-num js-line-number" data-line-number="427"></td> + <td id="LC427" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // else if not head no tail, insert se after iter</span></td> + </tr> + <tr> + <td id="L428" class="blob-num js-line-number" data-line-number="428"></td> + <td id="LC428" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> else if (iter) {</span></td> + </tr> + <tr> + <td id="L429" class="blob-num js-line-number" data-line-number="429"></td> + <td id="LC429" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> se->next = next;</span></td> + </tr> + <tr> + <td id="L430" class="blob-num js-line-number" data-line-number="430"></td> + <td id="LC430" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> se->prev = iter;</span></td> + </tr> + <tr> + <td id="L431" class="blob-num js-line-number" data-line-number="431"></td> + <td id="LC431" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L432" class="blob-num js-line-number" data-line-number="432"></td> + <td id="LC432" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> iter->next = se;</span></td> + </tr> + <tr> + <td id="L433" class="blob-num js-line-number" data-line-number="433"></td> + <td id="LC433" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> next->prev = se;</span></td> + </tr> + <tr> + <td id="L434" class="blob-num js-line-number" data-line-number="434"></td> + <td id="LC434" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> }</span></td> + </tr> + <tr> + <td id="L435" class="blob-num js-line-number" data-line-number="435"></td> + <td id="LC435" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // insert se at head</span></td> + </tr> + <tr> + <td id="L436" class="blob-num js-line-number" data-line-number="436"></td> + <td id="LC436" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> else {</span></td> + </tr> + <tr> + <td id="L437" class="blob-num js-line-number" data-line-number="437"></td> + <td id="LC437" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> se->next = cfs_rq->head;</span></td> + </tr> + <tr> + <td id="L438" class="blob-num js-line-number" data-line-number="438"></td> + <td id="LC438" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->head->prev = se;</span></td> + </tr> + <tr> + <td id="L439" class="blob-num js-line-number" data-line-number="439"></td> + <td id="LC439" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L440" class="blob-num js-line-number" data-line-number="440"></td> + <td id="LC440" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // lastly reset the head</span></td> + </tr> + <tr> + <td id="L441" class="blob-num js-line-number" data-line-number="441"></td> + <td id="LC441" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->head = se;</span></td> + </tr> + <tr> + <td id="L442" class="blob-num js-line-number" data-line-number="442"></td> + <td id="LC442" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> }</span></td> + </tr> + <tr> + <td id="L443" class="blob-num js-line-number" data-line-number="443"></td> + <td id="LC443" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> } else {</span></td> + </tr> + <tr> + <td id="L444" class="blob-num js-line-number" data-line-number="444"></td> + <td id="LC444" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // if empty rq</span></td> + </tr> + <tr> + <td id="L445" class="blob-num js-line-number" data-line-number="445"></td> + <td id="LC445" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->head = se;</span></td> + </tr> + <tr> + <td id="L446" class="blob-num js-line-number" data-line-number="446"></td> + <td id="LC446" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->tail = se;</span></td> + </tr> + <tr> + <td id="L447" class="blob-num js-line-number" data-line-number="447"></td> + <td id="LC447" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> }</span></td> + </tr> + <tr> + <td id="L448" class="blob-num js-line-number" data-line-number="448"></td> + <td id="LC448" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L449" class="blob-num js-line-number" data-line-number="449"></td> + <td id="LC449" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L450" class="blob-num js-line-number" data-line-number="450"></td> + <td id="LC450" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>static void __dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *_se)</span></td> + </tr> + <tr> + <td id="L451" class="blob-num js-line-number" data-line-number="451"></td> + <td id="LC451" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L452" class="blob-num js-line-number" data-line-number="452"></td> + <td id="LC452" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node *se = &(_se->cacule_node);</span></td> + </tr> + <tr> + <td id="L453" class="blob-num js-line-number" data-line-number="453"></td> + <td id="LC453" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L454" class="blob-num js-line-number" data-line-number="454"></td> + <td id="LC454" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // if only one se in rq</span></td> + </tr> + <tr> + <td id="L455" class="blob-num js-line-number" data-line-number="455"></td> + <td id="LC455" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (cfs_rq->head == cfs_rq->tail) {</span></td> + </tr> + <tr> + <td id="L456" class="blob-num js-line-number" data-line-number="456"></td> + <td id="LC456" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->head = NULL;</span></td> + </tr> + <tr> + <td id="L457" class="blob-num js-line-number" data-line-number="457"></td> + <td id="LC457" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->tail = NULL;</span></td> + </tr> + <tr> + <td id="L458" class="blob-num js-line-number" data-line-number="458"></td> + <td id="LC458" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L459" class="blob-num js-line-number" data-line-number="459"></td> + <td id="LC459" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> } else if (se == cfs_rq->head) {</span></td> + </tr> + <tr> + <td id="L460" class="blob-num js-line-number" data-line-number="460"></td> + <td id="LC460" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // if it is the head</span></td> + </tr> + <tr> + <td id="L461" class="blob-num js-line-number" data-line-number="461"></td> + <td id="LC461" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->head = cfs_rq->head->next;</span></td> + </tr> + <tr> + <td id="L462" class="blob-num js-line-number" data-line-number="462"></td> + <td id="LC462" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->head->prev = NULL;</span></td> + </tr> + <tr> + <td id="L463" class="blob-num js-line-number" data-line-number="463"></td> + <td id="LC463" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> } else if (se == cfs_rq->tail) {</span></td> + </tr> + <tr> + <td id="L464" class="blob-num js-line-number" data-line-number="464"></td> + <td id="LC464" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // if it is the tail</span></td> + </tr> + <tr> + <td id="L465" class="blob-num js-line-number" data-line-number="465"></td> + <td id="LC465" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->tail = cfs_rq->tail->prev;</span></td> + </tr> + <tr> + <td id="L466" class="blob-num js-line-number" data-line-number="466"></td> + <td id="LC466" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->tail->next = NULL;</span></td> + </tr> + <tr> + <td id="L467" class="blob-num js-line-number" data-line-number="467"></td> + <td id="LC467" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> } else {</span></td> + </tr> + <tr> + <td id="L468" class="blob-num js-line-number" data-line-number="468"></td> + <td id="LC468" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // if in the middle</span></td> + </tr> + <tr> + <td id="L469" class="blob-num js-line-number" data-line-number="469"></td> + <td id="LC469" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node *prev = se->prev;</span></td> + </tr> + <tr> + <td id="L470" class="blob-num js-line-number" data-line-number="470"></td> + <td id="LC470" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node *next = se->next;</span></td> + </tr> + <tr> + <td id="L471" class="blob-num js-line-number" data-line-number="471"></td> + <td id="LC471" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L472" class="blob-num js-line-number" data-line-number="472"></td> + <td id="LC472" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> prev->next = next;</span></td> + </tr> + <tr> + <td id="L473" class="blob-num js-line-number" data-line-number="473"></td> + <td id="LC473" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L474" class="blob-num js-line-number" data-line-number="474"></td> + <td id="LC474" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (next)</span></td> + </tr> + <tr> + <td id="L475" class="blob-num js-line-number" data-line-number="475"></td> + <td id="LC475" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> next->prev = prev;</span></td> + </tr> + <tr> + <td id="L476" class="blob-num js-line-number" data-line-number="476"></td> + <td id="LC476" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> }</span></td> + </tr> + <tr> + <td id="L477" class="blob-num js-line-number" data-line-number="477"></td> + <td id="LC477" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L478" class="blob-num js-line-number" data-line-number="478"></td> + <td id="LC478" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L479" class="blob-num js-line-number" data-line-number="479"></td> + <td id="LC479" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>struct sched_entity *__pick_first_entity(struct cfs_rq *cfs_rq)</span></td> + </tr> + <tr> + <td id="L480" class="blob-num js-line-number" data-line-number="480"></td> + <td id="LC480" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L481" class="blob-num js-line-number" data-line-number="481"></td> + <td id="LC481" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return se_of(cfs_rq->head);</span></td> + </tr> + <tr> + <td id="L482" class="blob-num js-line-number" data-line-number="482"></td> + <td id="LC482" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L483" class="blob-num js-line-number" data-line-number="483"></td> + <td id="LC483" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#else</span></td> + </tr> + <tr> + <td id="L484" class="blob-num js-line-number" data-line-number="484"></td> + <td id="LC484" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L485" class="blob-num js-line-number" data-line-number="485"></td> + <td id="LC485" class="blob-code blob-code-inner js-file-line"> * Enqueue an entity into the rb-tree:</td> + </tr> + <tr> + <td id="L486" class="blob-num js-line-number" data-line-number="486"></td> + <td id="LC486" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L487" class="blob-num js-line-number" data-line-number="487"></td> + <td id="LC487" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -626,16 +805,29 @@</span> static struct sched_entity *__pick_next_entity(struct sched_entity *se)</td> + </tr> + <tr> + <td id="L488" class="blob-num js-line-number" data-line-number="488"></td> + <td id="LC488" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L489" class="blob-num js-line-number" data-line-number="489"></td> + <td id="LC489" class="blob-code blob-code-inner js-file-line"> return rb_entry(next, struct sched_entity, run_node);</td> + </tr> + <tr> + <td id="L490" class="blob-num js-line-number" data-line-number="490"></td> + <td id="LC490" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L491" class="blob-num js-line-number" data-line-number="491"></td> + <td id="LC491" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L492" class="blob-num js-line-number" data-line-number="492"></td> + <td id="LC492" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L493" class="blob-num js-line-number" data-line-number="493"></td> + <td id="LC493" class="blob-code blob-code-inner js-file-line"> #ifdef CONFIG_SCHED_DEBUG</td> + </tr> + <tr> + <td id="L494" class="blob-num js-line-number" data-line-number="494"></td> + <td id="LC494" class="blob-code blob-code-inner js-file-line"> struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq)</td> + </tr> + <tr> + <td id="L495" class="blob-num js-line-number" data-line-number="495"></td> + <td id="LC495" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L496" class="blob-num js-line-number" data-line-number="496"></td> + <td id="LC496" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L497" class="blob-num js-line-number" data-line-number="497"></td> + <td id="LC497" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node *cn = cfs_rq->head;</span></td> + </tr> + <tr> + <td id="L498" class="blob-num js-line-number" data-line-number="498"></td> + <td id="LC498" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L499" class="blob-num js-line-number" data-line-number="499"></td> + <td id="LC499" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (!cn)</span></td> + </tr> + <tr> + <td id="L500" class="blob-num js-line-number" data-line-number="500"></td> + <td id="LC500" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return NULL;</span></td> + </tr> + <tr> + <td id="L501" class="blob-num js-line-number" data-line-number="501"></td> + <td id="LC501" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L502" class="blob-num js-line-number" data-line-number="502"></td> + <td id="LC502" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> while (cn->next)</span></td> + </tr> + <tr> + <td id="L503" class="blob-num js-line-number" data-line-number="503"></td> + <td id="LC503" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cn = cn->next;</span></td> + </tr> + <tr> + <td id="L504" class="blob-num js-line-number" data-line-number="504"></td> + <td id="LC504" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L505" class="blob-num js-line-number" data-line-number="505"></td> + <td id="LC505" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return se_of(cn);</span></td> + </tr> + <tr> + <td id="L506" class="blob-num js-line-number" data-line-number="506"></td> + <td id="LC506" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#else</span></td> + </tr> + <tr> + <td id="L507" class="blob-num js-line-number" data-line-number="507"></td> + <td id="LC507" class="blob-code blob-code-inner js-file-line"> struct rb_node *last = rb_last(&cfs_rq->tasks_timeline.rb_root);</td> + </tr> + <tr> + <td id="L508" class="blob-num js-line-number" data-line-number="508"></td> + <td id="LC508" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L509" class="blob-num js-line-number" data-line-number="509"></td> + <td id="LC509" class="blob-code blob-code-inner js-file-line"> if (!last)</td> + </tr> + <tr> + <td id="L510" class="blob-num js-line-number" data-line-number="510"></td> + <td id="LC510" class="blob-code blob-code-inner js-file-line"> return NULL;</td> + </tr> + <tr> + <td id="L511" class="blob-num js-line-number" data-line-number="511"></td> + <td id="LC511" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L512" class="blob-num js-line-number" data-line-number="512"></td> + <td id="LC512" class="blob-code blob-code-inner js-file-line"> return rb_entry(last, struct sched_entity, run_node);</td> + </tr> + <tr> + <td id="L513" class="blob-num js-line-number" data-line-number="513"></td> + <td id="LC513" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L514" class="blob-num js-line-number" data-line-number="514"></td> + <td id="LC514" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L515" class="blob-num js-line-number" data-line-number="515"></td> + <td id="LC515" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L516" class="blob-num js-line-number" data-line-number="516"></td> + <td id="LC516" class="blob-code blob-code-inner js-file-line"> /**************************************************************</td> + </tr> + <tr> + <td id="L517" class="blob-num js-line-number" data-line-number="517"></td> + <td id="LC517" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -720,6 +912,7 @@</span> static u64 sched_slice(struct cfs_rq *cfs_rq, struct sched_entity *se)</td> + </tr> + <tr> + <td id="L518" class="blob-num js-line-number" data-line-number="518"></td> + <td id="LC518" class="blob-code blob-code-inner js-file-line"> return slice;</td> + </tr> + <tr> + <td id="L519" class="blob-num js-line-number" data-line-number="519"></td> + <td id="LC519" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L520" class="blob-num js-line-number" data-line-number="520"></td> + <td id="LC520" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L521" class="blob-num js-line-number" data-line-number="521"></td> + <td id="LC521" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L522" class="blob-num js-line-number" data-line-number="522"></td> + <td id="LC522" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L523" class="blob-num js-line-number" data-line-number="523"></td> + <td id="LC523" class="blob-code blob-code-inner js-file-line"> * We calculate the vruntime slice of a to-be-inserted task.</td> + </tr> + <tr> + <td id="L524" class="blob-num js-line-number" data-line-number="524"></td> + <td id="LC524" class="blob-code blob-code-inner js-file-line"> *</td> + </tr> + <tr> + <td id="L525" class="blob-num js-line-number" data-line-number="525"></td> + <td id="LC525" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -729,6 +922,7 @@</span> static u64 sched_vslice(struct cfs_rq *cfs_rq, struct sched_entity *se)</td> + </tr> + <tr> + <td id="L526" class="blob-num js-line-number" data-line-number="526"></td> + <td id="LC526" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L527" class="blob-num js-line-number" data-line-number="527"></td> + <td id="LC527" class="blob-code blob-code-inner js-file-line"> return calc_delta_fair(sched_slice(cfs_rq, se), se);</td> + </tr> + <tr> + <td id="L528" class="blob-num js-line-number" data-line-number="528"></td> + <td id="LC528" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L529" class="blob-num js-line-number" data-line-number="529"></td> + <td id="LC529" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L530" class="blob-num js-line-number" data-line-number="530"></td> + <td id="LC530" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L531" class="blob-num js-line-number" data-line-number="531"></td> + <td id="LC531" class="blob-code blob-code-inner js-file-line"> #include "pelt.h"</td> + </tr> + <tr> + <td id="L532" class="blob-num js-line-number" data-line-number="532"></td> + <td id="LC532" class="blob-code blob-code-inner js-file-line"> #ifdef CONFIG_SMP</td> + </tr> + <tr> + <td id="L533" class="blob-num js-line-number" data-line-number="533"></td> + <td id="LC533" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -836,14 +1030,46 @@</span> static void update_tg_load_avg(struct cfs_rq *cfs_rq)</td> + </tr> + <tr> + <td id="L534" class="blob-num js-line-number" data-line-number="534"></td> + <td id="LC534" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L535" class="blob-num js-line-number" data-line-number="535"></td> + <td id="LC535" class="blob-code blob-code-inner js-file-line"> #endif /* CONFIG_SMP */</td> + </tr> + <tr> + <td id="L536" class="blob-num js-line-number" data-line-number="536"></td> + <td id="LC536" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L537" class="blob-num js-line-number" data-line-number="537"></td> + <td id="LC537" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L538" class="blob-num js-line-number" data-line-number="538"></td> + <td id="LC538" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>static void normalize_lifetime(u64 now, struct sched_entity *se)</span></td> + </tr> + <tr> + <td id="L539" class="blob-num js-line-number" data-line-number="539"></td> + <td id="LC539" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L540" class="blob-num js-line-number" data-line-number="540"></td> + <td id="LC540" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node *cn = &se->cacule_node;</span></td> + </tr> + <tr> + <td id="L541" class="blob-num js-line-number" data-line-number="541"></td> + <td id="LC541" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> u64 max_life_ns, life_time;</span></td> + </tr> + <tr> + <td id="L542" class="blob-num js-line-number" data-line-number="542"></td> + <td id="LC542" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> s64 diff;</span></td> + </tr> + <tr> + <td id="L543" class="blob-num js-line-number" data-line-number="543"></td> + <td id="LC543" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L544" class="blob-num js-line-number" data-line-number="544"></td> + <td id="LC544" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> /*</span></td> + </tr> + <tr> + <td id="L545" class="blob-num js-line-number" data-line-number="545"></td> + <td id="LC545" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * left shift 20 bits is approximately = * 1000000</span></td> + </tr> + <tr> + <td id="L546" class="blob-num js-line-number" data-line-number="546"></td> + <td id="LC546" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * we don't need the precision of life time</span></td> + </tr> + <tr> + <td id="L547" class="blob-num js-line-number" data-line-number="547"></td> + <td id="LC547" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * Ex. for 30s, with left shift (20bits) == 31.457s</span></td> + </tr> + <tr> + <td id="L548" class="blob-num js-line-number" data-line-number="548"></td> + <td id="LC548" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> */</span></td> + </tr> + <tr> + <td id="L549" class="blob-num js-line-number" data-line-number="549"></td> + <td id="LC549" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> max_life_ns = ((u64) cacule_max_lifetime) << 20;</span></td> + </tr> + <tr> + <td id="L550" class="blob-num js-line-number" data-line-number="550"></td> + <td id="LC550" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> life_time = now - cn->cacule_start_time;</span></td> + </tr> + <tr> + <td id="L551" class="blob-num js-line-number" data-line-number="551"></td> + <td id="LC551" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> diff = life_time - max_life_ns;</span></td> + </tr> + <tr> + <td id="L552" class="blob-num js-line-number" data-line-number="552"></td> + <td id="LC552" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L553" class="blob-num js-line-number" data-line-number="553"></td> + <td id="LC553" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (diff > 0) {</span></td> + </tr> + <tr> + <td id="L554" class="blob-num js-line-number" data-line-number="554"></td> + <td id="LC554" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // multiply life_time by 1024 for more precision</span></td> + </tr> + <tr> + <td id="L555" class="blob-num js-line-number" data-line-number="555"></td> + <td id="LC555" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> u64 old_hrrn_x = (life_time << 7) / ((cn->vruntime >> 3) | 1);</span></td> + </tr> + <tr> + <td id="L556" class="blob-num js-line-number" data-line-number="556"></td> + <td id="LC556" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L557" class="blob-num js-line-number" data-line-number="557"></td> + <td id="LC557" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // reset life to half max_life (i.e ~15s)</span></td> + </tr> + <tr> + <td id="L558" class="blob-num js-line-number" data-line-number="558"></td> + <td id="LC558" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cn->cacule_start_time = now - (max_life_ns >> 1);</span></td> + </tr> + <tr> + <td id="L559" class="blob-num js-line-number" data-line-number="559"></td> + <td id="LC559" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L560" class="blob-num js-line-number" data-line-number="560"></td> + <td id="LC560" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // avoid division by zero</span></td> + </tr> + <tr> + <td id="L561" class="blob-num js-line-number" data-line-number="561"></td> + <td id="LC561" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (old_hrrn_x == 0) old_hrrn_x = 1;</span></td> + </tr> + <tr> + <td id="L562" class="blob-num js-line-number" data-line-number="562"></td> + <td id="LC562" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L563" class="blob-num js-line-number" data-line-number="563"></td> + <td id="LC563" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // reset vruntime based on old hrrn ratio</span></td> + </tr> + <tr> + <td id="L564" class="blob-num js-line-number" data-line-number="564"></td> + <td id="LC564" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cn->vruntime = (max_life_ns << 9) / old_hrrn_x;</span></td> + </tr> + <tr> + <td id="L565" class="blob-num js-line-number" data-line-number="565"></td> + <td id="LC565" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> }</span></td> + </tr> + <tr> + <td id="L566" class="blob-num js-line-number" data-line-number="566"></td> + <td id="LC566" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L567" class="blob-num js-line-number" data-line-number="567"></td> + <td id="LC567" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L568" class="blob-num js-line-number" data-line-number="568"></td> + <td id="LC568" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L569" class="blob-num js-line-number" data-line-number="569"></td> + <td id="LC569" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L570" class="blob-num js-line-number" data-line-number="570"></td> + <td id="LC570" class="blob-code blob-code-inner js-file-line"> * Update the current task's runtime statistics.</td> + </tr> + <tr> + <td id="L571" class="blob-num js-line-number" data-line-number="571"></td> + <td id="LC571" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L572" class="blob-num js-line-number" data-line-number="572"></td> + <td id="LC572" class="blob-code blob-code-inner js-file-line"> static void update_curr(struct cfs_rq *cfs_rq)</td> + </tr> + <tr> + <td id="L573" class="blob-num js-line-number" data-line-number="573"></td> + <td id="LC573" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L574" class="blob-num js-line-number" data-line-number="574"></td> + <td id="LC574" class="blob-code blob-code-inner js-file-line"> struct sched_entity *curr = cfs_rq->curr;</td> + </tr> + <tr> + <td id="L575" class="blob-num js-line-number" data-line-number="575"></td> + <td id="LC575" class="blob-code blob-code-inner js-file-line"><span class="pl-md"><span class="pl-md">-</span> u64 now = rq_clock_task(rq_of(cfs_rq));</span></td> + </tr> + <tr> + <td id="L576" class="blob-num js-line-number" data-line-number="576"></td> + <td id="LC576" class="blob-code blob-code-inner js-file-line"><span class="pl-md"><span class="pl-md">-</span> u64 delta_exec;</span></td> + </tr> + <tr> + <td id="L577" class="blob-num js-line-number" data-line-number="577"></td> + <td id="LC577" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> u64 now = sched_clock();</span></td> + </tr> + <tr> + <td id="L578" class="blob-num js-line-number" data-line-number="578"></td> + <td id="LC578" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> u64 delta_exec, delta_fair;</span></td> + </tr> + <tr> + <td id="L579" class="blob-num js-line-number" data-line-number="579"></td> + <td id="LC579" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L580" class="blob-num js-line-number" data-line-number="580"></td> + <td id="LC580" class="blob-code blob-code-inner js-file-line"> if (unlikely(!curr))</td> + </tr> + <tr> + <td id="L581" class="blob-num js-line-number" data-line-number="581"></td> + <td id="LC581" class="blob-code blob-code-inner js-file-line"> return;</td> + </tr> + <tr> + <td id="L582" class="blob-num js-line-number" data-line-number="582"></td> + <td id="LC582" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -860,8 +1086,15 @@</span> static void update_curr(struct cfs_rq *cfs_rq)</td> + </tr> + <tr> + <td id="L583" class="blob-num js-line-number" data-line-number="583"></td> + <td id="LC583" class="blob-code blob-code-inner js-file-line"> curr->sum_exec_runtime += delta_exec;</td> + </tr> + <tr> + <td id="L584" class="blob-num js-line-number" data-line-number="584"></td> + <td id="LC584" class="blob-code blob-code-inner js-file-line"> schedstat_add(cfs_rq->exec_clock, delta_exec);</td> + </tr> + <tr> + <td id="L585" class="blob-num js-line-number" data-line-number="585"></td> + <td id="LC585" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L586" class="blob-num js-line-number" data-line-number="586"></td> + <td id="LC586" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L587" class="blob-num js-line-number" data-line-number="587"></td> + <td id="LC587" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> delta_fair = calc_delta_fair(delta_exec, curr);</span></td> + </tr> + <tr> + <td id="L588" class="blob-num js-line-number" data-line-number="588"></td> + <td id="LC588" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> curr->vruntime += delta_fair;</span></td> + </tr> + <tr> + <td id="L589" class="blob-num js-line-number" data-line-number="589"></td> + <td id="LC589" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> curr->cacule_node.vruntime += delta_fair;</span></td> + </tr> + <tr> + <td id="L590" class="blob-num js-line-number" data-line-number="590"></td> + <td id="LC590" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> normalize_lifetime(now, curr);</span></td> + </tr> + <tr> + <td id="L591" class="blob-num js-line-number" data-line-number="591"></td> + <td id="LC591" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#else</span></td> + </tr> + <tr> + <td id="L592" class="blob-num js-line-number" data-line-number="592"></td> + <td id="LC592" class="blob-code blob-code-inner js-file-line"> curr->vruntime += calc_delta_fair(delta_exec, curr);</td> + </tr> + <tr> + <td id="L593" class="blob-num js-line-number" data-line-number="593"></td> + <td id="LC593" class="blob-code blob-code-inner js-file-line"> update_min_vruntime(cfs_rq);</td> + </tr> + <tr> + <td id="L594" class="blob-num js-line-number" data-line-number="594"></td> + <td id="LC594" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L595" class="blob-num js-line-number" data-line-number="595"></td> + <td id="LC595" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L596" class="blob-num js-line-number" data-line-number="596"></td> + <td id="LC596" class="blob-code blob-code-inner js-file-line"> if (entity_is_task(curr)) {</td> + </tr> + <tr> + <td id="L597" class="blob-num js-line-number" data-line-number="597"></td> + <td id="LC597" class="blob-code blob-code-inner js-file-line"> struct task_struct *curtask = task_of(curr);</td> + </tr> + <tr> + <td id="L598" class="blob-num js-line-number" data-line-number="598"></td> + <td id="LC598" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -1020,7 +1253,6 @@</span> update_stats_enqueue(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)</td> + </tr> + <tr> + <td id="L599" class="blob-num js-line-number" data-line-number="599"></td> + <td id="LC599" class="blob-code blob-code-inner js-file-line"> static inline void</td> + </tr> + <tr> + <td id="L600" class="blob-num js-line-number" data-line-number="600"></td> + <td id="LC600" class="blob-code blob-code-inner js-file-line"> update_stats_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)</td> + </tr> + <tr> + <td id="L601" class="blob-num js-line-number" data-line-number="601"></td> + <td id="LC601" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L602" class="blob-num js-line-number" data-line-number="602"></td> + <td id="LC602" class="blob-code blob-code-inner js-file-line"><span class="pl-md"><span class="pl-md">-</span></span></td> + </tr> + <tr> + <td id="L603" class="blob-num js-line-number" data-line-number="603"></td> + <td id="LC603" class="blob-code blob-code-inner js-file-line"> if (!schedstat_enabled())</td> + </tr> + <tr> + <td id="L604" class="blob-num js-line-number" data-line-number="604"></td> + <td id="LC604" class="blob-code blob-code-inner js-file-line"> return;</td> + </tr> + <tr> + <td id="L605" class="blob-num js-line-number" data-line-number="605"></td> + <td id="LC605" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L606" class="blob-num js-line-number" data-line-number="606"></td> + <td id="LC606" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -1052,7 +1284,7 @@</span> update_stats_curr_start(struct cfs_rq *cfs_rq, struct sched_entity *se)</td> + </tr> + <tr> + <td id="L607" class="blob-num js-line-number" data-line-number="607"></td> + <td id="LC607" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L608" class="blob-num js-line-number" data-line-number="608"></td> + <td id="LC608" class="blob-code blob-code-inner js-file-line"> * We are starting a new run period:</td> + </tr> + <tr> + <td id="L609" class="blob-num js-line-number" data-line-number="609"></td> + <td id="LC609" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L610" class="blob-num js-line-number" data-line-number="610"></td> + <td id="LC610" class="blob-code blob-code-inner js-file-line"><span class="pl-md"><span class="pl-md">-</span> se->exec_start = rq_clock_task(rq_of(cfs_rq));</span></td> + </tr> + <tr> + <td id="L611" class="blob-num js-line-number" data-line-number="611"></td> + <td id="LC611" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> se->exec_start = sched_clock();</span></td> + </tr> + <tr> + <td id="L612" class="blob-num js-line-number" data-line-number="612"></td> + <td id="LC612" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L613" class="blob-num js-line-number" data-line-number="613"></td> + <td id="LC613" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L614" class="blob-num js-line-number" data-line-number="614"></td> + <td id="LC614" class="blob-code blob-code-inner js-file-line"> /**************************************************</td> + </tr> + <tr> + <td id="L615" class="blob-num js-line-number" data-line-number="615"></td> + <td id="LC615" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4104,7 +4336,7 @@</span> static inline void update_misfit_status(struct task_struct *p, struct rq *rq) {}</td> + </tr> + <tr> + <td id="L616" class="blob-num js-line-number" data-line-number="616"></td> + <td id="LC616" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L617" class="blob-num js-line-number" data-line-number="617"></td> + <td id="LC617" class="blob-code blob-code-inner js-file-line"> static void check_spread(struct cfs_rq *cfs_rq, struct sched_entity *se)</td> + </tr> + <tr> + <td id="L618" class="blob-num js-line-number" data-line-number="618"></td> + <td id="LC618" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L619" class="blob-num js-line-number" data-line-number="619"></td> + <td id="LC619" class="blob-code blob-code-inner js-file-line"><span class="pl-md"><span class="pl-md">-</span>#ifdef CONFIG_SCHED_DEBUG</span></td> + </tr> + <tr> + <td id="L620" class="blob-num js-line-number" data-line-number="620"></td> + <td id="LC620" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if defined(CONFIG_SCHED_DEBUG) && !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L621" class="blob-num js-line-number" data-line-number="621"></td> + <td id="LC621" class="blob-code blob-code-inner js-file-line"> s64 d = se->vruntime - cfs_rq->min_vruntime;</td> + </tr> + <tr> + <td id="L622" class="blob-num js-line-number" data-line-number="622"></td> + <td id="LC622" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L623" class="blob-num js-line-number" data-line-number="623"></td> + <td id="LC623" class="blob-code blob-code-inner js-file-line"> if (d < 0)</td> + </tr> + <tr> + <td id="L624" class="blob-num js-line-number" data-line-number="624"></td> + <td id="LC624" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4115,6 +4347,7 @@</span> static void check_spread(struct cfs_rq *cfs_rq, struct sched_entity *se)</td> + </tr> + <tr> + <td id="L625" class="blob-num js-line-number" data-line-number="625"></td> + <td id="LC625" class="blob-code blob-code-inner js-file-line"> #endif</td> + </tr> + <tr> + <td id="L626" class="blob-num js-line-number" data-line-number="626"></td> + <td id="LC626" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L627" class="blob-num js-line-number" data-line-number="627"></td> + <td id="LC627" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L628" class="blob-num js-line-number" data-line-number="628"></td> + <td id="LC628" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L629" class="blob-num js-line-number" data-line-number="629"></td> + <td id="LC629" class="blob-code blob-code-inner js-file-line"> static void</td> + </tr> + <tr> + <td id="L630" class="blob-num js-line-number" data-line-number="630"></td> + <td id="LC630" class="blob-code blob-code-inner js-file-line"> place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial)</td> + </tr> + <tr> + <td id="L631" class="blob-num js-line-number" data-line-number="631"></td> + <td id="LC631" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L632" class="blob-num js-line-number" data-line-number="632"></td> + <td id="LC632" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4146,6 +4379,7 @@</span> place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial)</td> + </tr> + <tr> + <td id="L633" class="blob-num js-line-number" data-line-number="633"></td> + <td id="LC633" class="blob-code blob-code-inner js-file-line"> /* ensure we never gain time by being placed backwards. */</td> + </tr> + <tr> + <td id="L634" class="blob-num js-line-number" data-line-number="634"></td> + <td id="LC634" class="blob-code blob-code-inner js-file-line"> se->vruntime = max_vruntime(se->vruntime, vruntime);</td> + </tr> + <tr> + <td id="L635" class="blob-num js-line-number" data-line-number="635"></td> + <td id="LC635" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L636" class="blob-num js-line-number" data-line-number="636"></td> + <td id="LC636" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L637" class="blob-num js-line-number" data-line-number="637"></td> + <td id="LC637" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L638" class="blob-num js-line-number" data-line-number="638"></td> + <td id="LC638" class="blob-code blob-code-inner js-file-line"> static void check_enqueue_throttle(struct cfs_rq *cfs_rq);</td> + </tr> + <tr> + <td id="L639" class="blob-num js-line-number" data-line-number="639"></td> + <td id="LC639" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L640" class="blob-num js-line-number" data-line-number="640"></td> + <td id="LC640" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4204,18 +4438,23 @@</span> static inline bool cfs_bandwidth_used(void);</td> + </tr> + <tr> + <td id="L641" class="blob-num js-line-number" data-line-number="641"></td> + <td id="LC641" class="blob-code blob-code-inner js-file-line"> static void</td> + </tr> + <tr> + <td id="L642" class="blob-num js-line-number" data-line-number="642"></td> + <td id="LC642" class="blob-code blob-code-inner js-file-line"> enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)</td> + </tr> + <tr> + <td id="L643" class="blob-num js-line-number" data-line-number="643"></td> + <td id="LC643" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L644" class="blob-num js-line-number" data-line-number="644"></td> + <td id="LC644" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L645" class="blob-num js-line-number" data-line-number="645"></td> + <td id="LC645" class="blob-code blob-code-inner js-file-line"> bool renorm = !(flags & ENQUEUE_WAKEUP) || (flags & ENQUEUE_MIGRATED);</td> + </tr> + <tr> + <td id="L646" class="blob-num js-line-number" data-line-number="646"></td> + <td id="LC646" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L647" class="blob-num js-line-number" data-line-number="647"></td> + <td id="LC647" class="blob-code blob-code-inner js-file-line"> bool curr = cfs_rq->curr == se;</td> + </tr> + <tr> + <td id="L648" class="blob-num js-line-number" data-line-number="648"></td> + <td id="LC648" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L649" class="blob-num js-line-number" data-line-number="649"></td> + <td id="LC649" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L650" class="blob-num js-line-number" data-line-number="650"></td> + <td id="LC650" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L651" class="blob-num js-line-number" data-line-number="651"></td> + <td id="LC651" class="blob-code blob-code-inner js-file-line"> * If we're the current task, we must renormalise before calling</td> + </tr> + <tr> + <td id="L652" class="blob-num js-line-number" data-line-number="652"></td> + <td id="LC652" class="blob-code blob-code-inner js-file-line"> * update_curr().</td> + </tr> + <tr> + <td id="L653" class="blob-num js-line-number" data-line-number="653"></td> + <td id="LC653" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L654" class="blob-num js-line-number" data-line-number="654"></td> + <td id="LC654" class="blob-code blob-code-inner js-file-line"> if (renorm && curr)</td> + </tr> + <tr> + <td id="L655" class="blob-num js-line-number" data-line-number="655"></td> + <td id="LC655" class="blob-code blob-code-inner js-file-line"> se->vruntime += cfs_rq->min_vruntime;</td> + </tr> + <tr> + <td id="L656" class="blob-num js-line-number" data-line-number="656"></td> + <td id="LC656" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L657" class="blob-num js-line-number" data-line-number="657"></td> + <td id="LC657" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L658" class="blob-num js-line-number" data-line-number="658"></td> + <td id="LC658" class="blob-code blob-code-inner js-file-line"> update_curr(cfs_rq);</td> + </tr> + <tr> + <td id="L659" class="blob-num js-line-number" data-line-number="659"></td> + <td id="LC659" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L660" class="blob-num js-line-number" data-line-number="660"></td> + <td id="LC660" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L661" class="blob-num js-line-number" data-line-number="661"></td> + <td id="LC661" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L662" class="blob-num js-line-number" data-line-number="662"></td> + <td id="LC662" class="blob-code blob-code-inner js-file-line"> * Otherwise, renormalise after, such that we're placed at the current</td> + </tr> + <tr> + <td id="L663" class="blob-num js-line-number" data-line-number="663"></td> + <td id="LC663" class="blob-code blob-code-inner js-file-line"> * moment in time, instead of some random moment in the past. Being</td> + </tr> + <tr> + <td id="L664" class="blob-num js-line-number" data-line-number="664"></td> + <td id="LC664" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4224,6 +4463,7 @@</span> enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)</td> + </tr> + <tr> + <td id="L665" class="blob-num js-line-number" data-line-number="665"></td> + <td id="LC665" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L666" class="blob-num js-line-number" data-line-number="666"></td> + <td id="LC666" class="blob-code blob-code-inner js-file-line"> if (renorm && !curr)</td> + </tr> + <tr> + <td id="L667" class="blob-num js-line-number" data-line-number="667"></td> + <td id="LC667" class="blob-code blob-code-inner js-file-line"> se->vruntime += cfs_rq->min_vruntime;</td> + </tr> + <tr> + <td id="L668" class="blob-num js-line-number" data-line-number="668"></td> + <td id="LC668" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L669" class="blob-num js-line-number" data-line-number="669"></td> + <td id="LC669" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L670" class="blob-num js-line-number" data-line-number="670"></td> + <td id="LC670" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L671" class="blob-num js-line-number" data-line-number="671"></td> + <td id="LC671" class="blob-code blob-code-inner js-file-line"> * When enqueuing a sched_entity, we must:</td> + </tr> + <tr> + <td id="L672" class="blob-num js-line-number" data-line-number="672"></td> + <td id="LC672" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4238,8 +4478,10 @@</span> enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)</td> + </tr> + <tr> + <td id="L673" class="blob-num js-line-number" data-line-number="673"></td> + <td id="LC673" class="blob-code blob-code-inner js-file-line"> update_cfs_group(se);</td> + </tr> + <tr> + <td id="L674" class="blob-num js-line-number" data-line-number="674"></td> + <td id="LC674" class="blob-code blob-code-inner js-file-line"> account_entity_enqueue(cfs_rq, se);</td> + </tr> + <tr> + <td id="L675" class="blob-num js-line-number" data-line-number="675"></td> + <td id="LC675" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L676" class="blob-num js-line-number" data-line-number="676"></td> + <td id="LC676" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L677" class="blob-num js-line-number" data-line-number="677"></td> + <td id="LC677" class="blob-code blob-code-inner js-file-line"> if (flags & ENQUEUE_WAKEUP)</td> + </tr> + <tr> + <td id="L678" class="blob-num js-line-number" data-line-number="678"></td> + <td id="LC678" class="blob-code blob-code-inner js-file-line"> place_entity(cfs_rq, se, 0);</td> + </tr> + <tr> + <td id="L679" class="blob-num js-line-number" data-line-number="679"></td> + <td id="LC679" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L680" class="blob-num js-line-number" data-line-number="680"></td> + <td id="LC680" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L681" class="blob-num js-line-number" data-line-number="681"></td> + <td id="LC681" class="blob-code blob-code-inner js-file-line"> check_schedstat_required();</td> + </tr> + <tr> + <td id="L682" class="blob-num js-line-number" data-line-number="682"></td> + <td id="LC682" class="blob-code blob-code-inner js-file-line"> update_stats_enqueue(cfs_rq, se, flags);</td> + </tr> + <tr> + <td id="L683" class="blob-num js-line-number" data-line-number="683"></td> + <td id="LC683" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4260,6 +4502,7 @@</span> enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)</td> + </tr> + <tr> + <td id="L684" class="blob-num js-line-number" data-line-number="684"></td> + <td id="LC684" class="blob-code blob-code-inner js-file-line"> check_enqueue_throttle(cfs_rq);</td> + </tr> + <tr> + <td id="L685" class="blob-num js-line-number" data-line-number="685"></td> + <td id="LC685" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L686" class="blob-num js-line-number" data-line-number="686"></td> + <td id="LC686" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L687" class="blob-num js-line-number" data-line-number="687"></td> + <td id="LC687" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L688" class="blob-num js-line-number" data-line-number="688"></td> + <td id="LC688" class="blob-code blob-code-inner js-file-line"> static void __clear_buddies_last(struct sched_entity *se)</td> + </tr> + <tr> + <td id="L689" class="blob-num js-line-number" data-line-number="689"></td> + <td id="LC689" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L690" class="blob-num js-line-number" data-line-number="690"></td> + <td id="LC690" class="blob-code blob-code-inner js-file-line"> for_each_sched_entity(se) {</td> + </tr> + <tr> + <td id="L691" class="blob-num js-line-number" data-line-number="691"></td> + <td id="LC691" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4304,6 +4547,7 @@</span> static void clear_buddies(struct cfs_rq *cfs_rq, struct sched_entity *se)</td> + </tr> + <tr> + <td id="L692" class="blob-num js-line-number" data-line-number="692"></td> + <td id="LC692" class="blob-code blob-code-inner js-file-line"> if (cfs_rq->skip == se)</td> + </tr> + <tr> + <td id="L693" class="blob-num js-line-number" data-line-number="693"></td> + <td id="LC693" class="blob-code blob-code-inner js-file-line"> __clear_buddies_skip(se);</td> + </tr> + <tr> + <td id="L694" class="blob-num js-line-number" data-line-number="694"></td> + <td id="LC694" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L695" class="blob-num js-line-number" data-line-number="695"></td> + <td id="LC695" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* !CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L696" class="blob-num js-line-number" data-line-number="696"></td> + <td id="LC696" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L697" class="blob-num js-line-number" data-line-number="697"></td> + <td id="LC697" class="blob-code blob-code-inner js-file-line"> static __always_inline void return_cfs_rq_runtime(struct cfs_rq *cfs_rq);</td> + </tr> + <tr> + <td id="L698" class="blob-num js-line-number" data-line-number="698"></td> + <td id="LC698" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L699" class="blob-num js-line-number" data-line-number="699"></td> + <td id="LC699" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4328,13 +4572,16 @@</span> dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)</td> + </tr> + <tr> + <td id="L700" class="blob-num js-line-number" data-line-number="700"></td> + <td id="LC700" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L701" class="blob-num js-line-number" data-line-number="701"></td> + <td id="LC701" class="blob-code blob-code-inner js-file-line"> update_stats_dequeue(cfs_rq, se, flags);</td> + </tr> + <tr> + <td id="L702" class="blob-num js-line-number" data-line-number="702"></td> + <td id="LC702" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L703" class="blob-num js-line-number" data-line-number="703"></td> + <td id="LC703" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L704" class="blob-num js-line-number" data-line-number="704"></td> + <td id="LC704" class="blob-code blob-code-inner js-file-line"> clear_buddies(cfs_rq, se);</td> + </tr> + <tr> + <td id="L705" class="blob-num js-line-number" data-line-number="705"></td> + <td id="LC705" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L706" class="blob-num js-line-number" data-line-number="706"></td> + <td id="LC706" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L707" class="blob-num js-line-number" data-line-number="707"></td> + <td id="LC707" class="blob-code blob-code-inner js-file-line"> if (se != cfs_rq->curr)</td> + </tr> + <tr> + <td id="L708" class="blob-num js-line-number" data-line-number="708"></td> + <td id="LC708" class="blob-code blob-code-inner js-file-line"> __dequeue_entity(cfs_rq, se);</td> + </tr> + <tr> + <td id="L709" class="blob-num js-line-number" data-line-number="709"></td> + <td id="LC709" class="blob-code blob-code-inner js-file-line"> se->on_rq = 0;</td> + </tr> + <tr> + <td id="L710" class="blob-num js-line-number" data-line-number="710"></td> + <td id="LC710" class="blob-code blob-code-inner js-file-line"> account_entity_dequeue(cfs_rq, se);</td> + </tr> + <tr> + <td id="L711" class="blob-num js-line-number" data-line-number="711"></td> + <td id="LC711" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L712" class="blob-num js-line-number" data-line-number="712"></td> + <td id="LC712" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L713" class="blob-num js-line-number" data-line-number="713"></td> + <td id="LC713" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L714" class="blob-num js-line-number" data-line-number="714"></td> + <td id="LC714" class="blob-code blob-code-inner js-file-line"> * Normalize after update_curr(); which will also have moved</td> + </tr> + <tr> + <td id="L715" class="blob-num js-line-number" data-line-number="715"></td> + <td id="LC715" class="blob-code blob-code-inner js-file-line"> * min_vruntime if @se is the one holding it back. But before doing</td> + </tr> + <tr> + <td id="L716" class="blob-num js-line-number" data-line-number="716"></td> + <td id="LC716" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4343,12 +4590,14 @@</span> dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)</td> + </tr> + <tr> + <td id="L717" class="blob-num js-line-number" data-line-number="717"></td> + <td id="LC717" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L718" class="blob-num js-line-number" data-line-number="718"></td> + <td id="LC718" class="blob-code blob-code-inner js-file-line"> if (!(flags & DEQUEUE_SLEEP))</td> + </tr> + <tr> + <td id="L719" class="blob-num js-line-number" data-line-number="719"></td> + <td id="LC719" class="blob-code blob-code-inner js-file-line"> se->vruntime -= cfs_rq->min_vruntime;</td> + </tr> + <tr> + <td id="L720" class="blob-num js-line-number" data-line-number="720"></td> + <td id="LC720" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L721" class="blob-num js-line-number" data-line-number="721"></td> + <td id="LC721" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L722" class="blob-num js-line-number" data-line-number="722"></td> + <td id="LC722" class="blob-code blob-code-inner js-file-line"> /* return excess runtime on last dequeue */</td> + </tr> + <tr> + <td id="L723" class="blob-num js-line-number" data-line-number="723"></td> + <td id="LC723" class="blob-code blob-code-inner js-file-line"> return_cfs_rq_runtime(cfs_rq);</td> + </tr> + <tr> + <td id="L724" class="blob-num js-line-number" data-line-number="724"></td> + <td id="LC724" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L725" class="blob-num js-line-number" data-line-number="725"></td> + <td id="LC725" class="blob-code blob-code-inner js-file-line"> update_cfs_group(se);</td> + </tr> + <tr> + <td id="L726" class="blob-num js-line-number" data-line-number="726"></td> + <td id="LC726" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L727" class="blob-num js-line-number" data-line-number="727"></td> + <td id="LC727" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L728" class="blob-num js-line-number" data-line-number="728"></td> + <td id="LC728" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L729" class="blob-num js-line-number" data-line-number="729"></td> + <td id="LC729" class="blob-code blob-code-inner js-file-line"> * Now advance min_vruntime if @se was the entity holding it back,</td> + </tr> + <tr> + <td id="L730" class="blob-num js-line-number" data-line-number="730"></td> + <td id="LC730" class="blob-code blob-code-inner js-file-line"> * except when: DEQUEUE_SAVE && !DEQUEUE_MOVE, in this case we'll be</td> + </tr> + <tr> + <td id="L731" class="blob-num js-line-number" data-line-number="731"></td> + <td id="LC731" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4357,8 +4606,23 @@</span> dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)</td> + </tr> + <tr> + <td id="L732" class="blob-num js-line-number" data-line-number="732"></td> + <td id="LC732" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L733" class="blob-num js-line-number" data-line-number="733"></td> + <td id="LC733" class="blob-code blob-code-inner js-file-line"> if ((flags & (DEQUEUE_SAVE | DEQUEUE_MOVE)) != DEQUEUE_SAVE)</td> + </tr> + <tr> + <td id="L734" class="blob-num js-line-number" data-line-number="734"></td> + <td id="LC734" class="blob-code blob-code-inner js-file-line"> update_min_vruntime(cfs_rq);</td> + </tr> + <tr> + <td id="L735" class="blob-num js-line-number" data-line-number="735"></td> + <td id="LC735" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L736" class="blob-num js-line-number" data-line-number="736"></td> + <td id="LC736" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L737" class="blob-num js-line-number" data-line-number="737"></td> + <td id="LC737" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L738" class="blob-num js-line-number" data-line-number="738"></td> + <td id="LC738" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L739" class="blob-num js-line-number" data-line-number="739"></td> + <td id="LC739" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>/*</span></td> + </tr> + <tr> + <td id="L740" class="blob-num js-line-number" data-line-number="740"></td> + <td id="LC740" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> * Preempt the current task with a newly woken task if needed:</span></td> + </tr> + <tr> + <td id="L741" class="blob-num js-line-number" data-line-number="741"></td> + <td id="LC741" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> */</span></td> + </tr> + <tr> + <td id="L742" class="blob-num js-line-number" data-line-number="742"></td> + <td id="LC742" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>static void</span></td> + </tr> + <tr> + <td id="L743" class="blob-num js-line-number" data-line-number="743"></td> + <td id="LC743" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr)</span></td> + </tr> + <tr> + <td id="L744" class="blob-num js-line-number" data-line-number="744"></td> + <td id="LC744" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L745" class="blob-num js-line-number" data-line-number="745"></td> + <td id="LC745" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> u64 now = sched_clock();</span></td> + </tr> + <tr> + <td id="L746" class="blob-num js-line-number" data-line-number="746"></td> + <td id="LC746" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L747" class="blob-num js-line-number" data-line-number="747"></td> + <td id="LC747" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // does head have higher IS than curr</span></td> + </tr> + <tr> + <td id="L748" class="blob-num js-line-number" data-line-number="748"></td> + <td id="LC748" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (entity_before(now, &curr->cacule_node, cfs_rq->head) == 1)</span></td> + </tr> + <tr> + <td id="L749" class="blob-num js-line-number" data-line-number="749"></td> + <td id="LC749" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> resched_curr(rq_of(cfs_rq));</span></td> + </tr> + <tr> + <td id="L750" class="blob-num js-line-number" data-line-number="750"></td> + <td id="LC750" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L751" class="blob-num js-line-number" data-line-number="751"></td> + <td id="LC751" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#else</span></td> + </tr> + <tr> + <td id="L752" class="blob-num js-line-number" data-line-number="752"></td> + <td id="LC752" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L753" class="blob-num js-line-number" data-line-number="753"></td> + <td id="LC753" class="blob-code blob-code-inner js-file-line"> * Preempt the current task with a newly woken task if needed:</td> + </tr> + <tr> + <td id="L754" class="blob-num js-line-number" data-line-number="754"></td> + <td id="LC754" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L755" class="blob-num js-line-number" data-line-number="755"></td> + <td id="LC755" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4398,6 +4662,7 @@</span> check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr)</td> + </tr> + <tr> + <td id="L756" class="blob-num js-line-number" data-line-number="756"></td> + <td id="LC756" class="blob-code blob-code-inner js-file-line"> if (delta > ideal_runtime)</td> + </tr> + <tr> + <td id="L757" class="blob-num js-line-number" data-line-number="757"></td> + <td id="LC757" class="blob-code blob-code-inner js-file-line"> resched_curr(rq_of(cfs_rq));</td> + </tr> + <tr> + <td id="L758" class="blob-num js-line-number" data-line-number="758"></td> + <td id="LC758" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L759" class="blob-num js-line-number" data-line-number="759"></td> + <td id="LC759" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L760" class="blob-num js-line-number" data-line-number="760"></td> + <td id="LC760" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L761" class="blob-num js-line-number" data-line-number="761"></td> + <td id="LC761" class="blob-code blob-code-inner js-file-line"> static void</td> + </tr> + <tr> + <td id="L762" class="blob-num js-line-number" data-line-number="762"></td> + <td id="LC762" class="blob-code blob-code-inner js-file-line"> set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)</td> + </tr> + <tr> + <td id="L763" class="blob-num js-line-number" data-line-number="763"></td> + <td id="LC763" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4432,6 +4697,21 @@</span> set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)</td> + </tr> + <tr> + <td id="L764" class="blob-num js-line-number" data-line-number="764"></td> + <td id="LC764" class="blob-code blob-code-inner js-file-line"> se->prev_sum_exec_runtime = se->sum_exec_runtime;</td> + </tr> + <tr> + <td id="L765" class="blob-num js-line-number" data-line-number="765"></td> + <td id="LC765" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L766" class="blob-num js-line-number" data-line-number="766"></td> + <td id="LC766" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L767" class="blob-num js-line-number" data-line-number="767"></td> + <td id="LC767" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L768" class="blob-num js-line-number" data-line-number="768"></td> + <td id="LC768" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>static struct sched_entity *</span></td> + </tr> + <tr> + <td id="L769" class="blob-num js-line-number" data-line-number="769"></td> + <td id="LC769" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr)</span></td> + </tr> + <tr> + <td id="L770" class="blob-num js-line-number" data-line-number="770"></td> + <td id="LC770" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L771" class="blob-num js-line-number" data-line-number="771"></td> + <td id="LC771" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node *se = cfs_rq->head;</span></td> + </tr> + <tr> + <td id="L772" class="blob-num js-line-number" data-line-number="772"></td> + <td id="LC772" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L773" class="blob-num js-line-number" data-line-number="773"></td> + <td id="LC773" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (unlikely(!se))</span></td> + </tr> + <tr> + <td id="L774" class="blob-num js-line-number" data-line-number="774"></td> + <td id="LC774" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> se = &curr->cacule_node;</span></td> + </tr> + <tr> + <td id="L775" class="blob-num js-line-number" data-line-number="775"></td> + <td id="LC775" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> else if (unlikely(curr</span></td> + </tr> + <tr> + <td id="L776" class="blob-num js-line-number" data-line-number="776"></td> + <td id="LC776" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> && entity_before(sched_clock(), se, &curr->cacule_node) == 1))</span></td> + </tr> + <tr> + <td id="L777" class="blob-num js-line-number" data-line-number="777"></td> + <td id="LC777" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> se = &curr->cacule_node;</span></td> + </tr> + <tr> + <td id="L778" class="blob-num js-line-number" data-line-number="778"></td> + <td id="LC778" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L779" class="blob-num js-line-number" data-line-number="779"></td> + <td id="LC779" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return se_of(se);</span></td> + </tr> + <tr> + <td id="L780" class="blob-num js-line-number" data-line-number="780"></td> + <td id="LC780" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L781" class="blob-num js-line-number" data-line-number="781"></td> + <td id="LC781" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#else</span></td> + </tr> + <tr> + <td id="L782" class="blob-num js-line-number" data-line-number="782"></td> + <td id="LC782" class="blob-code blob-code-inner js-file-line"> static int</td> + </tr> + <tr> + <td id="L783" class="blob-num js-line-number" data-line-number="783"></td> + <td id="LC783" class="blob-code blob-code-inner js-file-line"> wakeup_preempt_entity(struct sched_entity *curr, struct sched_entity *se);</td> + </tr> + <tr> + <td id="L784" class="blob-num js-line-number" data-line-number="784"></td> + <td id="LC784" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L785" class="blob-num js-line-number" data-line-number="785"></td> + <td id="LC785" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -4492,6 +4772,7 @@</span> pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr)</td> + </tr> + <tr> + <td id="L786" class="blob-num js-line-number" data-line-number="786"></td> + <td id="LC786" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L787" class="blob-num js-line-number" data-line-number="787"></td> + <td id="LC787" class="blob-code blob-code-inner js-file-line"> return se;</td> + </tr> + <tr> + <td id="L788" class="blob-num js-line-number" data-line-number="788"></td> + <td id="LC788" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L789" class="blob-num js-line-number" data-line-number="789"></td> + <td id="LC789" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L790" class="blob-num js-line-number" data-line-number="790"></td> + <td id="LC790" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L791" class="blob-num js-line-number" data-line-number="791"></td> + <td id="LC791" class="blob-code blob-code-inner js-file-line"> static bool check_cfs_rq_runtime(struct cfs_rq *cfs_rq);</td> + </tr> + <tr> + <td id="L792" class="blob-num js-line-number" data-line-number="792"></td> + <td id="LC792" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L793" class="blob-num js-line-number" data-line-number="793"></td> + <td id="LC793" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -5585,7 +5866,9 @@</span> enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)</td> + </tr> + <tr> + <td id="L794" class="blob-num js-line-number" data-line-number="794"></td> + <td id="LC794" class="blob-code blob-code-inner js-file-line"> hrtick_update(rq);</td> + </tr> + <tr> + <td id="L795" class="blob-num js-line-number" data-line-number="795"></td> + <td id="LC795" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L796" class="blob-num js-line-number" data-line-number="796"></td> + <td id="LC796" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L797" class="blob-num js-line-number" data-line-number="797"></td> + <td id="LC797" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L798" class="blob-num js-line-number" data-line-number="798"></td> + <td id="LC798" class="blob-code blob-code-inner js-file-line"> static void set_next_buddy(struct sched_entity *se);</td> + </tr> + <tr> + <td id="L799" class="blob-num js-line-number" data-line-number="799"></td> + <td id="LC799" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L800" class="blob-num js-line-number" data-line-number="800"></td> + <td id="LC800" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L801" class="blob-num js-line-number" data-line-number="801"></td> + <td id="LC801" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L802" class="blob-num js-line-number" data-line-number="802"></td> + <td id="LC802" class="blob-code blob-code-inner js-file-line"> * The dequeue_task method is called before nr_running is</td> + </tr> + <tr> + <td id="L803" class="blob-num js-line-number" data-line-number="803"></td> + <td id="LC803" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -5617,12 +5900,14 @@</span> static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)</td> + </tr> + <tr> + <td id="L804" class="blob-num js-line-number" data-line-number="804"></td> + <td id="LC804" class="blob-code blob-code-inner js-file-line"> if (cfs_rq->load.weight) {</td> + </tr> + <tr> + <td id="L805" class="blob-num js-line-number" data-line-number="805"></td> + <td id="LC805" class="blob-code blob-code-inner js-file-line"> /* Avoid re-evaluating load for this entity: */</td> + </tr> + <tr> + <td id="L806" class="blob-num js-line-number" data-line-number="806"></td> + <td id="LC806" class="blob-code blob-code-inner js-file-line"> se = parent_entity(se);</td> + </tr> + <tr> + <td id="L807" class="blob-num js-line-number" data-line-number="807"></td> + <td id="LC807" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L808" class="blob-num js-line-number" data-line-number="808"></td> + <td id="LC808" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L809" class="blob-num js-line-number" data-line-number="809"></td> + <td id="LC809" class="blob-code blob-code-inner js-file-line"> * Bias pick_next to pick a task from this cfs_rq, as</td> + </tr> + <tr> + <td id="L810" class="blob-num js-line-number" data-line-number="810"></td> + <td id="LC810" class="blob-code blob-code-inner js-file-line"> * p is sleeping when it is within its sched_slice.</td> + </tr> + <tr> + <td id="L811" class="blob-num js-line-number" data-line-number="811"></td> + <td id="LC811" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L812" class="blob-num js-line-number" data-line-number="812"></td> + <td id="LC812" class="blob-code blob-code-inner js-file-line"> if (task_sleep && se && !throttled_hierarchy(cfs_rq))</td> + </tr> + <tr> + <td id="L813" class="blob-num js-line-number" data-line-number="813"></td> + <td id="LC813" class="blob-code blob-code-inner js-file-line"> set_next_buddy(se);</td> + </tr> + <tr> + <td id="L814" class="blob-num js-line-number" data-line-number="814"></td> + <td id="LC814" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L815" class="blob-num js-line-number" data-line-number="815"></td> + <td id="LC815" class="blob-code blob-code-inner js-file-line"> break;</td> + </tr> + <tr> + <td id="L816" class="blob-num js-line-number" data-line-number="816"></td> + <td id="LC816" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L817" class="blob-num js-line-number" data-line-number="817"></td> + <td id="LC817" class="blob-code blob-code-inner js-file-line"> flags |= DEQUEUE_SLEEP;</td> + </tr> + <tr> + <td id="L818" class="blob-num js-line-number" data-line-number="818"></td> + <td id="LC818" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -5738,6 +6023,7 @@</span> static unsigned long capacity_of(int cpu)</td> + </tr> + <tr> + <td id="L819" class="blob-num js-line-number" data-line-number="819"></td> + <td id="LC819" class="blob-code blob-code-inner js-file-line"> return cpu_rq(cpu)->cpu_capacity;</td> + </tr> + <tr> + <td id="L820" class="blob-num js-line-number" data-line-number="820"></td> + <td id="LC820" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L821" class="blob-num js-line-number" data-line-number="821"></td> + <td id="LC821" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L822" class="blob-num js-line-number" data-line-number="822"></td> + <td id="LC822" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L823" class="blob-num js-line-number" data-line-number="823"></td> + <td id="LC823" class="blob-code blob-code-inner js-file-line"> static void record_wakee(struct task_struct *p)</td> + </tr> + <tr> + <td id="L824" class="blob-num js-line-number" data-line-number="824"></td> + <td id="LC824" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L825" class="blob-num js-line-number" data-line-number="825"></td> + <td id="LC825" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L826" class="blob-num js-line-number" data-line-number="826"></td> + <td id="LC826" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -5784,6 +6070,7 @@</span> static int wake_wide(struct task_struct *p)</td> + </tr> + <tr> + <td id="L827" class="blob-num js-line-number" data-line-number="827"></td> + <td id="LC827" class="blob-code blob-code-inner js-file-line"> return 0;</td> + </tr> + <tr> + <td id="L828" class="blob-num js-line-number" data-line-number="828"></td> + <td id="LC828" class="blob-code blob-code-inner js-file-line"> return 1;</td> + </tr> + <tr> + <td id="L829" class="blob-num js-line-number" data-line-number="829"></td> + <td id="LC829" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L830" class="blob-num js-line-number" data-line-number="830"></td> + <td id="LC830" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L831" class="blob-num js-line-number" data-line-number="831"></td> + <td id="LC831" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L832" class="blob-num js-line-number" data-line-number="832"></td> + <td id="LC832" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L833" class="blob-num js-line-number" data-line-number="833"></td> + <td id="LC833" class="blob-code blob-code-inner js-file-line"> * The purpose of wake_affine() is to quickly determine on which CPU we can run</td> + </tr> + <tr> + <td id="L834" class="blob-num js-line-number" data-line-number="834"></td> + <td id="LC834" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6460,6 +6747,7 @@</span> static unsigned long cpu_util_without(int cpu, struct task_struct *p)</td> + </tr> + <tr> + <td id="L835" class="blob-num js-line-number" data-line-number="835"></td> + <td id="LC835" class="blob-code blob-code-inner js-file-line"> return min_t(unsigned long, util, capacity_orig_of(cpu));</td> + </tr> + <tr> + <td id="L836" class="blob-num js-line-number" data-line-number="836"></td> + <td id="LC836" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L837" class="blob-num js-line-number" data-line-number="837"></td> + <td id="LC837" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L838" class="blob-num js-line-number" data-line-number="838"></td> + <td id="LC838" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L839" class="blob-num js-line-number" data-line-number="839"></td> + <td id="LC839" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L840" class="blob-num js-line-number" data-line-number="840"></td> + <td id="LC840" class="blob-code blob-code-inner js-file-line"> * Predicts what cpu_util(@cpu) would return if @p was migrated (and enqueued)</td> + </tr> + <tr> + <td id="L841" class="blob-num js-line-number" data-line-number="841"></td> + <td id="LC841" class="blob-code blob-code-inner js-file-line"> * to @dst_cpu.</td> + </tr> + <tr> + <td id="L842" class="blob-num js-line-number" data-line-number="842"></td> + <td id="LC842" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6693,6 +6981,57 @@</span> static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)</td> + </tr> + <tr> + <td id="L843" class="blob-num js-line-number" data-line-number="843"></td> + <td id="LC843" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L844" class="blob-num js-line-number" data-line-number="844"></td> + <td id="LC844" class="blob-code blob-code-inner js-file-line"> return -1;</td> + </tr> + <tr> + <td id="L845" class="blob-num js-line-number" data-line-number="845"></td> + <td id="LC845" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L846" class="blob-num js-line-number" data-line-number="846"></td> + <td id="LC846" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L847" class="blob-num js-line-number" data-line-number="847"></td> + <td id="LC847" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L848" class="blob-num js-line-number" data-line-number="848"></td> + <td id="LC848" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L849" class="blob-num js-line-number" data-line-number="849"></td> + <td id="LC849" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>static int</span></td> + </tr> + <tr> + <td id="L850" class="blob-num js-line-number" data-line-number="850"></td> + <td id="LC850" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>find_least_IS_cpu(struct task_struct *p)</span></td> + </tr> + <tr> + <td id="L851" class="blob-num js-line-number" data-line-number="851"></td> + <td id="LC851" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L852" class="blob-num js-line-number" data-line-number="852"></td> + <td id="LC852" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cfs_rq *cfs_rq;</span></td> + </tr> + <tr> + <td id="L853" class="blob-num js-line-number" data-line-number="853"></td> + <td id="LC853" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> unsigned int max_IS = 0;</span></td> + </tr> + <tr> + <td id="L854" class="blob-num js-line-number" data-line-number="854"></td> + <td id="LC854" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> unsigned int IS, IS_c, IS_h;</span></td> + </tr> + <tr> + <td id="L855" class="blob-num js-line-number" data-line-number="855"></td> + <td id="LC855" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct sched_entity *curr_se;</span></td> + </tr> + <tr> + <td id="L856" class="blob-num js-line-number" data-line-number="856"></td> + <td id="LC856" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node *cn, *head;</span></td> + </tr> + <tr> + <td id="L857" class="blob-num js-line-number" data-line-number="857"></td> + <td id="LC857" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> int cpu_i;</span></td> + </tr> + <tr> + <td id="L858" class="blob-num js-line-number" data-line-number="858"></td> + <td id="LC858" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> int new_cpu = -1;</span></td> + </tr> + <tr> + <td id="L859" class="blob-num js-line-number" data-line-number="859"></td> + <td id="LC859" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L860" class="blob-num js-line-number" data-line-number="860"></td> + <td id="LC860" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> for_each_online_cpu(cpu_i) {</span></td> + </tr> + <tr> + <td id="L861" class="blob-num js-line-number" data-line-number="861"></td> + <td id="LC861" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (!cpumask_test_cpu(cpu_i, p->cpus_ptr))</span></td> + </tr> + <tr> + <td id="L862" class="blob-num js-line-number" data-line-number="862"></td> + <td id="LC862" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> continue;</span></td> + </tr> + <tr> + <td id="L863" class="blob-num js-line-number" data-line-number="863"></td> + <td id="LC863" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L864" class="blob-num js-line-number" data-line-number="864"></td> + <td id="LC864" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cn = NULL;</span></td> + </tr> + <tr> + <td id="L865" class="blob-num js-line-number" data-line-number="865"></td> + <td id="LC865" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq = &cpu_rq(cpu_i)->cfs;</span></td> + </tr> + <tr> + <td id="L866" class="blob-num js-line-number" data-line-number="866"></td> + <td id="LC866" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L867" class="blob-num js-line-number" data-line-number="867"></td> + <td id="LC867" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> curr_se = cfs_rq->curr;</span></td> + </tr> + <tr> + <td id="L868" class="blob-num js-line-number" data-line-number="868"></td> + <td id="LC868" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> head = cfs_rq->head;</span></td> + </tr> + <tr> + <td id="L869" class="blob-num js-line-number" data-line-number="869"></td> + <td id="LC869" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L870" class="blob-num js-line-number" data-line-number="870"></td> + <td id="LC870" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (!curr_se && head)</span></td> + </tr> + <tr> + <td id="L871" class="blob-num js-line-number" data-line-number="871"></td> + <td id="LC871" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cn = head;</span></td> + </tr> + <tr> + <td id="L872" class="blob-num js-line-number" data-line-number="872"></td> + <td id="LC872" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> else if (curr_se && !head)</span></td> + </tr> + <tr> + <td id="L873" class="blob-num js-line-number" data-line-number="873"></td> + <td id="LC873" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cn = &curr_se->cacule_node;</span></td> + </tr> + <tr> + <td id="L874" class="blob-num js-line-number" data-line-number="874"></td> + <td id="LC874" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> else if (curr_se && head) {</span></td> + </tr> + <tr> + <td id="L875" class="blob-num js-line-number" data-line-number="875"></td> + <td id="LC875" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> IS_c = calc_interactivity(sched_clock(), &curr_se->cacule_node);</span></td> + </tr> + <tr> + <td id="L876" class="blob-num js-line-number" data-line-number="876"></td> + <td id="LC876" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> IS_h = calc_interactivity(sched_clock(), head);</span></td> + </tr> + <tr> + <td id="L877" class="blob-num js-line-number" data-line-number="877"></td> + <td id="LC877" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L878" class="blob-num js-line-number" data-line-number="878"></td> + <td id="LC878" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> IS = IS_c > IS_h? IS_c : IS_h;</span></td> + </tr> + <tr> + <td id="L879" class="blob-num js-line-number" data-line-number="879"></td> + <td id="LC879" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> goto compare;</span></td> + </tr> + <tr> + <td id="L880" class="blob-num js-line-number" data-line-number="880"></td> + <td id="LC880" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> }</span></td> + </tr> + <tr> + <td id="L881" class="blob-num js-line-number" data-line-number="881"></td> + <td id="LC881" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L882" class="blob-num js-line-number" data-line-number="882"></td> + <td id="LC882" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (!cn)</span></td> + </tr> + <tr> + <td id="L883" class="blob-num js-line-number" data-line-number="883"></td> + <td id="LC883" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return cpu_i;</span></td> + </tr> + <tr> + <td id="L884" class="blob-num js-line-number" data-line-number="884"></td> + <td id="LC884" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L885" class="blob-num js-line-number" data-line-number="885"></td> + <td id="LC885" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> IS = calc_interactivity(sched_clock(), cn);</span></td> + </tr> + <tr> + <td id="L886" class="blob-num js-line-number" data-line-number="886"></td> + <td id="LC886" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L887" class="blob-num js-line-number" data-line-number="887"></td> + <td id="LC887" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>compare:</span></td> + </tr> + <tr> + <td id="L888" class="blob-num js-line-number" data-line-number="888"></td> + <td id="LC888" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (IS > max_IS) {</span></td> + </tr> + <tr> + <td id="L889" class="blob-num js-line-number" data-line-number="889"></td> + <td id="LC889" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> max_IS = IS;</span></td> + </tr> + <tr> + <td id="L890" class="blob-num js-line-number" data-line-number="890"></td> + <td id="LC890" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> new_cpu = cpu_i;</span></td> + </tr> + <tr> + <td id="L891" class="blob-num js-line-number" data-line-number="891"></td> + <td id="LC891" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> }</span></td> + </tr> + <tr> + <td id="L892" class="blob-num js-line-number" data-line-number="892"></td> + <td id="LC892" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> }</span></td> + </tr> + <tr> + <td id="L893" class="blob-num js-line-number" data-line-number="893"></td> + <td id="LC893" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L894" class="blob-num js-line-number" data-line-number="894"></td> + <td id="LC894" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return new_cpu;</span></td> + </tr> + <tr> + <td id="L895" class="blob-num js-line-number" data-line-number="895"></td> + <td id="LC895" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L896" class="blob-num js-line-number" data-line-number="896"></td> + <td id="LC896" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L897" class="blob-num js-line-number" data-line-number="897"></td> + <td id="LC897" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L898" class="blob-num js-line-number" data-line-number="898"></td> + <td id="LC898" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L899" class="blob-num js-line-number" data-line-number="899"></td> + <td id="LC899" class="blob-code blob-code-inner js-file-line"> * select_task_rq_fair: Select target runqueue for the waking task in domains</td> + </tr> + <tr> + <td id="L900" class="blob-num js-line-number" data-line-number="900"></td> + <td id="LC900" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6715,6 +7054,26 @@</span> select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f</td> + </tr> + <tr> + <td id="L901" class="blob-num js-line-number" data-line-number="901"></td> + <td id="LC901" class="blob-code blob-code-inner js-file-line"> int want_affine = 0;</td> + </tr> + <tr> + <td id="L902" class="blob-num js-line-number" data-line-number="902"></td> + <td id="LC902" class="blob-code blob-code-inner js-file-line"> int sync = (wake_flags & WF_SYNC) && !(current->flags & PF_EXITING);</td> + </tr> + <tr> + <td id="L903" class="blob-num js-line-number" data-line-number="903"></td> + <td id="LC903" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L904" class="blob-num js-line-number" data-line-number="904"></td> + <td id="LC904" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L905" class="blob-num js-line-number" data-line-number="905"></td> + <td id="LC905" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct sched_entity *se = &p->se;</span></td> + </tr> + <tr> + <td id="L906" class="blob-num js-line-number" data-line-number="906"></td> + <td id="LC906" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L907" class="blob-num js-line-number" data-line-number="907"></td> + <td id="LC907" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (!is_interactive(&se->cacule_node))</span></td> + </tr> + <tr> + <td id="L908" class="blob-num js-line-number" data-line-number="908"></td> + <td id="LC908" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> goto cfs_way;</span></td> + </tr> + <tr> + <td id="L909" class="blob-num js-line-number" data-line-number="909"></td> + <td id="LC909" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L910" class="blob-num js-line-number" data-line-number="910"></td> + <td id="LC910" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // check first if the prev cpu</span></td> + </tr> + <tr> + <td id="L911" class="blob-num js-line-number" data-line-number="911"></td> + <td id="LC911" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> // has 0 tasks</span></td> + </tr> + <tr> + <td id="L912" class="blob-num js-line-number" data-line-number="912"></td> + <td id="LC912" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (cpumask_test_cpu(prev_cpu, p->cpus_ptr) &&</span></td> + </tr> + <tr> + <td id="L913" class="blob-num js-line-number" data-line-number="913"></td> + <td id="LC913" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cpu_rq(prev_cpu)->cfs.nr_running == 0)</span></td> + </tr> + <tr> + <td id="L914" class="blob-num js-line-number" data-line-number="914"></td> + <td id="LC914" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return prev_cpu;</span></td> + </tr> + <tr> + <td id="L915" class="blob-num js-line-number" data-line-number="915"></td> + <td id="LC915" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L916" class="blob-num js-line-number" data-line-number="916"></td> + <td id="LC916" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> new_cpu = find_least_IS_cpu(p);</span></td> + </tr> + <tr> + <td id="L917" class="blob-num js-line-number" data-line-number="917"></td> + <td id="LC917" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L918" class="blob-num js-line-number" data-line-number="918"></td> + <td id="LC918" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (likely(new_cpu != -1))</span></td> + </tr> + <tr> + <td id="L919" class="blob-num js-line-number" data-line-number="919"></td> + <td id="LC919" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> return new_cpu;</span></td> + </tr> + <tr> + <td id="L920" class="blob-num js-line-number" data-line-number="920"></td> + <td id="LC920" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L921" class="blob-num js-line-number" data-line-number="921"></td> + <td id="LC921" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> new_cpu = prev_cpu;</span></td> + </tr> + <tr> + <td id="L922" class="blob-num js-line-number" data-line-number="922"></td> + <td id="LC922" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>cfs_way:</span></td> + </tr> + <tr> + <td id="L923" class="blob-num js-line-number" data-line-number="923"></td> + <td id="LC923" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#else</span></td> + </tr> + <tr> + <td id="L924" class="blob-num js-line-number" data-line-number="924"></td> + <td id="LC924" class="blob-code blob-code-inner js-file-line"> if (sd_flag & SD_BALANCE_WAKE) {</td> + </tr> + <tr> + <td id="L925" class="blob-num js-line-number" data-line-number="925"></td> + <td id="LC925" class="blob-code blob-code-inner js-file-line"> record_wakee(p);</td> + </tr> + <tr> + <td id="L926" class="blob-num js-line-number" data-line-number="926"></td> + <td id="LC926" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L927" class="blob-num js-line-number" data-line-number="927"></td> + <td id="LC927" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6727,6 +7086,7 @@</span> select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f</td> + </tr> + <tr> + <td id="L928" class="blob-num js-line-number" data-line-number="928"></td> + <td id="LC928" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L929" class="blob-num js-line-number" data-line-number="929"></td> + <td id="LC929" class="blob-code blob-code-inner js-file-line"> want_affine = !wake_wide(p) && cpumask_test_cpu(cpu, p->cpus_ptr);</td> + </tr> + <tr> + <td id="L930" class="blob-num js-line-number" data-line-number="930"></td> + <td id="LC930" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L931" class="blob-num js-line-number" data-line-number="931"></td> + <td id="LC931" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L932" class="blob-num js-line-number" data-line-number="932"></td> + <td id="LC932" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L933" class="blob-num js-line-number" data-line-number="933"></td> + <td id="LC933" class="blob-code blob-code-inner js-file-line"> rcu_read_lock();</td> + </tr> + <tr> + <td id="L934" class="blob-num js-line-number" data-line-number="934"></td> + <td id="LC934" class="blob-code blob-code-inner js-file-line"> for_each_domain(cpu, tmp) {</td> + </tr> + <tr> + <td id="L935" class="blob-num js-line-number" data-line-number="935"></td> + <td id="LC935" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6774,6 +7134,7 @@</span> static void detach_entity_cfs_rq(struct sched_entity *se);</td> + </tr> + <tr> + <td id="L936" class="blob-num js-line-number" data-line-number="936"></td> + <td id="LC936" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L937" class="blob-num js-line-number" data-line-number="937"></td> + <td id="LC937" class="blob-code blob-code-inner js-file-line"> static void migrate_task_rq_fair(struct task_struct *p, int new_cpu)</td> + </tr> + <tr> + <td id="L938" class="blob-num js-line-number" data-line-number="938"></td> + <td id="LC938" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L939" class="blob-num js-line-number" data-line-number="939"></td> + <td id="LC939" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L940" class="blob-num js-line-number" data-line-number="940"></td> + <td id="LC940" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L941" class="blob-num js-line-number" data-line-number="941"></td> + <td id="LC941" class="blob-code blob-code-inner js-file-line"> * As blocked tasks retain absolute vruntime the migration needs to</td> + </tr> + <tr> + <td id="L942" class="blob-num js-line-number" data-line-number="942"></td> + <td id="LC942" class="blob-code blob-code-inner js-file-line"> * deal with this by subtracting the old and adding the new</td> + </tr> + <tr> + <td id="L943" class="blob-num js-line-number" data-line-number="943"></td> + <td id="LC943" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6799,6 +7160,7 @@</span> static void migrate_task_rq_fair(struct task_struct *p, int new_cpu)</td> + </tr> + <tr> + <td id="L944" class="blob-num js-line-number" data-line-number="944"></td> + <td id="LC944" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L945" class="blob-num js-line-number" data-line-number="945"></td> + <td id="LC945" class="blob-code blob-code-inner js-file-line"> se->vruntime -= min_vruntime;</td> + </tr> + <tr> + <td id="L946" class="blob-num js-line-number" data-line-number="946"></td> + <td id="LC946" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L947" class="blob-num js-line-number" data-line-number="947"></td> + <td id="LC947" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L948" class="blob-num js-line-number" data-line-number="948"></td> + <td id="LC948" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L949" class="blob-num js-line-number" data-line-number="949"></td> + <td id="LC949" class="blob-code blob-code-inner js-file-line"> if (p->on_rq == TASK_ON_RQ_MIGRATING) {</td> + </tr> + <tr> + <td id="L950" class="blob-num js-line-number" data-line-number="950"></td> + <td id="LC950" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L951" class="blob-num js-line-number" data-line-number="951"></td> + <td id="LC951" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6844,6 +7206,7 @@</span> balance_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf)</td> + </tr> + <tr> + <td id="L952" class="blob-num js-line-number" data-line-number="952"></td> + <td id="LC952" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L953" class="blob-num js-line-number" data-line-number="953"></td> + <td id="LC953" class="blob-code blob-code-inner js-file-line"> #endif /* CONFIG_SMP */</td> + </tr> + <tr> + <td id="L954" class="blob-num js-line-number" data-line-number="954"></td> + <td id="LC954" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L955" class="blob-num js-line-number" data-line-number="955"></td> + <td id="LC955" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L956" class="blob-num js-line-number" data-line-number="956"></td> + <td id="LC956" class="blob-code blob-code-inner js-file-line"> static unsigned long wakeup_gran(struct sched_entity *se)</td> + </tr> + <tr> + <td id="L957" class="blob-num js-line-number" data-line-number="957"></td> + <td id="LC957" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L958" class="blob-num js-line-number" data-line-number="958"></td> + <td id="LC958" class="blob-code blob-code-inner js-file-line"> unsigned long gran = sysctl_sched_wakeup_granularity;</td> + </tr> + <tr> + <td id="L959" class="blob-num js-line-number" data-line-number="959"></td> + <td id="LC959" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6922,6 +7285,7 @@</span> static void set_skip_buddy(struct sched_entity *se)</td> + </tr> + <tr> + <td id="L960" class="blob-num js-line-number" data-line-number="960"></td> + <td id="LC960" class="blob-code blob-code-inner js-file-line"> for_each_sched_entity(se)</td> + </tr> + <tr> + <td id="L961" class="blob-num js-line-number" data-line-number="961"></td> + <td id="LC961" class="blob-code blob-code-inner js-file-line"> cfs_rq_of(se)->skip = se;</td> + </tr> + <tr> + <td id="L962" class="blob-num js-line-number" data-line-number="962"></td> + <td id="LC962" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L963" class="blob-num js-line-number" data-line-number="963"></td> + <td id="LC963" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L964" class="blob-num js-line-number" data-line-number="964"></td> + <td id="LC964" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L965" class="blob-num js-line-number" data-line-number="965"></td> + <td id="LC965" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L966" class="blob-num js-line-number" data-line-number="966"></td> + <td id="LC966" class="blob-code blob-code-inner js-file-line"> * Preempt the current task with a newly woken task if needed:</td> + </tr> + <tr> + <td id="L967" class="blob-num js-line-number" data-line-number="967"></td> + <td id="LC967" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6930,9 +7294,12 @@</span> static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_</td> + </tr> + <tr> + <td id="L968" class="blob-num js-line-number" data-line-number="968"></td> + <td id="LC968" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L969" class="blob-num js-line-number" data-line-number="969"></td> + <td id="LC969" class="blob-code blob-code-inner js-file-line"> struct task_struct *curr = rq->curr;</td> + </tr> + <tr> + <td id="L970" class="blob-num js-line-number" data-line-number="970"></td> + <td id="LC970" class="blob-code blob-code-inner js-file-line"> struct sched_entity *se = &curr->se, *pse = &p->se;</td> + </tr> + <tr> + <td id="L971" class="blob-num js-line-number" data-line-number="971"></td> + <td id="LC971" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L972" class="blob-num js-line-number" data-line-number="972"></td> + <td id="LC972" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L973" class="blob-num js-line-number" data-line-number="973"></td> + <td id="LC973" class="blob-code blob-code-inner js-file-line"> struct cfs_rq *cfs_rq = task_cfs_rq(curr);</td> + </tr> + <tr> + <td id="L974" class="blob-num js-line-number" data-line-number="974"></td> + <td id="LC974" class="blob-code blob-code-inner js-file-line"> int scale = cfs_rq->nr_running >= sched_nr_latency;</td> + </tr> + <tr> + <td id="L975" class="blob-num js-line-number" data-line-number="975"></td> + <td id="LC975" class="blob-code blob-code-inner js-file-line"> int next_buddy_marked = 0;</td> + </tr> + <tr> + <td id="L976" class="blob-num js-line-number" data-line-number="976"></td> + <td id="LC976" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L977" class="blob-num js-line-number" data-line-number="977"></td> + <td id="LC977" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L978" class="blob-num js-line-number" data-line-number="978"></td> + <td id="LC978" class="blob-code blob-code-inner js-file-line"> if (unlikely(se == pse))</td> + </tr> + <tr> + <td id="L979" class="blob-num js-line-number" data-line-number="979"></td> + <td id="LC979" class="blob-code blob-code-inner js-file-line"> return;</td> + </tr> + <tr> + <td id="L980" class="blob-num js-line-number" data-line-number="980"></td> + <td id="LC980" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6946,10 +7313,12 @@</span> static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_</td> + </tr> + <tr> + <td id="L981" class="blob-num js-line-number" data-line-number="981"></td> + <td id="LC981" class="blob-code blob-code-inner js-file-line"> if (unlikely(throttled_hierarchy(cfs_rq_of(pse))))</td> + </tr> + <tr> + <td id="L982" class="blob-num js-line-number" data-line-number="982"></td> + <td id="LC982" class="blob-code blob-code-inner js-file-line"> return;</td> + </tr> + <tr> + <td id="L983" class="blob-num js-line-number" data-line-number="983"></td> + <td id="LC983" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L984" class="blob-num js-line-number" data-line-number="984"></td> + <td id="LC984" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L985" class="blob-num js-line-number" data-line-number="985"></td> + <td id="LC985" class="blob-code blob-code-inner js-file-line"> if (sched_feat(NEXT_BUDDY) && scale && !(wake_flags & WF_FORK)) {</td> + </tr> + <tr> + <td id="L986" class="blob-num js-line-number" data-line-number="986"></td> + <td id="LC986" class="blob-code blob-code-inner js-file-line"> set_next_buddy(pse);</td> + </tr> + <tr> + <td id="L987" class="blob-num js-line-number" data-line-number="987"></td> + <td id="LC987" class="blob-code blob-code-inner js-file-line"> next_buddy_marked = 1;</td> + </tr> + <tr> + <td id="L988" class="blob-num js-line-number" data-line-number="988"></td> + <td id="LC988" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L989" class="blob-num js-line-number" data-line-number="989"></td> + <td id="LC989" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L990" class="blob-num js-line-number" data-line-number="990"></td> + <td id="LC990" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L991" class="blob-num js-line-number" data-line-number="991"></td> + <td id="LC991" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L992" class="blob-num js-line-number" data-line-number="992"></td> + <td id="LC992" class="blob-code blob-code-inner js-file-line"> * We can come here with TIF_NEED_RESCHED already set from new task</td> + </tr> + <tr> + <td id="L993" class="blob-num js-line-number" data-line-number="993"></td> + <td id="LC993" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6979,6 +7348,11 @@</span> static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_</td> + </tr> + <tr> + <td id="L994" class="blob-num js-line-number" data-line-number="994"></td> + <td id="LC994" class="blob-code blob-code-inner js-file-line"> find_matching_se(&se, &pse);</td> + </tr> + <tr> + <td id="L995" class="blob-num js-line-number" data-line-number="995"></td> + <td id="LC995" class="blob-code blob-code-inner js-file-line"> update_curr(cfs_rq_of(se));</td> + </tr> + <tr> + <td id="L996" class="blob-num js-line-number" data-line-number="996"></td> + <td id="LC996" class="blob-code blob-code-inner js-file-line"> BUG_ON(!pse);</td> + </tr> + <tr> + <td id="L997" class="blob-num js-line-number" data-line-number="997"></td> + <td id="LC997" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L998" class="blob-num js-line-number" data-line-number="998"></td> + <td id="LC998" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L999" class="blob-num js-line-number" data-line-number="999"></td> + <td id="LC999" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (entity_before(sched_clock(), &se->cacule_node, &pse->cacule_node) == 1)</span></td> + </tr> + <tr> + <td id="L1000" class="blob-num js-line-number" data-line-number="1000"></td> + <td id="LC1000" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> goto preempt;</span></td> + </tr> + <tr> + <td id="L1001" class="blob-num js-line-number" data-line-number="1001"></td> + <td id="LC1001" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#else</span></td> + </tr> + <tr> + <td id="L1002" class="blob-num js-line-number" data-line-number="1002"></td> + <td id="LC1002" class="blob-code blob-code-inner js-file-line"> if (wakeup_preempt_entity(se, pse) == 1) {</td> + </tr> + <tr> + <td id="L1003" class="blob-num js-line-number" data-line-number="1003"></td> + <td id="LC1003" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L1004" class="blob-num js-line-number" data-line-number="1004"></td> + <td id="LC1004" class="blob-code blob-code-inner js-file-line"> * Bias pick_next to pick the sched entity that is</td> + </tr> + <tr> + <td id="L1005" class="blob-num js-line-number" data-line-number="1005"></td> + <td id="LC1005" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -6988,11 +7362,14 @@</span> static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_</td> + </tr> + <tr> + <td id="L1006" class="blob-num js-line-number" data-line-number="1006"></td> + <td id="LC1006" class="blob-code blob-code-inner js-file-line"> set_next_buddy(pse);</td> + </tr> + <tr> + <td id="L1007" class="blob-num js-line-number" data-line-number="1007"></td> + <td id="LC1007" class="blob-code blob-code-inner js-file-line"> goto preempt;</td> + </tr> + <tr> + <td id="L1008" class="blob-num js-line-number" data-line-number="1008"></td> + <td id="LC1008" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1009" class="blob-num js-line-number" data-line-number="1009"></td> + <td id="LC1009" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L1010" class="blob-num js-line-number" data-line-number="1010"></td> + <td id="LC1010" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1011" class="blob-num js-line-number" data-line-number="1011"></td> + <td id="LC1011" class="blob-code blob-code-inner js-file-line"> return;</td> + </tr> + <tr> + <td id="L1012" class="blob-num js-line-number" data-line-number="1012"></td> + <td id="LC1012" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1013" class="blob-num js-line-number" data-line-number="1013"></td> + <td id="LC1013" class="blob-code blob-code-inner js-file-line"> preempt:</td> + </tr> + <tr> + <td id="L1014" class="blob-num js-line-number" data-line-number="1014"></td> + <td id="LC1014" class="blob-code blob-code-inner js-file-line"> resched_curr(rq);</td> + </tr> + <tr> + <td id="L1015" class="blob-num js-line-number" data-line-number="1015"></td> + <td id="LC1015" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1016" class="blob-num js-line-number" data-line-number="1016"></td> + <td id="LC1016" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L1017" class="blob-num js-line-number" data-line-number="1017"></td> + <td id="LC1017" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L1018" class="blob-num js-line-number" data-line-number="1018"></td> + <td id="LC1018" class="blob-code blob-code-inner js-file-line"> * Only set the backward buddy when the current task is still</td> + </tr> + <tr> + <td id="L1019" class="blob-num js-line-number" data-line-number="1019"></td> + <td id="LC1019" class="blob-code blob-code-inner js-file-line"> * on the rq. This can happen when a wakeup gets interleaved</td> + </tr> + <tr> + <td id="L1020" class="blob-num js-line-number" data-line-number="1020"></td> + <td id="LC1020" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -7007,6 +7384,7 @@</span> static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_</td> + </tr> + <tr> + <td id="L1021" class="blob-num js-line-number" data-line-number="1021"></td> + <td id="LC1021" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1022" class="blob-num js-line-number" data-line-number="1022"></td> + <td id="LC1022" class="blob-code blob-code-inner js-file-line"> if (sched_feat(LAST_BUDDY) && scale && entity_is_task(se))</td> + </tr> + <tr> + <td id="L1023" class="blob-num js-line-number" data-line-number="1023"></td> + <td id="LC1023" class="blob-code blob-code-inner js-file-line"> set_last_buddy(se);</td> + </tr> + <tr> + <td id="L1024" class="blob-num js-line-number" data-line-number="1024"></td> + <td id="LC1024" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L1025" class="blob-num js-line-number" data-line-number="1025"></td> + <td id="LC1025" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1026" class="blob-num js-line-number" data-line-number="1026"></td> + <td id="LC1026" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1027" class="blob-num js-line-number" data-line-number="1027"></td> + <td id="LC1027" class="blob-code blob-code-inner js-file-line"> struct task_struct *</td> + </tr> + <tr> + <td id="L1028" class="blob-num js-line-number" data-line-number="1028"></td> + <td id="LC1028" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -7181,7 +7559,10 @@</span> static void yield_task_fair(struct rq *rq)</td> + </tr> + <tr> + <td id="L1029" class="blob-num js-line-number" data-line-number="1029"></td> + <td id="LC1029" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L1030" class="blob-num js-line-number" data-line-number="1030"></td> + <td id="LC1030" class="blob-code blob-code-inner js-file-line"> struct task_struct *curr = rq->curr;</td> + </tr> + <tr> + <td id="L1031" class="blob-num js-line-number" data-line-number="1031"></td> + <td id="LC1031" class="blob-code blob-code-inner js-file-line"> struct cfs_rq *cfs_rq = task_cfs_rq(curr);</td> + </tr> + <tr> + <td id="L1032" class="blob-num js-line-number" data-line-number="1032"></td> + <td id="LC1032" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1033" class="blob-num js-line-number" data-line-number="1033"></td> + <td id="LC1033" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L1034" class="blob-num js-line-number" data-line-number="1034"></td> + <td id="LC1034" class="blob-code blob-code-inner js-file-line"> struct sched_entity *se = &curr->se;</td> + </tr> + <tr> + <td id="L1035" class="blob-num js-line-number" data-line-number="1035"></td> + <td id="LC1035" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L1036" class="blob-num js-line-number" data-line-number="1036"></td> + <td id="LC1036" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1037" class="blob-num js-line-number" data-line-number="1037"></td> + <td id="LC1037" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L1038" class="blob-num js-line-number" data-line-number="1038"></td> + <td id="LC1038" class="blob-code blob-code-inner js-file-line"> * Are we the only task in the tree?</td> + </tr> + <tr> + <td id="L1039" class="blob-num js-line-number" data-line-number="1039"></td> + <td id="LC1039" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -7189,7 +7570,9 @@</span> static void yield_task_fair(struct rq *rq)</td> + </tr> + <tr> + <td id="L1040" class="blob-num js-line-number" data-line-number="1040"></td> + <td id="LC1040" class="blob-code blob-code-inner js-file-line"> if (unlikely(rq->nr_running == 1))</td> + </tr> + <tr> + <td id="L1041" class="blob-num js-line-number" data-line-number="1041"></td> + <td id="LC1041" class="blob-code blob-code-inner js-file-line"> return;</td> + </tr> + <tr> + <td id="L1042" class="blob-num js-line-number" data-line-number="1042"></td> + <td id="LC1042" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1043" class="blob-num js-line-number" data-line-number="1043"></td> + <td id="LC1043" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L1044" class="blob-num js-line-number" data-line-number="1044"></td> + <td id="LC1044" class="blob-code blob-code-inner js-file-line"> clear_buddies(cfs_rq, se);</td> + </tr> + <tr> + <td id="L1045" class="blob-num js-line-number" data-line-number="1045"></td> + <td id="LC1045" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L1046" class="blob-num js-line-number" data-line-number="1046"></td> + <td id="LC1046" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1047" class="blob-num js-line-number" data-line-number="1047"></td> + <td id="LC1047" class="blob-code blob-code-inner js-file-line"> if (curr->policy != SCHED_BATCH) {</td> + </tr> + <tr> + <td id="L1048" class="blob-num js-line-number" data-line-number="1048"></td> + <td id="LC1048" class="blob-code blob-code-inner js-file-line"> update_rq_clock(rq);</td> + </tr> + <tr> + <td id="L1049" class="blob-num js-line-number" data-line-number="1049"></td> + <td id="LC1049" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -7205,7 +7588,9 @@</span> static void yield_task_fair(struct rq *rq)</td> + </tr> + <tr> + <td id="L1050" class="blob-num js-line-number" data-line-number="1050"></td> + <td id="LC1050" class="blob-code blob-code-inner js-file-line"> rq_clock_skip_update(rq);</td> + </tr> + <tr> + <td id="L1051" class="blob-num js-line-number" data-line-number="1051"></td> + <td id="LC1051" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1052" class="blob-num js-line-number" data-line-number="1052"></td> + <td id="LC1052" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1053" class="blob-num js-line-number" data-line-number="1053"></td> + <td id="LC1053" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L1054" class="blob-num js-line-number" data-line-number="1054"></td> + <td id="LC1054" class="blob-code blob-code-inner js-file-line"> set_skip_buddy(se);</td> + </tr> + <tr> + <td id="L1055" class="blob-num js-line-number" data-line-number="1055"></td> + <td id="LC1055" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L1056" class="blob-num js-line-number" data-line-number="1056"></td> + <td id="LC1056" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1057" class="blob-num js-line-number" data-line-number="1057"></td> + <td id="LC1057" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1058" class="blob-num js-line-number" data-line-number="1058"></td> + <td id="LC1058" class="blob-code blob-code-inner js-file-line"> static bool yield_to_task_fair(struct rq *rq, struct task_struct *p)</td> + </tr> + <tr> + <td id="L1059" class="blob-num js-line-number" data-line-number="1059"></td> + <td id="LC1059" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -7216,8 +7601,10 @@</span> static bool yield_to_task_fair(struct rq *rq, struct task_struct *p)</td> + </tr> + <tr> + <td id="L1060" class="blob-num js-line-number" data-line-number="1060"></td> + <td id="LC1060" class="blob-code blob-code-inner js-file-line"> if (!se->on_rq || throttled_hierarchy(cfs_rq_of(se)))</td> + </tr> + <tr> + <td id="L1061" class="blob-num js-line-number" data-line-number="1061"></td> + <td id="LC1061" class="blob-code blob-code-inner js-file-line"> return false;</td> + </tr> + <tr> + <td id="L1062" class="blob-num js-line-number" data-line-number="1062"></td> + <td id="LC1062" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1063" class="blob-num js-line-number" data-line-number="1063"></td> + <td id="LC1063" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L1064" class="blob-num js-line-number" data-line-number="1064"></td> + <td id="LC1064" class="blob-code blob-code-inner js-file-line"> /* Tell the scheduler that we'd really like pse to run next. */</td> + </tr> + <tr> + <td id="L1065" class="blob-num js-line-number" data-line-number="1065"></td> + <td id="LC1065" class="blob-code blob-code-inner js-file-line"> set_next_buddy(se);</td> + </tr> + <tr> + <td id="L1066" class="blob-num js-line-number" data-line-number="1066"></td> + <td id="LC1066" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L1067" class="blob-num js-line-number" data-line-number="1067"></td> + <td id="LC1067" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1068" class="blob-num js-line-number" data-line-number="1068"></td> + <td id="LC1068" class="blob-code blob-code-inner js-file-line"> yield_task_fair(rq);</td> + </tr> + <tr> + <td id="L1069" class="blob-num js-line-number" data-line-number="1069"></td> + <td id="LC1069" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1070" class="blob-num js-line-number" data-line-number="1070"></td> + <td id="LC1070" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -7445,6 +7832,7 @@</span> static int task_hot(struct task_struct *p, struct lb_env *env)</td> + </tr> + <tr> + <td id="L1071" class="blob-num js-line-number" data-line-number="1071"></td> + <td id="LC1071" class="blob-code blob-code-inner js-file-line"> if (env->sd->flags & SD_SHARE_CPUCAPACITY)</td> + </tr> + <tr> + <td id="L1072" class="blob-num js-line-number" data-line-number="1072"></td> + <td id="LC1072" class="blob-code blob-code-inner js-file-line"> return 0;</td> + </tr> + <tr> + <td id="L1073" class="blob-num js-line-number" data-line-number="1073"></td> + <td id="LC1073" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1074" class="blob-num js-line-number" data-line-number="1074"></td> + <td id="LC1074" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L1075" class="blob-num js-line-number" data-line-number="1075"></td> + <td id="LC1075" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L1076" class="blob-num js-line-number" data-line-number="1076"></td> + <td id="LC1076" class="blob-code blob-code-inner js-file-line"> * Buddy candidates are cache hot:</td> + </tr> + <tr> + <td id="L1077" class="blob-num js-line-number" data-line-number="1077"></td> + <td id="LC1077" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L1078" class="blob-num js-line-number" data-line-number="1078"></td> + <td id="LC1078" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -7452,6 +7840,7 @@</span> static int task_hot(struct task_struct *p, struct lb_env *env)</td> + </tr> + <tr> + <td id="L1079" class="blob-num js-line-number" data-line-number="1079"></td> + <td id="LC1079" class="blob-code blob-code-inner js-file-line"> (&p->se == cfs_rq_of(&p->se)->next ||</td> + </tr> + <tr> + <td id="L1080" class="blob-num js-line-number" data-line-number="1080"></td> + <td id="LC1080" class="blob-code blob-code-inner js-file-line"> &p->se == cfs_rq_of(&p->se)->last))</td> + </tr> + <tr> + <td id="L1081" class="blob-num js-line-number" data-line-number="1081"></td> + <td id="LC1081" class="blob-code blob-code-inner js-file-line"> return 1;</td> + </tr> + <tr> + <td id="L1082" class="blob-num js-line-number" data-line-number="1082"></td> + <td id="LC1082" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L1083" class="blob-num js-line-number" data-line-number="1083"></td> + <td id="LC1083" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1084" class="blob-num js-line-number" data-line-number="1084"></td> + <td id="LC1084" class="blob-code blob-code-inner js-file-line"> if (sysctl_sched_migration_cost == -1)</td> + </tr> + <tr> + <td id="L1085" class="blob-num js-line-number" data-line-number="1085"></td> + <td id="LC1085" class="blob-code blob-code-inner js-file-line"> return 1;</td> + </tr> + <tr> + <td id="L1086" class="blob-num js-line-number" data-line-number="1086"></td> + <td id="LC1086" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -10720,11 +11109,30 @@</span> static void task_tick_fair(struct rq *rq, struct task_struct *curr, int queued)</td> + </tr> + <tr> + <td id="L1087" class="blob-num js-line-number" data-line-number="1087"></td> + <td id="LC1087" class="blob-code blob-code-inner js-file-line"> update_overutilized_status(task_rq(curr));</td> + </tr> + <tr> + <td id="L1088" class="blob-num js-line-number" data-line-number="1088"></td> + <td id="LC1088" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1089" class="blob-num js-line-number" data-line-number="1089"></td> + <td id="LC1089" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1090" class="blob-num js-line-number" data-line-number="1090"></td> + <td id="LC1090" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L1091" class="blob-num js-line-number" data-line-number="1091"></td> + <td id="LC1091" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L1092" class="blob-num js-line-number" data-line-number="1092"></td> + <td id="LC1092" class="blob-code blob-code-inner js-file-line"> * called on fork with the child task as argument from the parent's context</td> + </tr> + <tr> + <td id="L1093" class="blob-num js-line-number" data-line-number="1093"></td> + <td id="LC1093" class="blob-code blob-code-inner js-file-line"> * - child not yet on the tasklist</td> + </tr> + <tr> + <td id="L1094" class="blob-num js-line-number" data-line-number="1094"></td> + <td id="LC1094" class="blob-code blob-code-inner js-file-line"> * - preemption disabled</td> + </tr> + <tr> + <td id="L1095" class="blob-num js-line-number" data-line-number="1095"></td> + <td id="LC1095" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L1096" class="blob-num js-line-number" data-line-number="1096"></td> + <td id="LC1096" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> static void task_fork_fair(struct task_struct *p)</span></td> + </tr> + <tr> + <td id="L1097" class="blob-num js-line-number" data-line-number="1097"></td> + <td id="LC1097" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>{</span></td> + </tr> + <tr> + <td id="L1098" class="blob-num js-line-number" data-line-number="1098"></td> + <td id="LC1098" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cfs_rq *cfs_rq;</span></td> + </tr> + <tr> + <td id="L1099" class="blob-num js-line-number" data-line-number="1099"></td> + <td id="LC1099" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct sched_entity *curr;</span></td> + </tr> + <tr> + <td id="L1100" class="blob-num js-line-number" data-line-number="1100"></td> + <td id="LC1100" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct rq *rq = this_rq();</span></td> + </tr> + <tr> + <td id="L1101" class="blob-num js-line-number" data-line-number="1101"></td> + <td id="LC1101" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct rq_flags rf;</span></td> + </tr> + <tr> + <td id="L1102" class="blob-num js-line-number" data-line-number="1102"></td> + <td id="LC1102" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1103" class="blob-num js-line-number" data-line-number="1103"></td> + <td id="LC1103" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> rq_lock(rq, &rf);</span></td> + </tr> + <tr> + <td id="L1104" class="blob-num js-line-number" data-line-number="1104"></td> + <td id="LC1104" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> update_rq_clock(rq);</span></td> + </tr> + <tr> + <td id="L1105" class="blob-num js-line-number" data-line-number="1105"></td> + <td id="LC1105" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1106" class="blob-num js-line-number" data-line-number="1106"></td> + <td id="LC1106" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq = task_cfs_rq(current);</span></td> + </tr> + <tr> + <td id="L1107" class="blob-num js-line-number" data-line-number="1107"></td> + <td id="LC1107" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> curr = cfs_rq->curr;</span></td> + </tr> + <tr> + <td id="L1108" class="blob-num js-line-number" data-line-number="1108"></td> + <td id="LC1108" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> if (curr)</span></td> + </tr> + <tr> + <td id="L1109" class="blob-num js-line-number" data-line-number="1109"></td> + <td id="LC1109" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> update_curr(cfs_rq);</span></td> + </tr> + <tr> + <td id="L1110" class="blob-num js-line-number" data-line-number="1110"></td> + <td id="LC1110" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1111" class="blob-num js-line-number" data-line-number="1111"></td> + <td id="LC1111" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> rq_unlock(rq, &rf);</span></td> + </tr> + <tr> + <td id="L1112" class="blob-num js-line-number" data-line-number="1112"></td> + <td id="LC1112" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>}</span></td> + </tr> + <tr> + <td id="L1113" class="blob-num js-line-number" data-line-number="1113"></td> + <td id="LC1113" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#else</span></td> + </tr> + <tr> + <td id="L1114" class="blob-num js-line-number" data-line-number="1114"></td> + <td id="LC1114" class="blob-code blob-code-inner js-file-line"> static void task_fork_fair(struct task_struct *p)</td> + </tr> + <tr> + <td id="L1115" class="blob-num js-line-number" data-line-number="1115"></td> + <td id="LC1115" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L1116" class="blob-num js-line-number" data-line-number="1116"></td> + <td id="LC1116" class="blob-code blob-code-inner js-file-line"> struct cfs_rq *cfs_rq;</td> + </tr> + <tr> + <td id="L1117" class="blob-num js-line-number" data-line-number="1117"></td> + <td id="LC1117" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -10755,6 +11163,7 @@</span> static void task_fork_fair(struct task_struct *p)</td> + </tr> + <tr> + <td id="L1118" class="blob-num js-line-number" data-line-number="1118"></td> + <td id="LC1118" class="blob-code blob-code-inner js-file-line"> se->vruntime -= cfs_rq->min_vruntime;</td> + </tr> + <tr> + <td id="L1119" class="blob-num js-line-number" data-line-number="1119"></td> + <td id="LC1119" class="blob-code blob-code-inner js-file-line"> rq_unlock(rq, &rf);</td> + </tr> + <tr> + <td id="L1120" class="blob-num js-line-number" data-line-number="1120"></td> + <td id="LC1120" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1121" class="blob-num js-line-number" data-line-number="1121"></td> + <td id="LC1121" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L1122" class="blob-num js-line-number" data-line-number="1122"></td> + <td id="LC1122" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1123" class="blob-num js-line-number" data-line-number="1123"></td> + <td id="LC1123" class="blob-code blob-code-inner js-file-line"> /*</td> + </tr> + <tr> + <td id="L1124" class="blob-num js-line-number" data-line-number="1124"></td> + <td id="LC1124" class="blob-code blob-code-inner js-file-line"> * Priority of the task has changed. Check to see if we preempt</td> + </tr> + <tr> + <td id="L1125" class="blob-num js-line-number" data-line-number="1125"></td> + <td id="LC1125" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -10867,6 +11276,8 @@</span> static void attach_entity_cfs_rq(struct sched_entity *se)</td> + </tr> + <tr> + <td id="L1126" class="blob-num js-line-number" data-line-number="1126"></td> + <td id="LC1126" class="blob-code blob-code-inner js-file-line"> static void detach_task_cfs_rq(struct task_struct *p)</td> + </tr> + <tr> + <td id="L1127" class="blob-num js-line-number" data-line-number="1127"></td> + <td id="LC1127" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L1128" class="blob-num js-line-number" data-line-number="1128"></td> + <td id="LC1128" class="blob-code blob-code-inner js-file-line"> struct sched_entity *se = &p->se;</td> + </tr> + <tr> + <td id="L1129" class="blob-num js-line-number" data-line-number="1129"></td> + <td id="LC1129" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1130" class="blob-num js-line-number" data-line-number="1130"></td> + <td id="LC1130" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L1131" class="blob-num js-line-number" data-line-number="1131"></td> + <td id="LC1131" class="blob-code blob-code-inner js-file-line"> struct cfs_rq *cfs_rq = cfs_rq_of(se);</td> + </tr> + <tr> + <td id="L1132" class="blob-num js-line-number" data-line-number="1132"></td> + <td id="LC1132" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1133" class="blob-num js-line-number" data-line-number="1133"></td> + <td id="LC1133" class="blob-code blob-code-inner js-file-line"> if (!vruntime_normalized(p)) {</td> + </tr> + <tr> + <td id="L1134" class="blob-num js-line-number" data-line-number="1134"></td> + <td id="LC1134" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -10877,6 +11288,7 @@</span> static void detach_task_cfs_rq(struct task_struct *p)</td> + </tr> + <tr> + <td id="L1135" class="blob-num js-line-number" data-line-number="1135"></td> + <td id="LC1135" class="blob-code blob-code-inner js-file-line"> place_entity(cfs_rq, se, 0);</td> + </tr> + <tr> + <td id="L1136" class="blob-num js-line-number" data-line-number="1136"></td> + <td id="LC1136" class="blob-code blob-code-inner js-file-line"> se->vruntime -= cfs_rq->min_vruntime;</td> + </tr> + <tr> + <td id="L1137" class="blob-num js-line-number" data-line-number="1137"></td> + <td id="LC1137" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1138" class="blob-num js-line-number" data-line-number="1138"></td> + <td id="LC1138" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L1139" class="blob-num js-line-number" data-line-number="1139"></td> + <td id="LC1139" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1140" class="blob-num js-line-number" data-line-number="1140"></td> + <td id="LC1140" class="blob-code blob-code-inner js-file-line"> detach_entity_cfs_rq(se);</td> + </tr> + <tr> + <td id="L1141" class="blob-num js-line-number" data-line-number="1141"></td> + <td id="LC1141" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1142" class="blob-num js-line-number" data-line-number="1142"></td> + <td id="LC1142" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -10884,12 +11296,17 @@</span> static void detach_task_cfs_rq(struct task_struct *p)</td> + </tr> + <tr> + <td id="L1143" class="blob-num js-line-number" data-line-number="1143"></td> + <td id="LC1143" class="blob-code blob-code-inner js-file-line"> static void attach_task_cfs_rq(struct task_struct *p)</td> + </tr> + <tr> + <td id="L1144" class="blob-num js-line-number" data-line-number="1144"></td> + <td id="LC1144" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L1145" class="blob-num js-line-number" data-line-number="1145"></td> + <td id="LC1145" class="blob-code blob-code-inner js-file-line"> struct sched_entity *se = &p->se;</td> + </tr> + <tr> + <td id="L1146" class="blob-num js-line-number" data-line-number="1146"></td> + <td id="LC1146" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1147" class="blob-num js-line-number" data-line-number="1147"></td> + <td id="LC1147" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L1148" class="blob-num js-line-number" data-line-number="1148"></td> + <td id="LC1148" class="blob-code blob-code-inner js-file-line"> struct cfs_rq *cfs_rq = cfs_rq_of(se);</td> + </tr> + <tr> + <td id="L1149" class="blob-num js-line-number" data-line-number="1149"></td> + <td id="LC1149" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L1150" class="blob-num js-line-number" data-line-number="1150"></td> + <td id="LC1150" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1151" class="blob-num js-line-number" data-line-number="1151"></td> + <td id="LC1151" class="blob-code blob-code-inner js-file-line"> attach_entity_cfs_rq(se);</td> + </tr> + <tr> + <td id="L1152" class="blob-num js-line-number" data-line-number="1152"></td> + <td id="LC1152" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1153" class="blob-num js-line-number" data-line-number="1153"></td> + <td id="LC1153" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L1154" class="blob-num js-line-number" data-line-number="1154"></td> + <td id="LC1154" class="blob-code blob-code-inner js-file-line"> if (!vruntime_normalized(p))</td> + </tr> + <tr> + <td id="L1155" class="blob-num js-line-number" data-line-number="1155"></td> + <td id="LC1155" class="blob-code blob-code-inner js-file-line"> se->vruntime += cfs_rq->min_vruntime;</td> + </tr> + <tr> + <td id="L1156" class="blob-num js-line-number" data-line-number="1156"></td> + <td id="LC1156" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L1157" class="blob-num js-line-number" data-line-number="1157"></td> + <td id="LC1157" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1158" class="blob-num js-line-number" data-line-number="1158"></td> + <td id="LC1158" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1159" class="blob-num js-line-number" data-line-number="1159"></td> + <td id="LC1159" class="blob-code blob-code-inner js-file-line"> static void switched_from_fair(struct rq *rq, struct task_struct *p)</td> + </tr> + <tr> + <td id="L1160" class="blob-num js-line-number" data-line-number="1160"></td> + <td id="LC1160" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -10945,13 +11362,22 @@</span> static void set_next_task_fair(struct rq *rq, struct task_struct *p, bool first)</td> + </tr> + <tr> + <td id="L1161" class="blob-num js-line-number" data-line-number="1161"></td> + <td id="LC1161" class="blob-code blob-code-inner js-file-line"> void init_cfs_rq(struct cfs_rq *cfs_rq)</td> + </tr> + <tr> + <td id="L1162" class="blob-num js-line-number" data-line-number="1162"></td> + <td id="LC1162" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L1163" class="blob-num js-line-number" data-line-number="1163"></td> + <td id="LC1163" class="blob-code blob-code-inner js-file-line"> cfs_rq->tasks_timeline = RB_ROOT_CACHED;</td> + </tr> + <tr> + <td id="L1164" class="blob-num js-line-number" data-line-number="1164"></td> + <td id="LC1164" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1165" class="blob-num js-line-number" data-line-number="1165"></td> + <td id="LC1165" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L1166" class="blob-num js-line-number" data-line-number="1166"></td> + <td id="LC1166" class="blob-code blob-code-inner js-file-line"> cfs_rq->min_vruntime = (u64)(-(1LL << 20));</td> + </tr> + <tr> + <td id="L1167" class="blob-num js-line-number" data-line-number="1167"></td> + <td id="LC1167" class="blob-code blob-code-inner js-file-line"> #ifndef CONFIG_64BIT</td> + </tr> + <tr> + <td id="L1168" class="blob-num js-line-number" data-line-number="1168"></td> + <td id="LC1168" class="blob-code blob-code-inner js-file-line"> cfs_rq->min_vruntime_copy = cfs_rq->min_vruntime;</td> + </tr> + <tr> + <td id="L1169" class="blob-num js-line-number" data-line-number="1169"></td> + <td id="LC1169" class="blob-code blob-code-inner js-file-line"> #endif</td> + </tr> + <tr> + <td id="L1170" class="blob-num js-line-number" data-line-number="1170"></td> + <td id="LC1170" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L1171" class="blob-num js-line-number" data-line-number="1171"></td> + <td id="LC1171" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1172" class="blob-num js-line-number" data-line-number="1172"></td> + <td id="LC1172" class="blob-code blob-code-inner js-file-line"> #ifdef CONFIG_SMP</td> + </tr> + <tr> + <td id="L1173" class="blob-num js-line-number" data-line-number="1173"></td> + <td id="LC1173" class="blob-code blob-code-inner js-file-line"> raw_spin_lock_init(&cfs_rq->removed.lock);</td> + </tr> + <tr> + <td id="L1174" class="blob-num js-line-number" data-line-number="1174"></td> + <td id="LC1174" class="blob-code blob-code-inner js-file-line"> #endif</td> + </tr> + <tr> + <td id="L1175" class="blob-num js-line-number" data-line-number="1175"></td> + <td id="LC1175" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1176" class="blob-num js-line-number" data-line-number="1176"></td> + <td id="LC1176" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L1177" class="blob-num js-line-number" data-line-number="1177"></td> + <td id="LC1177" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->head = NULL;</span></td> + </tr> + <tr> + <td id="L1178" class="blob-num js-line-number" data-line-number="1178"></td> + <td id="LC1178" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> cfs_rq->tail = NULL;</span></td> + </tr> + <tr> + <td id="L1179" class="blob-num js-line-number" data-line-number="1179"></td> + <td id="LC1179" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L1180" class="blob-num js-line-number" data-line-number="1180"></td> + <td id="LC1180" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1181" class="blob-num js-line-number" data-line-number="1181"></td> + <td id="LC1181" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1182" class="blob-num js-line-number" data-line-number="1182"></td> + <td id="LC1182" class="blob-code blob-code-inner js-file-line"> #ifdef CONFIG_FAIR_GROUP_SCHED</td> + </tr> + <tr> + <td id="L1183" class="blob-num js-line-number" data-line-number="1183"></td> + <td id="LC1183" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h</span></td> + </tr> + <tr> + <td id="L1184" class="blob-num js-line-number" data-line-number="1184"></td> + <td id="LC1184" class="blob-code blob-code-inner js-file-line">index fac1b121d113..7d9d59cee2d2 100644</td> + </tr> + <tr> + <td id="L1185" class="blob-num js-line-number" data-line-number="1185"></td> + <td id="LC1185" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- a/kernel/sched/sched.h</span></td> + </tr> + <tr> + <td id="L1186" class="blob-num js-line-number" data-line-number="1186"></td> + <td id="LC1186" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ b/kernel/sched/sched.h</span></td> + </tr> + <tr> + <td id="L1187" class="blob-num js-line-number" data-line-number="1187"></td> + <td id="LC1187" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -517,10 +517,13 @@</span> struct cfs_rq {</td> + </tr> + <tr> + <td id="L1188" class="blob-num js-line-number" data-line-number="1188"></td> + <td id="LC1188" class="blob-code blob-code-inner js-file-line"> unsigned int idle_h_nr_running; /* SCHED_IDLE */</td> + </tr> + <tr> + <td id="L1189" class="blob-num js-line-number" data-line-number="1189"></td> + <td id="LC1189" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1190" class="blob-num js-line-number" data-line-number="1190"></td> + <td id="LC1190" class="blob-code blob-code-inner js-file-line"> u64 exec_clock;</td> + </tr> + <tr> + <td id="L1191" class="blob-num js-line-number" data-line-number="1191"></td> + <td id="LC1191" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1192" class="blob-num js-line-number" data-line-number="1192"></td> + <td id="LC1192" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#if !defined(CONFIG_CACULE_SCHED)</span></td> + </tr> + <tr> + <td id="L1193" class="blob-num js-line-number" data-line-number="1193"></td> + <td id="LC1193" class="blob-code blob-code-inner js-file-line"> u64 min_vruntime;</td> + </tr> + <tr> + <td id="L1194" class="blob-num js-line-number" data-line-number="1194"></td> + <td id="LC1194" class="blob-code blob-code-inner js-file-line"> #ifndef CONFIG_64BIT</td> + </tr> + <tr> + <td id="L1195" class="blob-num js-line-number" data-line-number="1195"></td> + <td id="LC1195" class="blob-code blob-code-inner js-file-line"> u64 min_vruntime_copy;</td> + </tr> + <tr> + <td id="L1196" class="blob-num js-line-number" data-line-number="1196"></td> + <td id="LC1196" class="blob-code blob-code-inner js-file-line"> #endif</td> + </tr> + <tr> + <td id="L1197" class="blob-num js-line-number" data-line-number="1197"></td> + <td id="LC1197" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif /* CONFIG_CACULE_SCHED */</span></td> + </tr> + <tr> + <td id="L1198" class="blob-num js-line-number" data-line-number="1198"></td> + <td id="LC1198" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1199" class="blob-num js-line-number" data-line-number="1199"></td> + <td id="LC1199" class="blob-code blob-code-inner js-file-line"> struct rb_root_cached tasks_timeline;</td> + </tr> + <tr> + <td id="L1200" class="blob-num js-line-number" data-line-number="1200"></td> + <td id="LC1200" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1201" class="blob-num js-line-number" data-line-number="1201"></td> + <td id="LC1201" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -529,9 +532,15 @@</span> struct cfs_rq {</td> + </tr> + <tr> + <td id="L1202" class="blob-num js-line-number" data-line-number="1202"></td> + <td id="LC1202" class="blob-code blob-code-inner js-file-line"> * It is set to NULL otherwise (i.e when none are currently running).</td> + </tr> + <tr> + <td id="L1203" class="blob-num js-line-number" data-line-number="1203"></td> + <td id="LC1203" class="blob-code blob-code-inner js-file-line"> */</td> + </tr> + <tr> + <td id="L1204" class="blob-num js-line-number" data-line-number="1204"></td> + <td id="LC1204" class="blob-code blob-code-inner js-file-line"> struct sched_entity *curr;</td> + </tr> + <tr> + <td id="L1205" class="blob-num js-line-number" data-line-number="1205"></td> + <td id="LC1205" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L1206" class="blob-num js-line-number" data-line-number="1206"></td> + <td id="LC1206" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node *head;</span></td> + </tr> + <tr> + <td id="L1207" class="blob-num js-line-number" data-line-number="1207"></td> + <td id="LC1207" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> struct cacule_node *tail;</span></td> + </tr> + <tr> + <td id="L1208" class="blob-num js-line-number" data-line-number="1208"></td> + <td id="LC1208" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span></span></td> + </tr> + <tr> + <td id="L1209" class="blob-num js-line-number" data-line-number="1209"></td> + <td id="LC1209" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#else</span></td> + </tr> + <tr> + <td id="L1210" class="blob-num js-line-number" data-line-number="1210"></td> + <td id="LC1210" class="blob-code blob-code-inner js-file-line"> struct sched_entity *next;</td> + </tr> + <tr> + <td id="L1211" class="blob-num js-line-number" data-line-number="1211"></td> + <td id="LC1211" class="blob-code blob-code-inner js-file-line"> struct sched_entity *last;</td> + </tr> + <tr> + <td id="L1212" class="blob-num js-line-number" data-line-number="1212"></td> + <td id="LC1212" class="blob-code blob-code-inner js-file-line"> struct sched_entity *skip;</td> + </tr> + <tr> + <td id="L1213" class="blob-num js-line-number" data-line-number="1213"></td> + <td id="LC1213" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif // CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L1214" class="blob-num js-line-number" data-line-number="1214"></td> + <td id="LC1214" class="blob-code blob-code-inner js-file-line"> </td> + </tr> + <tr> + <td id="L1215" class="blob-num js-line-number" data-line-number="1215"></td> + <td id="LC1215" class="blob-code blob-code-inner js-file-line"> #ifdef CONFIG_SCHED_DEBUG</td> + </tr> + <tr> + <td id="L1216" class="blob-num js-line-number" data-line-number="1216"></td> + <td id="LC1216" class="blob-code blob-code-inner js-file-line"> unsigned int nr_spread_over;</td> + </tr> + <tr> + <td id="L1217" class="blob-num js-line-number" data-line-number="1217"></td> + <td id="LC1217" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">diff --git a/kernel/sysctl.c b/kernel/sysctl.c</span></td> + </tr> + <tr> + <td id="L1218" class="blob-num js-line-number" data-line-number="1218"></td> + <td id="LC1218" class="blob-code blob-code-inner js-file-line">index b9306d2bb426..8b3c772eb458 100644</td> + </tr> + <tr> + <td id="L1219" class="blob-num js-line-number" data-line-number="1219"></td> + <td id="LC1219" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- a/kernel/sysctl.c</span></td> + </tr> + <tr> + <td id="L1220" class="blob-num js-line-number" data-line-number="1220"></td> + <td id="LC1220" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ b/kernel/sysctl.c</span></td> + </tr> + <tr> + <td id="L1221" class="blob-num js-line-number" data-line-number="1221"></td> + <td id="LC1221" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -1659,6 +1659,29 @@</span> static struct ctl_table kern_table[] = {</td> + </tr> + <tr> + <td id="L1222" class="blob-num js-line-number" data-line-number="1222"></td> + <td id="LC1222" class="blob-code blob-code-inner js-file-line"> .mode = 0644,</td> + </tr> + <tr> + <td id="L1223" class="blob-num js-line-number" data-line-number="1223"></td> + <td id="LC1223" class="blob-code blob-code-inner js-file-line"> .proc_handler = proc_dointvec,</td> + </tr> + <tr> + <td id="L1224" class="blob-num js-line-number" data-line-number="1224"></td> + <td id="LC1224" class="blob-code blob-code-inner js-file-line"> },</td> + </tr> + <tr> + <td id="L1225" class="blob-num js-line-number" data-line-number="1225"></td> + <td id="LC1225" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#ifdef CONFIG_CACULE_SCHED</span></td> + </tr> + <tr> + <td id="L1226" class="blob-num js-line-number" data-line-number="1226"></td> + <td id="LC1226" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> {</span></td> + </tr> + <tr> + <td id="L1227" class="blob-num js-line-number" data-line-number="1227"></td> + <td id="LC1227" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .procname = "sched_interactivity_factor",</span></td> + </tr> + <tr> + <td id="L1228" class="blob-num js-line-number" data-line-number="1228"></td> + <td id="LC1228" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .data = &interactivity_factor,</span></td> + </tr> + <tr> + <td id="L1229" class="blob-num js-line-number" data-line-number="1229"></td> + <td id="LC1229" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .maxlen = sizeof(int),</span></td> + </tr> + <tr> + <td id="L1230" class="blob-num js-line-number" data-line-number="1230"></td> + <td id="LC1230" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .mode = 0644,</span></td> + </tr> + <tr> + <td id="L1231" class="blob-num js-line-number" data-line-number="1231"></td> + <td id="LC1231" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .proc_handler = proc_dointvec,</span></td> + </tr> + <tr> + <td id="L1232" class="blob-num js-line-number" data-line-number="1232"></td> + <td id="LC1232" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> },</span></td> + </tr> + <tr> + <td id="L1233" class="blob-num js-line-number" data-line-number="1233"></td> + <td id="LC1233" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> {</span></td> + </tr> + <tr> + <td id="L1234" class="blob-num js-line-number" data-line-number="1234"></td> + <td id="LC1234" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .procname = "sched_interactivity_threshold",</span></td> + </tr> + <tr> + <td id="L1235" class="blob-num js-line-number" data-line-number="1235"></td> + <td id="LC1235" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .data = &interactivity_threshold,</span></td> + </tr> + <tr> + <td id="L1236" class="blob-num js-line-number" data-line-number="1236"></td> + <td id="LC1236" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .maxlen = sizeof(unsigned int),</span></td> + </tr> + <tr> + <td id="L1237" class="blob-num js-line-number" data-line-number="1237"></td> + <td id="LC1237" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .mode = 0644,</span></td> + </tr> + <tr> + <td id="L1238" class="blob-num js-line-number" data-line-number="1238"></td> + <td id="LC1238" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .proc_handler = proc_dointvec,</span></td> + </tr> + <tr> + <td id="L1239" class="blob-num js-line-number" data-line-number="1239"></td> + <td id="LC1239" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> },</span></td> + </tr> + <tr> + <td id="L1240" class="blob-num js-line-number" data-line-number="1240"></td> + <td id="LC1240" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> {</span></td> + </tr> + <tr> + <td id="L1241" class="blob-num js-line-number" data-line-number="1241"></td> + <td id="LC1241" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .procname = "sched_max_lifetime_ms",</span></td> + </tr> + <tr> + <td id="L1242" class="blob-num js-line-number" data-line-number="1242"></td> + <td id="LC1242" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .data = &cacule_max_lifetime,</span></td> + </tr> + <tr> + <td id="L1243" class="blob-num js-line-number" data-line-number="1243"></td> + <td id="LC1243" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .maxlen = sizeof(int),</span></td> + </tr> + <tr> + <td id="L1244" class="blob-num js-line-number" data-line-number="1244"></td> + <td id="LC1244" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .mode = 0644,</span></td> + </tr> + <tr> + <td id="L1245" class="blob-num js-line-number" data-line-number="1245"></td> + <td id="LC1245" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> .proc_handler = proc_dointvec,</span></td> + </tr> + <tr> + <td id="L1246" class="blob-num js-line-number" data-line-number="1246"></td> + <td id="LC1246" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> },</span></td> + </tr> + <tr> + <td id="L1247" class="blob-num js-line-number" data-line-number="1247"></td> + <td id="LC1247" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span>#endif</span></td> + </tr> + <tr> + <td id="L1248" class="blob-num js-line-number" data-line-number="1248"></td> + <td id="LC1248" class="blob-code blob-code-inner js-file-line"> #ifdef CONFIG_SCHED_DEBUG</td> + </tr> + <tr> + <td id="L1249" class="blob-num js-line-number" data-line-number="1249"></td> + <td id="LC1249" class="blob-code blob-code-inner js-file-line"> {</td> + </tr> + <tr> + <td id="L1250" class="blob-num js-line-number" data-line-number="1250"></td> + <td id="LC1250" class="blob-code blob-code-inner js-file-line"> .procname = "sched_min_granularity_ns",</td> + </tr> +</table> + + <details class="details-reset details-overlay BlobToolbar position-absolute js-file-line-actions dropdown d-none" aria-hidden="true"> + <summary class="btn-octicon ml-0 px-2 p-0 color-bg-primary border color-border-tertiary rounded-1" aria-label="Inline file action toolbar"> + <svg class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg> + </summary> + <details-menu> + <ul class="BlobToolbar-dropdown dropdown-menu dropdown-menu-se mt-2" style="width:185px"> + <li> + <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-lines" style="cursor:pointer;"> + Copy lines + </clipboard-copy> + </li> + <li> + <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-permalink" style="cursor:pointer;"> + Copy permalink + </clipboard-copy> + </li> + <li><a class="dropdown-item js-update-url-with-hash" id="js-view-git-blame" role="menuitem" href="/hamadmarri/cacule-cpu-scheduler/blame/ce27d217b2762598faca57a631ca2b02023c539d/patches/CacULE/v5.10/cacule-5.10.patch">View git blame</a></li> + <li><a class="dropdown-item" id="js-new-issue" role="menuitem" href="/hamadmarri/cacule-cpu-scheduler/issues/new">Reference in new issue</a></li> + </ul> + </details-menu> + </details> + + </div> + + </div> + + + + + <details class="details-reset details-overlay details-overlay-dark" id="jumpto-line-details-dialog"> + <summary data-hotkey="l" aria-label="Jump to line"></summary> + <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast linejump" aria-label="Jump to line"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form Box-body d-flex" action="" accept-charset="UTF-8" method="get"> + <input class="form-control flex-auto mr-3 linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line…" aria-label="Jump to line" autofocus> + <button type="submit" class="btn" data-close-dialog>Go</button> +</form> </details-dialog> + </details> + + +</div> + + + + </div> +</div> + + </main> + </div> + + </div> + + +<div class="footer container-xl width-full p-responsive" role="contentinfo"> + <div class="position-relative d-flex flex-row-reverse flex-lg-row flex-wrap flex-lg-nowrap flex-justify-center flex-lg-justify-between pt-6 pb-2 mt-6 f6 color-text-secondary border-top color-border-secondary "> + <ul class="list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0"> + <li class="mr-3 mr-lg-0">© 2021 GitHub, Inc.</li> + <li class="mr-3 mr-lg-0"><a href="https://docs.github.com/en/github/site-policy/github-terms-of-service" data-ga-click="Footer, go to terms, text:terms">Terms</a></li> + <li class="mr-3 mr-lg-0"><a href="https://docs.github.com/en/github/site-policy/github-privacy-statement" data-ga-click="Footer, go to privacy, text:privacy">Privacy</a></li> + <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to security, text:security" href="https://github.com/security">Security</a></li> + <li class="mr-3 mr-lg-0"><a href="https://www.githubstatus.com/" data-ga-click="Footer, go to status, text:status">Status</a></li> + <li><a data-ga-click="Footer, go to help, text:Docs" href="https://docs.github.com">Docs</a></li> + </ul> + + <a aria-label="Homepage" title="GitHub" class="footer-octicon d-none d-lg-block mx-lg-4" href="https://github.com"> + <svg height="24" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> +</a> + <ul class="list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0"> + <li class="mr-3 mr-lg-0"><a href="https://support.github.com" data-ga-click="Footer, go to contact, text:contact">Contact GitHub</a></li> + <li class="mr-3 mr-lg-0"><a href="https://github.com/pricing" data-ga-click="Footer, go to Pricing, text:Pricing">Pricing</a></li> + <li class="mr-3 mr-lg-0"><a href="https://docs.github.com" data-ga-click="Footer, go to api, text:api">API</a></li> + <li class="mr-3 mr-lg-0"><a href="https://services.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li> + <li class="mr-3 mr-lg-0"><a href="https://github.blog" data-ga-click="Footer, go to blog, text:blog">Blog</a></li> + <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li> + </ul> + </div> + <div class="d-flex flex-justify-center pb-6"> + <span class="f6 color-text-tertiary"></span> + </div> + + +</div> + + + + <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> + <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path></svg> + <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> + <svg class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg> + </button> + You can’t perform that action at this time. + </div> + + <div class="js-stale-session-flash flash flash-warn flash-banner" hidden + > + <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path></svg> + <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span> + <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span> + </div> + <template id="site-details-dialog"> + <details class="details-reset details-overlay details-overlay-dark lh-default color-text-primary hx_rsm" open> + <summary role="button" aria-label="Close dialog"></summary> + <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> + <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> + <svg class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg> + </button> + <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> + </details-dialog> + </details> +</template> + + <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0"> + <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"> + </div> +</div> + + + + + </body> +</html> + |