From 41cfeabff53e11604976efcd30e02841b889f478 Mon Sep 17 00:00:00 2001 From: Tk-Glitch Date: Tue, 15 Sep 2020 13:21:12 +0200 Subject: [PATCH] linux58-tkg: Update Project C patchset to v5.8-r3 https://gitlab.com/alfredchen/projectc/-/commit/d2a44a3bbadf09d9018c1bee3fdf5eef921bc1de --- linux58-tkg/PKGBUILD | 6 +- linux58-tkg/linux58-tkg-config/prepare | 4 +- ..._v5.8-r2.patch => 0009-prjc_v5.8-r3.patch} | 136 +++++++----------- 3 files changed, 53 insertions(+), 93 deletions(-) rename linux58-tkg/linux58-tkg-patches/{0009-prjc_v5.8-r2.patch => 0009-prjc_v5.8-r3.patch} (98%) diff --git a/linux58-tkg/PKGBUILD b/linux58-tkg/PKGBUILD index 555cf7f..4532603 100644 --- a/linux58-tkg/PKGBUILD +++ b/linux58-tkg/PKGBUILD @@ -45,7 +45,7 @@ else fi pkgname=("${pkgbase}" "${pkgbase}-headers") pkgver="${_basekernel}"."${_sub}" -pkgrel=15 +pkgrel=16 pkgdesc='Linux-tkg' arch=('x86_64') # no i686 in here url="http://www.kernel.org/" @@ -78,7 +78,7 @@ source=("https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${_basekernel}.tar.x #0008-5.8-bcachefs.patch 0009-glitched-ondemand-bmq.patch 0009-glitched-bmq.patch - 0009-prjc_v5.8-r2.patch + 0009-prjc_v5.8-r3.patch 0011-ZFS-fix.patch #0012-linux-hardened.patch 0012-misc-additions.patch @@ -101,7 +101,7 @@ sha256sums=('e7f75186aa0642114af8f19d99559937300ca27acaf7451b36d4f9b0f85cf1f5' 'cd225e86d72eaf6c31ef3d7b20df397f4cc44ddd04389850691292cdf292b204' '9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177' '965a517a283f265a012545fbb5cc9e516efc9f6166d2aa1baf7293a32a1086b7' - 'eee99d2a6c681ba22de02c39e60ae7293506142796f19257c219e5d206a56753' + 'f5dbff4833a2e3ca94c202e5197894d5f1006c689ff149355353e77d2e17c943' '49262ce4a8089fa70275aad742fc914baa28d9c384f710c9a62f64796d13e104' '98311deeb474b39e821cd1e64198793d5c4d797155b3b8bbcb1938b7f11e8d74') diff --git a/linux58-tkg/linux58-tkg-config/prepare b/linux58-tkg/linux58-tkg-config/prepare index 7e8b9b6..34534c8 100644 --- a/linux58-tkg/linux58-tkg-config/prepare +++ b/linux58-tkg/linux58-tkg-config/prepare @@ -182,7 +182,7 @@ _tkg_srcprep() { elif [ "${_cpusched}" = "pds" ]; then # PDS-mq msg2 "Applying PDS base patch" - patch -Np1 -i "$srcdir"/0009-prjc_v5.8-r2.patch + patch -Np1 -i "$srcdir"/0009-prjc_v5.8-r3.patch if [ "${_aggressive_ondemand}" = "true" ]; then msg2 "Applying PDS agressive ondemand governor patch" @@ -209,7 +209,7 @@ _tkg_srcprep() { # Project C / BMQ msg2 "Applying Project C / BMQ base patch" - patch -Np1 -i "$srcdir"/0009-prjc_v5.8-r2.patch + patch -Np1 -i "$srcdir"/0009-prjc_v5.8-r3.patch if [ "${_aggressive_ondemand}" = "true" ]; then msg2 "Applying BMQ agressive ondemand governor patch" diff --git a/linux58-tkg/linux58-tkg-patches/0009-prjc_v5.8-r2.patch b/linux58-tkg/linux58-tkg-patches/0009-prjc_v5.8-r3.patch similarity index 98% rename from linux58-tkg/linux58-tkg-patches/0009-prjc_v5.8-r2.patch rename to linux58-tkg/linux58-tkg-patches/0009-prjc_v5.8-r3.patch index ce874f8..01bffcd 100644 --- a/linux58-tkg/linux58-tkg-patches/0009-prjc_v5.8-r2.patch +++ b/linux58-tkg/linux58-tkg-patches/0009-prjc_v5.8-r3.patch @@ -267,7 +267,7 @@ index 683372943093..d25f2501daf3 100644 { return task->thread_pid; diff --git a/include/linux/sched/deadline.h b/include/linux/sched/deadline.h -index 1aff00b65f3c..45f0b0f3616c 100644 +index 1aff00b65f3c..179d77c8360e 100644 --- a/include/linux/sched/deadline.h +++ b/include/linux/sched/deadline.h @@ -1,5 +1,24 @@ @@ -275,13 +275,13 @@ index 1aff00b65f3c..45f0b0f3616c 100644 +#ifdef CONFIG_SCHED_ALT + -+#ifdef CONFIG_SCHED_BMQ -+#define __tsk_deadline(p) (0UL) -+ +static inline int dl_task(struct task_struct *p) +{ + return 0; +} ++ ++#ifdef CONFIG_SCHED_BMQ ++#define __tsk_deadline(p) (0UL) +#endif + +#ifdef CONFIG_SCHED_PDS @@ -527,7 +527,7 @@ index 000000000000..47ca955a451d +} +#endif /* _LINUX_SKIP_LIST_H */ diff --git a/init/Kconfig b/init/Kconfig -index 0498af567f70..09a302641ba6 100644 +index 0498af567f70..aaa7c434eedf 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -742,9 +742,39 @@ config GENERIC_SCHED_CLOCK @@ -566,7 +566,7 @@ index 0498af567f70..09a302641ba6 100644 config UCLAMP_TASK bool "Enable utilization clamping for RT/FAIR tasks" depends on CPU_FREQ_GOV_SCHEDUTIL -+ depends on !SCHED_BMQ ++ depends on !SCHED_ALT help This feature enables the scheduler to track the clamped utilization of each CPU based on RUNNABLE tasks scheduled on that CPU. @@ -574,7 +574,7 @@ index 0498af567f70..09a302641ba6 100644 depends on ARCH_SUPPORTS_NUMA_BALANCING depends on !ARCH_WANT_NUMA_VARIABLE_LOCALITY depends on SMP && NUMA && MIGRATION -+ depends on !SCHED_BMQ ++ depends on !SCHED_ALT help This option adds support for automatic NUMA aware memory/task placement. The mechanism is quite primitive and is based on migrating memory when @@ -583,7 +583,7 @@ index 0498af567f70..09a302641ba6 100644 tasks. -if CGROUP_SCHED -+if CGROUP_SCHED && !SCHED_BMQ ++if CGROUP_SCHED && !SCHED_ALT config FAIR_GROUP_SCHED bool "Group scheduling for SCHED_OTHER" depends on CGROUP_SCHED @@ -591,7 +591,7 @@ index 0498af567f70..09a302641ba6 100644 config SCHED_AUTOGROUP bool "Automatic process group scheduling" -+ depends on !SCHED_BMQ ++ depends on !SCHED_ALT select CGROUPS select CGROUP_SCHED select FAIR_GROUP_SCHED @@ -827,7 +827,7 @@ index 5fc9c9b70862..eb6d7d87779f 100644 obj-$(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) += cpufreq_schedutil.o diff --git a/kernel/sched/alt_core.c b/kernel/sched/alt_core.c new file mode 100644 -index 000000000000..76f72292e28a +index 000000000000..b469c9488d18 --- /dev/null +++ b/kernel/sched/alt_core.c @@ -0,0 +1,6184 @@ @@ -878,7 +878,7 @@ index 000000000000..76f72292e28a +#define CREATE_TRACE_POINTS +#include + -+#define ALT_SCHED_VERSION "v5.8-r2" ++#define ALT_SCHED_VERSION "v5.8-r3" + +/* rt_prio(prio) defined in include/linux/sched/rt.h */ +#define rt_task(p) rt_prio((p)->prio) @@ -2426,6 +2426,7 @@ index 000000000000..76f72292e28a +static inline void +ttwu_do_wakeup(struct rq *rq, struct task_struct *p, int wake_flags) +{ ++ check_preempt_curr(rq); + p->state = TASK_RUNNING; + trace_sched_wakeup(p); +} @@ -2448,6 +2449,8 @@ index 000000000000..76f72292e28a + + rq = __task_access_lock(p, &lock); + if (task_on_rq_queued(p)) { ++ /* check_preempt_curr() may use rq clock */ ++ update_rq_clock(rq); + ttwu_do_wakeup(rq, p, wake_flags); + ret = 1; + } @@ -2487,8 +2490,6 @@ index 000000000000..76f72292e28a + ttwu_do_activate(rq, p, p->sched_remote_wakeup ? WF_MIGRATED : 0); + } + -+ check_preempt_curr(rq); -+ + rq_unlock_irqrestore(rq, &rf); +} + @@ -2595,7 +2596,6 @@ index 000000000000..76f72292e28a + raw_spin_lock(&rq->lock); + update_rq_clock(rq); + ttwu_do_activate(rq, p, wake_flags); -+ check_preempt_curr(rq); + raw_spin_unlock(&rq->lock); +} + @@ -7981,11 +7981,11 @@ index 000000000000..7fdeace7e8a5 +#endif diff --git a/kernel/sched/pds_imp.h b/kernel/sched/pds_imp.h new file mode 100644 -index 000000000000..041827b92910 +index 000000000000..6baee5e961b9 --- /dev/null +++ b/kernel/sched/pds_imp.h -@@ -0,0 +1,226 @@ -+#define ALT_SCHED_VERSION_MSG "sched/bmq: PDS CPU Scheduler "ALT_SCHED_VERSION" by Alfred Chen.\n" +@@ -0,0 +1,257 @@ ++#define ALT_SCHED_VERSION_MSG "sched/pds: PDS CPU Scheduler "ALT_SCHED_VERSION" by Alfred Chen.\n" + +static const u64 user_prio2deadline[NICE_WIDTH] = { +/* -20 */ 4194304, 4613734, 5075107, 5582617, 6140878, @@ -8175,8 +8175,39 @@ index 000000000000..041827b92910 + return false; +} + ++/* ++ * pds_skiplist_random_level -- Returns a pseudo-random level number for skip ++ * list node which is used in PDS run queue. ++ * ++ * In current implementation, based on testing, the first 8 bits in microseconds ++ * of niffies are suitable for random level population. ++ * find_first_bit() is used to satisfy p = 0.5 between each levels, and there ++ * should be platform hardware supported instruction(known as ctz/clz) to speed ++ * up this function. ++ * The skiplist level for a task is populated when task is created and doesn't ++ * change in task's life time. When task is being inserted into run queue, this ++ * skiplist level is set to task's sl_node->level, the skiplist insert function ++ * may change it based on current level of the skip lsit. ++ */ ++static inline int pds_skiplist_random_level(const struct task_struct *p) ++{ ++ long unsigned int randseed; ++ ++ /* ++ * 1. Some architectures don't have better than microsecond resolution ++ * so mask out ~microseconds as a factor of the random seed for skiplist ++ * insertion. ++ * 2. Use address of task structure pointer as another factor of the ++ * random seed for task burst forking scenario. ++ */ ++ randseed = (task_rq(p)->clock ^ (long unsigned int)p) >> 10; ++ ++ return find_first_bit(&randseed, NUM_SKIPLIST_LEVEL - 1); ++} ++ +static void sched_task_fork(struct task_struct *p, struct rq *rq) +{ ++ p->sl_level = pds_skiplist_random_level(p); + if (p->prio >= MAX_RT_PRIO) + p->deadline = rq->clock + user_prio2deadline[TASK_USER_PRIO(p)]; + update_task_priodl(p); @@ -8549,74 +8580,3 @@ index b5e3496cf803..65f60c77bc50 100644 }; struct wakeup_test_data *x = data; -diff --git a/include/linux/sched/deadline.h b/include/linux/sched/deadline.h -index 45f0b0f3616c934a3bfa43d0f2ba998c6f006dba..179d77c8360ebdd795a5bb9d2b046232403907a1 100644 ---- a/include/linux/sched/deadline.h -+++ b/include/linux/sched/deadline.h -@@ -2,13 +2,13 @@ - - #ifdef CONFIG_SCHED_ALT - --#ifdef CONFIG_SCHED_BMQ --#define __tsk_deadline(p) (0UL) -- - static inline int dl_task(struct task_struct *p) - { - return 0; - } -+ -+#ifdef CONFIG_SCHED_BMQ -+#define __tsk_deadline(p) (0UL) - #endif - - #ifdef CONFIG_SCHED_PDS -diff --git a/init/Kconfig b/init/Kconfig -index 09a302641ba67bc0dd6223d240c7172e808abe42..aaa7c434eedfc5bce8c331926d0fab14c58ca007 100644 ---- a/init/Kconfig -+++ b/init/Kconfig -@@ -774,7 +774,7 @@ endif - config UCLAMP_TASK - bool "Enable utilization clamping for RT/FAIR tasks" - depends on CPU_FREQ_GOV_SCHEDUTIL -- depends on !SCHED_BMQ -+ depends on !SCHED_ALT - help - This feature enables the scheduler to track the clamped utilization - of each CPU based on RUNNABLE tasks scheduled on that CPU. -@@ -860,7 +860,7 @@ config NUMA_BALANCING - depends on ARCH_SUPPORTS_NUMA_BALANCING - depends on !ARCH_WANT_NUMA_VARIABLE_LOCALITY - depends on SMP && NUMA && MIGRATION -- depends on !SCHED_BMQ -+ depends on !SCHED_ALT - help - This option adds support for automatic NUMA aware memory/task placement. - The mechanism is quite primitive and is based on migrating memory when -@@ -947,7 +947,7 @@ menuconfig CGROUP_SCHED - bandwidth allocation to such task groups. It uses cgroups to group - tasks. - --if CGROUP_SCHED && !SCHED_BMQ -+if CGROUP_SCHED && !SCHED_ALT - config FAIR_GROUP_SCHED - bool "Group scheduling for SCHED_OTHER" - depends on CGROUP_SCHED -@@ -1203,7 +1203,7 @@ config CHECKPOINT_RESTORE - - config SCHED_AUTOGROUP - bool "Automatic process group scheduling" -- depends on !SCHED_BMQ -+ depends on !SCHED_ALT - select CGROUPS - select CGROUP_SCHED - select FAIR_GROUP_SCHED -diff --git a/kernel/sched/pds_imp.h b/kernel/sched/pds_imp.h -index 041827b92910d0b2ffd83ca41c149d3802b2ad38..66dc16218444c35831b8a93e37463c98b1c0189e 100644 ---- a/kernel/sched/pds_imp.h -+++ b/kernel/sched/pds_imp.h -@@ -1,4 +1,4 @@ --#define ALT_SCHED_VERSION_MSG "sched/bmq: PDS CPU Scheduler "ALT_SCHED_VERSION" by Alfred Chen.\n" -+#define ALT_SCHED_VERSION_MSG "sched/pds: PDS CPU Scheduler "ALT_SCHED_VERSION" by Alfred Chen.\n" - - static const u64 user_prio2deadline[NICE_WIDTH] = { - /* -20 */ 4194304, 4613734, 5075107, 5582617, 6140878,